{"version":3,"file":"browser_compat-BTzeYvRq.js","names":["exports","exports","\"default\""],"sources":["../../node_modules/protobufjs/src/util/aspromise.js","../../node_modules/protobufjs/src/util/base64.js","../../node_modules/protobufjs/src/util/eventemitter.js","../../node_modules/protobufjs/src/util/float.js","../../node_modules/protobufjs/src/util/utf8.js","../../node_modules/protobufjs/src/util/pool.js","../../node_modules/protobufjs/src/util/longbits.js","../../node_modules/long/umd/index.js","../../node_modules/protobufjs/src/util/minimal.js","../../node_modules/protobufjs/src/writer.js","../../node_modules/protobufjs/src/writer_buffer.js","../../node_modules/protobufjs/src/reader.js","../../node_modules/protobufjs/src/reader_buffer.js","../../node_modules/protobufjs/src/rpc/service.js","../../node_modules/protobufjs/src/rpc.js","../../node_modules/protobufjs/src/roots.js","../../node_modules/protobufjs/src/index-minimal.js","../../node_modules/protobufjs/minimal.js","../../src/proto/compiled_proto.js","../../src/core/strings.ts","../../src/api-config.ts","../../src/core/html.ts","../../src/locales/us-en.json","../../src/i18n.ts","../../src/theme-manager.ts","../../src/core/browser_compat.ts"],"sourcesContent":["\"use strict\";\nmodule.exports = asPromise;\n\n/**\n * Callback as used by {@link util.asPromise}.\n * @typedef asPromiseCallback\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {...*} params Additional arguments\n * @returns {undefined}\n */\n\n/**\n * Returns a promise from a node-style callback function.\n * @memberof util\n * @param {asPromiseCallback} fn Function to call\n * @param {*} ctx Function context\n * @param {...*} params Function arguments\n * @returns {Promise<*>} Promisified function\n */\nfunction asPromise(fn, ctx/*, varargs */) {\n    var params  = new Array(arguments.length - 1),\n        offset  = 0,\n        index   = 2,\n        pending = true;\n    while (index < arguments.length)\n        params[offset++] = arguments[index++];\n    return new Promise(function executor(resolve, reject) {\n        params[offset] = function callback(err/*, varargs */) {\n            if (pending) {\n                pending = false;\n                if (err)\n                    reject(err);\n                else {\n                    var params = new Array(arguments.length - 1),\n                        offset = 0;\n                    while (offset < params.length)\n                        params[offset++] = arguments[offset];\n                    resolve.apply(null, params);\n                }\n            }\n        };\n        try {\n            fn.apply(ctx || null, params);\n        } catch (err) {\n            if (pending) {\n                pending = false;\n                reject(err);\n            }\n        }\n    });\n}\n","\"use strict\";\n\n/**\n * A minimal base64 implementation for number arrays.\n * @memberof util\n * @namespace\n */\nvar base64 = exports;\n\n/**\n * Calculates the byte length of a base64 encoded string.\n * @param {string} string Base64 encoded string\n * @returns {number} Byte length\n */\nbase64.length = function length(string) {\n    var p = string.length;\n    if (!p)\n        return 0;\n    while (p > 0 && string.charAt(p - 1) === \"=\")\n        --p;\n    return Math.floor(p * 3 / 4);\n};\n\n// Base64 encoding table\nvar b64 = new Array(64);\n\n// Base64 decoding table\nvar s64 = new Array(123);\n\n// 65..90, 97..122, 48..57, 43, 47\nfor (var i = 0; i < 64;)\n    s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\n\ns64[45] = 62; // - -> +\ns64[95] = 63; // _ -> /\n\n/**\n * Encodes a buffer to a base64 encoded string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} Base64 encoded string\n */\nbase64.encode = function encode(buffer, start, end) {\n    var parts = null,\n        chunk = [];\n    var i = 0, // output index\n        j = 0, // goto index\n        t;     // temporary\n    while (start < end) {\n        var b = buffer[start++];\n        switch (j) {\n            case 0:\n                chunk[i++] = b64[b >> 2];\n                t = (b & 3) << 4;\n                j = 1;\n                break;\n            case 1:\n                chunk[i++] = b64[t | b >> 4];\n                t = (b & 15) << 2;\n                j = 2;\n                break;\n            case 2:\n                chunk[i++] = b64[t | b >> 6];\n                chunk[i++] = b64[b & 63];\n                j = 0;\n                break;\n        }\n        if (i > 8191) {\n            (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\n            i = 0;\n        }\n    }\n    if (j) {\n        chunk[i++] = b64[t];\n        chunk[i++] = 61;\n        if (j === 1)\n            chunk[i++] = 61;\n    }\n    if (parts) {\n        if (i)\n            parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\n        return parts.join(\"\");\n    }\n    return String.fromCharCode.apply(String, chunk.slice(0, i));\n};\n\nvar invalidEncoding = \"invalid encoding\";\n\n/**\n * Decodes a base64 encoded string to a buffer.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Number of bytes written\n * @throws {Error} If encoding is invalid\n */\nbase64.decode = function decode(string, buffer, offset) {\n    var start = offset;\n    var j = 0, // goto index\n        t;     // temporary\n    for (var i = 0; i < string.length;) {\n        var c = string.charCodeAt(i++);\n        if (c === 61 && j > 1)\n            break;\n        if ((c = s64[c]) === undefined)\n            throw Error(invalidEncoding);\n        switch (j) {\n            case 0:\n                t = c;\n                j = 1;\n                break;\n            case 1:\n                buffer[offset++] = t << 2 | (c & 48) >> 4;\n                t = c;\n                j = 2;\n                break;\n            case 2:\n                buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\n                t = c;\n                j = 3;\n                break;\n            case 3:\n                buffer[offset++] = (t & 3) << 6 | c;\n                j = 0;\n                break;\n        }\n    }\n    if (j === 1)\n        throw Error(invalidEncoding);\n    return offset - start;\n};\n\nvar base64Re = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n    base64UrlRe = /[-_]/,\n    base64UrlNoPaddingRe = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}(?:==)?|[A-Za-z0-9_-]{3}=?)?$/;\n\n/**\n * Tests if the specified string appears to be base64 encoded.\n * @param {string} string String to test\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\n */\nbase64.test = function test(string) {\n    return base64Re.test(string)\n        || base64UrlRe.test(string) && base64UrlNoPaddingRe.test(string);\n};\n","\"use strict\";\nmodule.exports = EventEmitter;\n\n/**\n * Constructs a new event emitter instance.\n * @classdesc A minimal event emitter.\n * @memberof util\n * @constructor\n */\nfunction EventEmitter() {\n\n    /**\n     * Registered listeners.\n     * @type {Object.<string,*>}\n     * @private\n     */\n    this._listeners = Object.create(null);\n}\n\n/**\n * Event listener as used by {@link util.EventEmitter}.\n * @typedef EventEmitterListener\n * @type {function}\n * @param {...*} args Arguments\n * @returns {undefined}\n */\n\n/**\n * Registers an event listener.\n * @param {string} evt Event name\n * @param {EventEmitterListener} fn Listener\n * @param {*} [ctx] Listener context\n * @returns {this} `this`\n */\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\n    (this._listeners[evt] || (this._listeners[evt] = [])).push({\n        fn  : fn,\n        ctx : ctx || this\n    });\n    return this;\n};\n\n/**\n * Removes an event listener or any matching listeners if arguments are omitted.\n * @param {string} [evt] Event name. Removes all listeners if omitted.\n * @param {EventEmitterListener} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\n * @returns {this} `this`\n */\nEventEmitter.prototype.off = function off(evt, fn) {\n    if (evt === undefined)\n        this._listeners = Object.create(null);\n    else {\n        if (fn === undefined)\n            this._listeners[evt] = [];\n        else {\n            var listeners = this._listeners[evt];\n            if (!listeners)\n                return this;\n            for (var i = 0; i < listeners.length;)\n                if (listeners[i].fn === fn)\n                    listeners.splice(i, 1);\n                else\n                    ++i;\n        }\n    }\n    return this;\n};\n\n/**\n * Emits an event by calling its listeners with the specified arguments.\n * @param {string} evt Event name\n * @param {...*} args Arguments\n * @returns {this} `this`\n */\nEventEmitter.prototype.emit = function emit(evt) {\n    var listeners = this._listeners[evt];\n    if (listeners) {\n        var args = [],\n            i = 1;\n        for (; i < arguments.length;)\n            args.push(arguments[i++]);\n        for (i = 0; i < listeners.length;)\n            listeners[i].fn.apply(listeners[i++].ctx, args);\n    }\n    return this;\n};\n","\"use strict\";\n\nmodule.exports = factory(factory);\n\n/**\n * Reads / writes floats / doubles from / to buffers.\n * @name util.float\n * @namespace\n */\n\n/**\n * Writes a 32 bit float to a buffer using little endian byte order.\n * @name util.float.writeFloatLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 32 bit float to a buffer using big endian byte order.\n * @name util.float.writeFloatBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 32 bit float from a buffer using little endian byte order.\n * @name util.float.readFloatLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 32 bit float from a buffer using big endian byte order.\n * @name util.float.readFloatBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Writes a 64 bit double to a buffer using little endian byte order.\n * @name util.float.writeDoubleLE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Writes a 64 bit double to a buffer using big endian byte order.\n * @name util.float.writeDoubleBE\n * @function\n * @param {number} val Value to write\n * @param {Uint8Array} buf Target buffer\n * @param {number} pos Target buffer offset\n * @returns {undefined}\n */\n\n/**\n * Reads a 64 bit double from a buffer using little endian byte order.\n * @name util.float.readDoubleLE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n/**\n * Reads a 64 bit double from a buffer using big endian byte order.\n * @name util.float.readDoubleBE\n * @function\n * @param {Uint8Array} buf Source buffer\n * @param {number} pos Source buffer offset\n * @returns {number} Value read\n */\n\n// Factory function for the purpose of node-based testing in modified global environments\nfunction factory(exports) {\n\n    // float: typed array\n    if (typeof Float32Array !== \"undefined\") (function() {\n\n        var f32 = new Float32Array([ -0 ]),\n            f8b = new Uint8Array(f32.buffer),\n            le  = f8b[3] === 128;\n\n        function writeFloat_f32_cpy(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n        }\n\n        function writeFloat_f32_rev(val, buf, pos) {\n            f32[0] = val;\n            buf[pos    ] = f8b[3];\n            buf[pos + 1] = f8b[2];\n            buf[pos + 2] = f8b[1];\n            buf[pos + 3] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\n\n        function readFloat_f32_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            return f32[0];\n        }\n\n        function readFloat_f32_rev(buf, pos) {\n            f8b[3] = buf[pos    ];\n            f8b[2] = buf[pos + 1];\n            f8b[1] = buf[pos + 2];\n            f8b[0] = buf[pos + 3];\n            return f32[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\n        /* istanbul ignore next */\n        exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\n\n    // float: ieee754\n    })(); else (function() {\n\n        function writeFloat_ieee754(writeUint, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0)\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\n            else if (isNaN(val))\n                writeUint(2143289344, buf, pos);\n            else if (val > 3.4028234663852886e+38) // +-Infinity\n                writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\n            else if (val < 1.1754943508222875e-38) // denormal\n                writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\n            else {\n                var exponent = Math.floor(Math.log(val) / Math.LN2),\n                    mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\n                writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\n            }\n        }\n\n        exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\n        exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\n\n        function readFloat_ieee754(readUint, buf, pos) {\n            var uint = readUint(buf, pos),\n                sign = (uint >> 31) * 2 + 1,\n                exponent = uint >>> 23 & 255,\n                mantissa = uint & 8388607;\n            return exponent === 255\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 1.401298464324817e-45 * mantissa\n                : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\n        }\n\n        exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\n        exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\n\n    })();\n\n    // double: typed array\n    if (typeof Float64Array !== \"undefined\") (function() {\n\n        var f64 = new Float64Array([-0]),\n            f8b = new Uint8Array(f64.buffer),\n            le  = f8b[7] === 128;\n\n        function writeDouble_f64_cpy(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[0];\n            buf[pos + 1] = f8b[1];\n            buf[pos + 2] = f8b[2];\n            buf[pos + 3] = f8b[3];\n            buf[pos + 4] = f8b[4];\n            buf[pos + 5] = f8b[5];\n            buf[pos + 6] = f8b[6];\n            buf[pos + 7] = f8b[7];\n        }\n\n        function writeDouble_f64_rev(val, buf, pos) {\n            f64[0] = val;\n            buf[pos    ] = f8b[7];\n            buf[pos + 1] = f8b[6];\n            buf[pos + 2] = f8b[5];\n            buf[pos + 3] = f8b[4];\n            buf[pos + 4] = f8b[3];\n            buf[pos + 5] = f8b[2];\n            buf[pos + 6] = f8b[1];\n            buf[pos + 7] = f8b[0];\n        }\n\n        /* istanbul ignore next */\n        exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\n\n        function readDouble_f64_cpy(buf, pos) {\n            f8b[0] = buf[pos    ];\n            f8b[1] = buf[pos + 1];\n            f8b[2] = buf[pos + 2];\n            f8b[3] = buf[pos + 3];\n            f8b[4] = buf[pos + 4];\n            f8b[5] = buf[pos + 5];\n            f8b[6] = buf[pos + 6];\n            f8b[7] = buf[pos + 7];\n            return f64[0];\n        }\n\n        function readDouble_f64_rev(buf, pos) {\n            f8b[7] = buf[pos    ];\n            f8b[6] = buf[pos + 1];\n            f8b[5] = buf[pos + 2];\n            f8b[4] = buf[pos + 3];\n            f8b[3] = buf[pos + 4];\n            f8b[2] = buf[pos + 5];\n            f8b[1] = buf[pos + 6];\n            f8b[0] = buf[pos + 7];\n            return f64[0];\n        }\n\n        /* istanbul ignore next */\n        exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\n        /* istanbul ignore next */\n        exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\n\n    // double: ieee754\n    })(); else (function() {\n\n        function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\n            var sign = val < 0 ? 1 : 0;\n            if (sign)\n                val = -val;\n            if (val === 0) {\n                writeUint(0, buf, pos + off0);\n                writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\n            } else if (isNaN(val)) {\n                writeUint(0, buf, pos + off0);\n                writeUint(2146959360, buf, pos + off1);\n            } else if (val > 1.7976931348623157e+308) { // +-Infinity\n                writeUint(0, buf, pos + off0);\n                writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\n            } else {\n                var mantissa;\n                if (val < 2.2250738585072014e-308) { // denormal\n                    mantissa = val / 5e-324;\n                    writeUint(mantissa >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\n                } else {\n                    var exponent = Math.floor(Math.log(val) / Math.LN2);\n                    if (exponent === 1024)\n                        exponent = 1023;\n                    mantissa = val * Math.pow(2, -exponent);\n                    writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\n                    writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\n                }\n            }\n        }\n\n        exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\n        exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\n\n        function readDouble_ieee754(readUint, off0, off1, buf, pos) {\n            var lo = readUint(buf, pos + off0),\n                hi = readUint(buf, pos + off1);\n            var sign = (hi >> 31) * 2 + 1,\n                exponent = hi >>> 20 & 2047,\n                mantissa = 4294967296 * (hi & 1048575) + lo;\n            return exponent === 2047\n                ? mantissa\n                ? NaN\n                : sign * Infinity\n                : exponent === 0 // denormal\n                ? sign * 5e-324 * mantissa\n                : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\n        }\n\n        exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\n        exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\n\n    })();\n\n    return exports;\n}\n\n// uint helpers\n\nfunction writeUintLE(val, buf, pos) {\n    buf[pos    ] =  val        & 255;\n    buf[pos + 1] =  val >>> 8  & 255;\n    buf[pos + 2] =  val >>> 16 & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\nfunction writeUintBE(val, buf, pos) {\n    buf[pos    ] =  val >>> 24;\n    buf[pos + 1] =  val >>> 16 & 255;\n    buf[pos + 2] =  val >>> 8  & 255;\n    buf[pos + 3] =  val        & 255;\n}\n\nfunction readUintLE(buf, pos) {\n    return (buf[pos    ]\n          | buf[pos + 1] << 8\n          | buf[pos + 2] << 16\n          | buf[pos + 3] << 24) >>> 0;\n}\n\nfunction readUintBE(buf, pos) {\n    return (buf[pos    ] << 24\n          | buf[pos + 1] << 16\n          | buf[pos + 2] << 8\n          | buf[pos + 3]) >>> 0;\n}\n","\"use strict\";\n\n/**\n * A minimal UTF8 implementation.\n * @memberof util\n * @namespace\n */\nvar utf8 = exports,\n    looseDecoder = new TextDecoder(\"utf-8\", { ignoreBOM: true }),\n    strictDecoder;\nvar TEXT_DECODER_MIN_LENGTH = 64;\n\ntry {\n    strictDecoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n} catch (err) {\n    // \"fatal\" option is not supported on Node.js compiled without ICU\n    strictDecoder = looseDecoder;\n}\n\n/**\n * Calculates the UTF8 byte length of a string.\n * @param {string} string String\n * @returns {number} Byte length\n */\nutf8.length = function utf8_length(string) {\n    var len = 0,\n        c = 0;\n    for (var i = 0; i < string.length; ++i) {\n        c = string.charCodeAt(i);\n        if (c < 128)\n            len += 1;\n        else if (c < 2048)\n            len += 2;\n        else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\n            ++i;\n            len += 4;\n        } else\n            len += 3;\n    }\n    return len;\n};\n\nfunction utf8_read_decoder(decoder, buffer, start, end) {\n    var source = start === 0 && end === buffer.length\n        ? buffer\n        : buffer.subarray(start, end);\n    return decoder.decode(source);\n}\n\n/**\n * Reads UTF8 bytes as a string.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.read = function utf8_read_loose(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(looseDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(looseDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Reads UTF8 bytes as a string, rejecting invalid UTF8.\n * @param {Uint8Array} buffer Source buffer\n * @param {number} start Source start\n * @param {number} end Source end\n * @returns {string} String read\n */\nutf8.readStrict = function utf8_read_strict(buffer, start, end) {\n    if (end - start < 1)\n        return \"\";\n    if (end - start >= TEXT_DECODER_MIN_LENGTH)\n        return utf8_read_decoder(strictDecoder, buffer, start, end);\n\n    var str = \"\",\n        i = start,\n        c1, c2, c3, c4, c5, c6, c7, c8;\n\n    for (; i + 7 < end; i += 8) {\n        c1 = buffer[i];\n        c2 = buffer[i + 1];\n        c3 = buffer[i + 2];\n        c4 = buffer[i + 3];\n        c5 = buffer[i + 4];\n        c6 = buffer[i + 5];\n        c7 = buffer[i + 6];\n        c8 = buffer[i + 7];\n        if ((c1 | c2 | c3 | c4 | c5 | c6 | c7 | c8) & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1, c2, c3, c4, c5, c6, c7, c8);\n    }\n\n    for (; i < end; ++i) {\n        c1 = buffer[i];\n        if (c1 & 0x80)\n            return str + utf8_read_decoder(strictDecoder, buffer, i, end);\n        str += String.fromCharCode(c1);\n    }\n\n    return str;\n};\n\n/**\n * Writes a string as UTF8 bytes.\n * @param {string} string Source string\n * @param {Uint8Array} buffer Destination buffer\n * @param {number} offset Destination offset\n * @returns {number} Bytes written\n */\nutf8.write = function utf8_write(string, buffer, offset) {\n    var start = offset,\n        c1, // character 1\n        c2; // character 2\n    for (var i = 0; i < string.length; ++i) {\n        c1 = string.charCodeAt(i);\n        if (c1 < 128) {\n            buffer[offset++] = c1;\n        } else if (c1 < 2048) {\n            buffer[offset++] = c1 >> 6       | 192;\n            buffer[offset++] = c1       & 63 | 128;\n        } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\n            c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\n            ++i;\n            buffer[offset++] = c1 >> 18      | 240;\n            buffer[offset++] = c1 >> 12 & 63 | 128;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        } else {\n            buffer[offset++] = c1 >> 12      | 224;\n            buffer[offset++] = c1 >> 6  & 63 | 128;\n            buffer[offset++] = c1       & 63 | 128;\n        }\n    }\n    return offset - start;\n};\n","\"use strict\";\nmodule.exports = pool;\n\n/**\n * An allocator as used by {@link util.pool}.\n * @typedef PoolAllocator\n * @type {function}\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\n\n/**\n * A slicer as used by {@link util.pool}.\n * @typedef PoolSlicer\n * @type {function}\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Buffer slice\n * @this Uint8Array\n */\n\n/**\n * A general purpose buffer pool.\n * @memberof util\n * @function\n * @param {PoolAllocator} alloc Allocator\n * @param {PoolSlicer} slice Slicer\n * @param {number} [size=8192] Slab size\n * @returns {PoolAllocator} Pooled allocator\n */\nfunction pool(alloc, slice, size) {\n    var SIZE   = size || 8192;\n    var MAX    = SIZE >>> 1;\n    var slab   = null;\n    var offset = SIZE;\n    return function pool_alloc(size) {\n        if (size < 1 || size > MAX)\n            return alloc(size);\n        if (offset + size > SIZE) {\n            slab = alloc(SIZE);\n            offset = 0;\n        }\n        var buf = slice.call(slab, offset, offset += size);\n        if (offset & 7) // align to 32 bit\n            offset = (offset | 7) + 1;\n        return buf;\n    };\n}\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar Long;\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n    // note that the casts below are theoretically unnecessary as of today, but older statically\n    // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n    /**\n     * Low bits.\n     * @type {number}\n     */\n    this.lo = lo >>> 0;\n\n    /**\n     * High bits.\n     * @type {number}\n     */\n    this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n    if (value === 0)\n        return zero;\n    var sign = value < 0;\n    if (sign)\n        value = -value;\n    var lo = value >>> 0,\n        hi = (value - lo) / 4294967296 >>> 0;\n    if (sign) {\n        hi = ~hi >>> 0;\n        lo = ~lo >>> 0;\n        if (++lo > 4294967295) {\n            lo = 0;\n            if (++hi > 4294967295)\n                hi = 0;\n        }\n    }\n    return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n    if (typeof value === \"number\")\n        return LongBits.fromNumber(value);\n    if (typeof value === \"string\" || value instanceof String) {\n        /* istanbul ignore else */\n        if (Long)\n            value = Long.fromString(value);\n        else\n            return LongBits.fromNumber(parseInt(value, 10));\n    }\n    return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n    if (!unsigned && this.hi >>> 31) {\n        var lo = ~this.lo + 1 >>> 0,\n            hi = ~this.hi     >>> 0;\n        if (!lo)\n            hi = hi + 1 >>> 0;\n        return -(lo + hi * 4294967296);\n    }\n    return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n    return Long\n        ? new Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n        /* istanbul ignore next */\n        : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n    if (hash === zeroHash)\n        return zero;\n    return new LongBits(\n        ( charCodeAt.call(hash, 0)\n        | charCodeAt.call(hash, 1) << 8\n        | charCodeAt.call(hash, 2) << 16\n        | charCodeAt.call(hash, 3) << 24) >>> 0\n    ,\n        ( charCodeAt.call(hash, 4)\n        | charCodeAt.call(hash, 5) << 8\n        | charCodeAt.call(hash, 6) << 16\n        | charCodeAt.call(hash, 7) << 24) >>> 0\n    );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n    return String.fromCharCode(\n        this.lo        & 255,\n        this.lo >>> 8  & 255,\n        this.lo >>> 16 & 255,\n        this.lo >>> 24      ,\n        this.hi        & 255,\n        this.hi >>> 8  & 255,\n        this.hi >>> 16 & 255,\n        this.hi >>> 24\n    );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n    var mask =   this.hi >> 31;\n    this.hi  = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n    this.lo  = ( this.lo << 1                   ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n    var mask = -(this.lo & 1);\n    this.lo  = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n    this.hi  = ( this.hi >>> 1                  ^ mask) >>> 0;\n    return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n    var part0 =  this.lo,\n        part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n        part2 =  this.hi >>> 24;\n    return part2 === 0\n         ? part1 === 0\n           ? part0 < 16384\n             ? part0 < 128 ? 1 : 2\n             : part0 < 2097152 ? 3 : 4\n           : part1 < 16384\n             ? part1 < 128 ? 5 : 6\n             : part1 < 2097152 ? 7 : 8\n         : part2 < 128 ? 9 : 10;\n};\n\nLongBits._configure = function(Long_) {\n    Long = Long_;\n};\n","// GENERATED FILE. DO NOT EDIT.\n(function (global, factory) {\n  function preferDefault(exports) {\n    return exports.default || exports;\n  }\n  if (typeof define === \"function\" && define.amd) {\n    define([], function () {\n      var exports = {};\n      factory(exports);\n      return preferDefault(exports);\n    });\n  } else if (typeof exports === \"object\") {\n    factory(exports);\n    if (typeof module === \"object\") module.exports = preferDefault(exports);\n  } else {\n    (function () {\n      var exports = {};\n      factory(exports);\n      global.Long = preferDefault(exports);\n    })();\n  }\n})(\n  typeof globalThis !== \"undefined\"\n    ? globalThis\n    : typeof self !== \"undefined\"\n      ? self\n      : this,\n  function (_exports) {\n    \"use strict\";\n\n    Object.defineProperty(_exports, \"__esModule\", {\n      value: true,\n    });\n    _exports.default = void 0;\n    /**\n     * @license\n     * Copyright 2009 The Closure Library Authors\n     * Copyright 2020 Daniel Wirtz / The long.js Authors.\n     *\n     * Licensed under the Apache License, Version 2.0 (the \"License\");\n     * you may not use this file except in compliance with the License.\n     * You may obtain a copy of the License at\n     *\n     *     http://www.apache.org/licenses/LICENSE-2.0\n     *\n     * Unless required by applicable law or agreed to in writing, software\n     * distributed under the License is distributed on an \"AS IS\" BASIS,\n     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n     * See the License for the specific language governing permissions and\n     * limitations under the License.\n     *\n     * SPDX-License-Identifier: Apache-2.0\n     */\n\n    // WebAssembly optimizations to do native i64 multiplication and divide\n    var wasm = null;\n    try {\n      wasm = new WebAssembly.Instance(\n        new WebAssembly.Module(\n          new Uint8Array([\n            // \\0asm\n            0, 97, 115, 109,\n            // version 1\n            1, 0, 0, 0,\n            // section \"type\"\n            1, 13, 2,\n            // 0, () => i32\n            96, 0, 1, 127,\n            // 1, (i32, i32, i32, i32) => i32\n            96, 4, 127, 127, 127, 127, 1, 127,\n            // section \"function\"\n            3, 7, 6,\n            // 0, type 0\n            0,\n            // 1, type 1\n            1,\n            // 2, type 1\n            1,\n            // 3, type 1\n            1,\n            // 4, type 1\n            1,\n            // 5, type 1\n            1,\n            // section \"global\"\n            6, 6, 1,\n            // 0, \"high\", mutable i32\n            127, 1, 65, 0, 11,\n            // section \"export\"\n            7, 50, 6,\n            // 0, \"mul\"\n            3, 109, 117, 108, 0, 1,\n            // 1, \"div_s\"\n            5, 100, 105, 118, 95, 115, 0, 2,\n            // 2, \"div_u\"\n            5, 100, 105, 118, 95, 117, 0, 3,\n            // 3, \"rem_s\"\n            5, 114, 101, 109, 95, 115, 0, 4,\n            // 4, \"rem_u\"\n            5, 114, 101, 109, 95, 117, 0, 5,\n            // 5, \"get_high\"\n            8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0,\n            // section \"code\"\n            10, 191, 1, 6,\n            // 0, \"get_high\"\n            4, 0, 35, 0, 11,\n            // 1, \"mul\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 2, \"div_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 3, \"div_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 4, \"rem_s\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n            // 5, \"rem_u\"\n            36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173,\n            32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0,\n            32, 4, 167, 11,\n          ]),\n        ),\n        {},\n      ).exports;\n    } catch {\n      // no wasm support :(\n    }\n\n    /**\n     * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n     *  See the from* functions below for more convenient ways of constructing Longs.\n     * @exports Long\n     * @class A Long class for representing a 64 bit two's-complement integer value.\n     * @param {number} low The low (signed) 32 bits of the long\n     * @param {number} high The high (signed) 32 bits of the long\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @constructor\n     */\n    function Long(low, high, unsigned) {\n      /**\n       * The low 32 bits as a signed value.\n       * @type {number}\n       */\n      this.low = low | 0;\n\n      /**\n       * The high 32 bits as a signed value.\n       * @type {number}\n       */\n      this.high = high | 0;\n\n      /**\n       * Whether unsigned or not.\n       * @type {boolean}\n       */\n      this.unsigned = !!unsigned;\n    }\n\n    // The internal representation of a long is the two given signed, 32-bit values.\n    // We use 32-bit pieces because these are the size of integers on which\n    // Javascript performs bit-operations.  For operations like addition and\n    // multiplication, we split each number into 16 bit pieces, which can easily be\n    // multiplied within Javascript's floating-point representation without overflow\n    // or change in sign.\n    //\n    // In the algorithms below, we frequently reduce the negative case to the\n    // positive case by negating the input(s) and then post-processing the result.\n    // Note that we must ALWAYS check specially whether those values are MIN_VALUE\n    // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n    // a positive number, it overflows back into a negative).  Not handling this\n    // case would often result in infinite recursion.\n    //\n    // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n    // methods on which they depend.\n\n    /**\n     * An indicator used to reliably determine if an object is a Long or not.\n     * @type {boolean}\n     * @const\n     * @private\n     */\n    Long.prototype.__isLong__;\n    Object.defineProperty(Long.prototype, \"__isLong__\", {\n      value: true,\n    });\n\n    /**\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     * @inner\n     */\n    function isLong(obj) {\n      return (obj && obj[\"__isLong__\"]) === true;\n    }\n\n    /**\n     * @function\n     * @param {*} value number\n     * @returns {number}\n     * @inner\n     */\n    function ctz32(value) {\n      var c = Math.clz32(value & -value);\n      return value ? 31 - c : c;\n    }\n\n    /**\n     * Tests if the specified object is a Long.\n     * @function\n     * @param {*} obj Object\n     * @returns {boolean}\n     */\n    Long.isLong = isLong;\n\n    /**\n     * A cache of the Long representations of small integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var INT_CACHE = {};\n\n    /**\n     * A cache of the Long representations of small unsigned integer values.\n     * @type {!Object}\n     * @inner\n     */\n    var UINT_CACHE = {};\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromInt(value, unsigned) {\n      var obj, cachedObj, cache;\n      if (unsigned) {\n        value >>>= 0;\n        if ((cache = 0 <= value && value < 256)) {\n          cachedObj = UINT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, 0, true);\n        if (cache) UINT_CACHE[value] = obj;\n        return obj;\n      } else {\n        value |= 0;\n        if ((cache = -128 <= value && value < 128)) {\n          cachedObj = INT_CACHE[value];\n          if (cachedObj) return cachedObj;\n        }\n        obj = fromBits(value, value < 0 ? -1 : 0, false);\n        if (cache) INT_CACHE[value] = obj;\n        return obj;\n      }\n    }\n\n    /**\n     * Returns a Long representing the given 32 bit integer value.\n     * @function\n     * @param {number} value The 32 bit integer in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromInt = fromInt;\n\n    /**\n     * @param {number} value\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromNumber(value, unsigned) {\n      if (isNaN(value)) return unsigned ? UZERO : ZERO;\n      if (unsigned) {\n        if (value < 0) return UZERO;\n        if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE;\n      } else {\n        if (value <= -TWO_PWR_63_DBL) return MIN_VALUE;\n        if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE;\n      }\n      if (value < 0) return fromNumber(-value, unsigned).neg();\n      return fromBits(\n        value % TWO_PWR_32_DBL | 0,\n        (value / TWO_PWR_32_DBL) | 0,\n        unsigned,\n      );\n    }\n\n    /**\n     * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n     * @function\n     * @param {number} value The number in question\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromNumber = fromNumber;\n\n    /**\n     * @param {number} lowBits\n     * @param {number} highBits\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromBits(lowBits, highBits, unsigned) {\n      return new Long(lowBits, highBits, unsigned);\n    }\n\n    /**\n     * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n     *  assumed to use 32 bits.\n     * @function\n     * @param {number} lowBits The low 32 bits\n     * @param {number} highBits The high 32 bits\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromBits = fromBits;\n\n    /**\n     * @function\n     * @param {number} base\n     * @param {number} exponent\n     * @returns {number}\n     * @inner\n     */\n    var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n\n    /**\n     * @param {string} str\n     * @param {(boolean|number)=} unsigned\n     * @param {number=} radix\n     * @returns {!Long}\n     * @inner\n     */\n    function fromString(str, unsigned, radix) {\n      if (str.length === 0) throw Error(\"empty string\");\n      if (typeof unsigned === \"number\") {\n        // For goog.math.long compatibility\n        radix = unsigned;\n        unsigned = false;\n      } else {\n        unsigned = !!unsigned;\n      }\n      if (\n        str === \"NaN\" ||\n        str === \"Infinity\" ||\n        str === \"+Infinity\" ||\n        str === \"-Infinity\"\n      )\n        return unsigned ? UZERO : ZERO;\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      var p;\n      if ((p = str.indexOf(\"-\")) > 0) throw Error(\"interior hyphen\");\n      else if (p === 0) {\n        return fromString(str.substring(1), unsigned, radix).neg();\n      }\n\n      // Do several (8) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 8));\n      var result = ZERO;\n      for (var i = 0; i < str.length; i += 8) {\n        var size = Math.min(8, str.length - i),\n          value = parseInt(str.substring(i, i + size), radix);\n        if (size < 8) {\n          var power = fromNumber(pow_dbl(radix, size));\n          result = result.mul(power).add(fromNumber(value));\n        } else {\n          result = result.mul(radixToPower);\n          result = result.add(fromNumber(value));\n        }\n      }\n      result.unsigned = unsigned;\n      return result;\n    }\n\n    /**\n     * Returns a Long representation of the given string, written using the specified radix.\n     * @function\n     * @param {string} str The textual representation of the Long\n     * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n     * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n     * @returns {!Long} The corresponding Long value\n     */\n    Long.fromString = fromString;\n\n    /**\n     * @function\n     * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n     * @param {boolean=} unsigned\n     * @returns {!Long}\n     * @inner\n     */\n    function fromValue(val, unsigned) {\n      if (typeof val === \"number\") return fromNumber(val, unsigned);\n      if (typeof val === \"string\") return fromString(val, unsigned);\n      // Throws for non-objects, converts non-instanceof Long:\n      return fromBits(\n        val.low,\n        val.high,\n        typeof unsigned === \"boolean\" ? unsigned : val.unsigned,\n      );\n    }\n\n    /**\n     * Converts the specified value to a Long using the appropriate from* function for its type.\n     * @function\n     * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {!Long}\n     */\n    Long.fromValue = fromValue;\n\n    // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n    // no runtime penalty for these.\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_16_DBL = 1 << 16;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24_DBL = 1 << 24;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n\n    /**\n     * @type {number}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n\n    /**\n     * @type {!Long}\n     * @const\n     * @inner\n     */\n    var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ZERO = fromInt(0);\n\n    /**\n     * Signed zero.\n     * @type {!Long}\n     */\n    Long.ZERO = ZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UZERO = fromInt(0, true);\n\n    /**\n     * Unsigned zero.\n     * @type {!Long}\n     */\n    Long.UZERO = UZERO;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var ONE = fromInt(1);\n\n    /**\n     * Signed one.\n     * @type {!Long}\n     */\n    Long.ONE = ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var UONE = fromInt(1, true);\n\n    /**\n     * Unsigned one.\n     * @type {!Long}\n     */\n    Long.UONE = UONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var NEG_ONE = fromInt(-1);\n\n    /**\n     * Signed negative one.\n     * @type {!Long}\n     */\n    Long.NEG_ONE = NEG_ONE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false);\n\n    /**\n     * Maximum signed value.\n     * @type {!Long}\n     */\n    Long.MAX_VALUE = MAX_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true);\n\n    /**\n     * Maximum unsigned value.\n     * @type {!Long}\n     */\n    Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n\n    /**\n     * @type {!Long}\n     * @inner\n     */\n    var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n\n    /**\n     * Minimum signed value.\n     * @type {!Long}\n     */\n    Long.MIN_VALUE = MIN_VALUE;\n\n    /**\n     * @alias Long.prototype\n     * @inner\n     */\n    var LongPrototype = Long.prototype;\n\n    /**\n     * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toInt = function toInt() {\n      return this.unsigned ? this.low >>> 0 : this.low;\n    };\n\n    /**\n     * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.toNumber = function toNumber() {\n      if (this.unsigned)\n        return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0);\n      return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\n    };\n\n    /**\n     * Converts the Long to a string written in the specified radix.\n     * @this {!Long}\n     * @param {number=} radix Radix (2-36), defaults to 10\n     * @returns {string}\n     * @override\n     * @throws {RangeError} If `radix` is out of range\n     */\n    LongPrototype.toString = function toString(radix) {\n      radix = radix || 10;\n      if (radix < 2 || 36 < radix) throw RangeError(\"radix\");\n      if (this.isZero()) return \"0\";\n      if (this.isNegative()) {\n        // Unsigned Longs are never negative\n        if (this.eq(MIN_VALUE)) {\n          // We need to change the Long value before it can be negated, so we remove\n          // the bottom-most digit in this base and then recurse to do the rest.\n          var radixLong = fromNumber(radix),\n            div = this.div(radixLong),\n            rem1 = div.mul(radixLong).sub(this);\n          return div.toString(radix) + rem1.toInt().toString(radix);\n        } else return \"-\" + this.neg().toString(radix);\n      }\n\n      // Do several (6) digits each time through the loop, so as to\n      // minimize the calls to the very expensive emulated div.\n      var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\n        rem = this;\n      var result = \"\";\n      while (true) {\n        var remDiv = rem.div(radixToPower),\n          intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\n          digits = intval.toString(radix);\n        rem = remDiv;\n        if (rem.isZero()) return digits + result;\n        else {\n          while (digits.length < 6) digits = \"0\" + digits;\n          result = \"\" + digits + result;\n        }\n      }\n    };\n\n    /**\n     * Gets the high 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed high bits\n     */\n    LongPrototype.getHighBits = function getHighBits() {\n      return this.high;\n    };\n\n    /**\n     * Gets the high 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned high bits\n     */\n    LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\n      return this.high >>> 0;\n    };\n\n    /**\n     * Gets the low 32 bits as a signed integer.\n     * @this {!Long}\n     * @returns {number} Signed low bits\n     */\n    LongPrototype.getLowBits = function getLowBits() {\n      return this.low;\n    };\n\n    /**\n     * Gets the low 32 bits as an unsigned integer.\n     * @this {!Long}\n     * @returns {number} Unsigned low bits\n     */\n    LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\n      return this.low >>> 0;\n    };\n\n    /**\n     * Gets the number of bits needed to represent the absolute value of this Long.\n     * @this {!Long}\n     * @returns {number}\n     */\n    LongPrototype.getNumBitsAbs = function getNumBitsAbs() {\n      if (this.isNegative())\n        // Unsigned Longs are never negative\n        return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\n      var val = this.high != 0 ? this.high : this.low;\n      for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break;\n      return this.high != 0 ? bit + 33 : bit + 1;\n    };\n\n    /**\n     * Tests if this Long can be safely represented as a JavaScript number.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isSafeInteger = function isSafeInteger() {\n      // 2^53-1 is the maximum safe value\n      var top11Bits = this.high >> 21;\n      // [0, 2^53-1]\n      if (!top11Bits) return true;\n      // > 2^53-1\n      if (this.unsigned) return false;\n      // [-2^53, -1] except -2^53\n      return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000);\n    };\n\n    /**\n     * Tests if this Long's value equals zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isZero = function isZero() {\n      return this.high === 0 && this.low === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n     * @returns {boolean}\n     */\n    LongPrototype.eqz = LongPrototype.isZero;\n\n    /**\n     * Tests if this Long's value is negative.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isNegative = function isNegative() {\n      return !this.unsigned && this.high < 0;\n    };\n\n    /**\n     * Tests if this Long's value is positive or zero.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isPositive = function isPositive() {\n      return this.unsigned || this.high >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is odd.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isOdd = function isOdd() {\n      return (this.low & 1) === 1;\n    };\n\n    /**\n     * Tests if this Long's value is even.\n     * @this {!Long}\n     * @returns {boolean}\n     */\n    LongPrototype.isEven = function isEven() {\n      return (this.low & 1) === 0;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.equals = function equals(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (\n        this.unsigned !== other.unsigned &&\n        this.high >>> 31 === 1 &&\n        other.high >>> 31 === 1\n      )\n        return false;\n      return this.high === other.high && this.low === other.low;\n    };\n\n    /**\n     * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.eq = LongPrototype.equals;\n\n    /**\n     * Tests if this Long's value differs from the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.notEquals = function notEquals(other) {\n      return !this.eq(/* validates */ other);\n    };\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.neq = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ne = LongPrototype.notEquals;\n\n    /**\n     * Tests if this Long's value is less than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThan = function lessThan(other) {\n      return this.comp(/* validates */ other) < 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lt = LongPrototype.lessThan;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\n      return this.comp(/* validates */ other) <= 0;\n    };\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.lte = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.le = LongPrototype.lessThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThan = function greaterThan(other) {\n      return this.comp(/* validates */ other) > 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gt = LongPrototype.greaterThan;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\n      return this.comp(/* validates */ other) >= 0;\n    };\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {boolean}\n     */\n    LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n\n    /**\n     * Compares this Long's value with the specified's.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.compare = function compare(other) {\n      if (!isLong(other)) other = fromValue(other);\n      if (this.eq(other)) return 0;\n      var thisNeg = this.isNegative(),\n        otherNeg = other.isNegative();\n      if (thisNeg && !otherNeg) return -1;\n      if (!thisNeg && otherNeg) return 1;\n      // At this point the sign bits are the same\n      if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1;\n      // Both are positive if at least one is unsigned\n      return other.high >>> 0 > this.high >>> 0 ||\n        (other.high === this.high && other.low >>> 0 > this.low >>> 0)\n        ? -1\n        : 1;\n    };\n\n    /**\n     * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n     * @function\n     * @param {!Long|number|bigint|string} other Other value\n     * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n     *  if the given one is greater\n     */\n    LongPrototype.comp = LongPrototype.compare;\n\n    /**\n     * Negates this Long's value.\n     * @this {!Long}\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.negate = function negate() {\n      if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE;\n      return this.not().add(ONE);\n    };\n\n    /**\n     * Negates this Long's value. This is an alias of {@link Long#negate}.\n     * @function\n     * @returns {!Long} Negated Long\n     */\n    LongPrototype.neg = LongPrototype.negate;\n\n    /**\n     * Returns the sum of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} addend Addend\n     * @returns {!Long} Sum\n     */\n    LongPrototype.add = function add(addend) {\n      if (!isLong(addend)) addend = fromValue(addend);\n\n      // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = addend.high >>> 16;\n      var b32 = addend.high & 0xffff;\n      var b16 = addend.low >>> 16;\n      var b00 = addend.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 + b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 + b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 + b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 + b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the difference of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.subtract = function subtract(subtrahend) {\n      if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend);\n      return this.add(subtrahend.neg());\n    };\n\n    /**\n     * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n     * @function\n     * @param {!Long|number|bigint|string} subtrahend Subtrahend\n     * @returns {!Long} Difference\n     */\n    LongPrototype.sub = LongPrototype.subtract;\n\n    /**\n     * Returns the product of this and the specified Long.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.multiply = function multiply(multiplier) {\n      if (this.isZero()) return this;\n      if (!isLong(multiplier)) multiplier = fromValue(multiplier);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = wasm[\"mul\"](\n          this.low,\n          this.high,\n          multiplier.low,\n          multiplier.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO;\n      if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO;\n      if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO;\n      if (this.isNegative()) {\n        if (multiplier.isNegative()) return this.neg().mul(multiplier.neg());\n        else return this.neg().mul(multiplier).neg();\n      } else if (multiplier.isNegative())\n        return this.mul(multiplier.neg()).neg();\n\n      // If both longs are small, use float multiplication\n      if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\n        return fromNumber(\n          this.toNumber() * multiplier.toNumber(),\n          this.unsigned,\n        );\n\n      // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n      // We can skip products that would overflow.\n\n      var a48 = this.high >>> 16;\n      var a32 = this.high & 0xffff;\n      var a16 = this.low >>> 16;\n      var a00 = this.low & 0xffff;\n      var b48 = multiplier.high >>> 16;\n      var b32 = multiplier.high & 0xffff;\n      var b16 = multiplier.low >>> 16;\n      var b00 = multiplier.low & 0xffff;\n      var c48 = 0,\n        c32 = 0,\n        c16 = 0,\n        c00 = 0;\n      c00 += a00 * b00;\n      c16 += c00 >>> 16;\n      c00 &= 0xffff;\n      c16 += a16 * b00;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c16 += a00 * b16;\n      c32 += c16 >>> 16;\n      c16 &= 0xffff;\n      c32 += a32 * b00;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a16 * b16;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c32 += a00 * b32;\n      c48 += c32 >>> 16;\n      c32 &= 0xffff;\n      c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n      c48 &= 0xffff;\n      return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\n    };\n\n    /**\n     * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n     * @function\n     * @param {!Long|number|bigint|string} multiplier Multiplier\n     * @returns {!Long} Product\n     */\n    LongPrototype.mul = LongPrototype.multiply;\n\n    /**\n     * Returns this Long divided by the specified. The result is signed if this Long is signed or\n     *  unsigned if this Long is unsigned.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.divide = function divide(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n      if (divisor.isZero()) throw Error(\"division by zero\");\n\n      // use wasm support if present\n      if (wasm) {\n        // guard against signed division overflow: the largest\n        // negative number / -1 would be 1 larger than the largest\n        // positive number, due to two's complement.\n        if (\n          !this.unsigned &&\n          this.high === -0x80000000 &&\n          divisor.low === -1 &&\n          divisor.high === -1\n        ) {\n          // be consistent with non-wasm code path\n          return this;\n        }\n        var low = (this.unsigned ? wasm[\"div_u\"] : wasm[\"div_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      if (this.isZero()) return this.unsigned ? UZERO : ZERO;\n      var approx, rem, res;\n      if (!this.unsigned) {\n        // This section is only relevant for signed longs and is derived from the\n        // closure library as a whole.\n        if (this.eq(MIN_VALUE)) {\n          if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\n            return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n          else if (divisor.eq(MIN_VALUE)) return ONE;\n          else {\n            // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n            var halfThis = this.shr(1);\n            approx = halfThis.div(divisor).shl(1);\n            if (approx.eq(ZERO)) {\n              return divisor.isNegative() ? ONE : NEG_ONE;\n            } else {\n              rem = this.sub(divisor.mul(approx));\n              res = approx.add(rem.div(divisor));\n              return res;\n            }\n          }\n        } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO;\n        if (this.isNegative()) {\n          if (divisor.isNegative()) return this.neg().div(divisor.neg());\n          return this.neg().div(divisor).neg();\n        } else if (divisor.isNegative()) return this.div(divisor.neg()).neg();\n        res = ZERO;\n      } else {\n        // The algorithm below has not been made for unsigned longs. It's therefore\n        // required to take special care of the MSB prior to running it.\n        if (!divisor.unsigned) divisor = divisor.toUnsigned();\n        if (divisor.gt(this)) return UZERO;\n        if (divisor.gt(this.shru(1)))\n          // 15 >>> 1 = 7 ; with divisor = 8 ; true\n          return UONE;\n        res = UZERO;\n      }\n\n      // Repeat the following until the remainder is less than other:  find a\n      // floating-point that approximates remainder / other *from below*, add this\n      // into the result, and subtract it from the remainder.  It is critical that\n      // the approximate value is less than or equal to the real value so that the\n      // remainder never becomes negative.\n      rem = this;\n      while (rem.gte(divisor)) {\n        // Approximate the result of division. This may be a little greater or\n        // smaller than the actual value.\n        approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\n\n        // We will tweak the approximate result by changing it in the 48-th digit or\n        // the smallest non-fractional digit, whichever is larger.\n        var log2 = Math.ceil(Math.log(approx) / Math.LN2),\n          delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48),\n          // Decrease the approximation until it is smaller than the remainder.  Note\n          // that if it is too large, the product overflows and is negative.\n          approxRes = fromNumber(approx),\n          approxRem = approxRes.mul(divisor);\n        while (approxRem.isNegative() || approxRem.gt(rem)) {\n          approx -= delta;\n          approxRes = fromNumber(approx, this.unsigned);\n          approxRem = approxRes.mul(divisor);\n        }\n\n        // We know the answer can't be zero... and actually, zero would cause\n        // infinite recursion since we would make no progress.\n        if (approxRes.isZero()) approxRes = ONE;\n        res = res.add(approxRes);\n        rem = rem.sub(approxRem);\n      }\n      return res;\n    };\n\n    /**\n     * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Quotient\n     */\n    LongPrototype.div = LongPrototype.divide;\n\n    /**\n     * Returns this Long modulo the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.modulo = function modulo(divisor) {\n      if (!isLong(divisor)) divisor = fromValue(divisor);\n\n      // use wasm support if present\n      if (wasm) {\n        var low = (this.unsigned ? wasm[\"rem_u\"] : wasm[\"rem_s\"])(\n          this.low,\n          this.high,\n          divisor.low,\n          divisor.high,\n        );\n        return fromBits(low, wasm[\"get_high\"](), this.unsigned);\n      }\n      return this.sub(this.div(divisor).mul(divisor));\n    };\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.mod = LongPrototype.modulo;\n\n    /**\n     * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n     * @function\n     * @param {!Long|number|bigint|string} divisor Divisor\n     * @returns {!Long} Remainder\n     */\n    LongPrototype.rem = LongPrototype.modulo;\n\n    /**\n     * Returns the bitwise NOT of this Long.\n     * @this {!Long}\n     * @returns {!Long}\n     */\n    LongPrototype.not = function not() {\n      return fromBits(~this.low, ~this.high, this.unsigned);\n    };\n\n    /**\n     * Returns count leading zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countLeadingZeros = function countLeadingZeros() {\n      return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32;\n    };\n\n    /**\n     * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.clz = LongPrototype.countLeadingZeros;\n\n    /**\n     * Returns count trailing zeros of this Long.\n     * @this {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.countTrailingZeros = function countTrailingZeros() {\n      return this.low ? ctz32(this.low) : ctz32(this.high) + 32;\n    };\n\n    /**\n     * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}.\n     * @function\n     * @param {!Long}\n     * @returns {!number}\n     */\n    LongPrototype.ctz = LongPrototype.countTrailingZeros;\n\n    /**\n     * Returns the bitwise AND of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.and = function and(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low & other.low,\n        this.high & other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise OR of this Long and the specified.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.or = function or(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low | other.low,\n        this.high | other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns the bitwise XOR of this Long and the given one.\n     * @this {!Long}\n     * @param {!Long|number|bigint|string} other Other Long\n     * @returns {!Long}\n     */\n    LongPrototype.xor = function xor(other) {\n      if (!isLong(other)) other = fromValue(other);\n      return fromBits(\n        this.low ^ other.low,\n        this.high ^ other.high,\n        this.unsigned,\n      );\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftLeft = function shiftLeft(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          this.low << numBits,\n          (this.high << numBits) | (this.low >>> (32 - numBits)),\n          this.unsigned,\n        );\n      else return fromBits(0, this.low << (numBits - 32), this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shl = LongPrototype.shiftLeft;\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRight = function shiftRight(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      else if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >> numBits,\n          this.unsigned,\n        );\n      else\n        return fromBits(\n          this.high >> (numBits - 32),\n          this.high >= 0 ? 0 : -1,\n          this.unsigned,\n        );\n    };\n\n    /**\n     * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr = LongPrototype.shiftRight;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits < 32)\n        return fromBits(\n          (this.low >>> numBits) | (this.high << (32 - numBits)),\n          this.high >>> numBits,\n          this.unsigned,\n        );\n      if (numBits === 32) return fromBits(this.high, 0, this.unsigned);\n      return fromBits(this.high >>> (numBits - 32), 0, this.unsigned);\n    };\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Shifted Long\n     */\n    LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n\n    /**\n     * Returns this Long with bits rotated to the left by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateLeft = function rotateLeft(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.low << numBits) | (this.high >>> b),\n          (this.high << numBits) | (this.low >>> b),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.high << numBits) | (this.low >>> b),\n        (this.low << numBits) | (this.high >>> b),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotl = LongPrototype.rotateLeft;\n\n    /**\n     * Returns this Long with bits rotated to the right by the given amount.\n     * @this {!Long}\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotateRight = function rotateRight(numBits) {\n      var b;\n      if (isLong(numBits)) numBits = numBits.toInt();\n      if ((numBits &= 63) === 0) return this;\n      if (numBits === 32) return fromBits(this.high, this.low, this.unsigned);\n      if (numBits < 32) {\n        b = 32 - numBits;\n        return fromBits(\n          (this.high << b) | (this.low >>> numBits),\n          (this.low << b) | (this.high >>> numBits),\n          this.unsigned,\n        );\n      }\n      numBits -= 32;\n      b = 32 - numBits;\n      return fromBits(\n        (this.low << b) | (this.high >>> numBits),\n        (this.high << b) | (this.low >>> numBits),\n        this.unsigned,\n      );\n    };\n    /**\n     * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n     * @function\n     * @param {number|!Long} numBits Number of bits\n     * @returns {!Long} Rotated Long\n     */\n    LongPrototype.rotr = LongPrototype.rotateRight;\n\n    /**\n     * Converts this Long to signed.\n     * @this {!Long}\n     * @returns {!Long} Signed long\n     */\n    LongPrototype.toSigned = function toSigned() {\n      if (!this.unsigned) return this;\n      return fromBits(this.low, this.high, false);\n    };\n\n    /**\n     * Converts this Long to unsigned.\n     * @this {!Long}\n     * @returns {!Long} Unsigned long\n     */\n    LongPrototype.toUnsigned = function toUnsigned() {\n      if (this.unsigned) return this;\n      return fromBits(this.low, this.high, true);\n    };\n\n    /**\n     * Converts this Long to its byte representation.\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @this {!Long}\n     * @returns {!Array.<number>} Byte representation\n     */\n    LongPrototype.toBytes = function toBytes(le) {\n      return le ? this.toBytesLE() : this.toBytesBE();\n    };\n\n    /**\n     * Converts this Long to its little endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Little endian byte representation\n     */\n    LongPrototype.toBytesLE = function toBytesLE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        lo & 0xff,\n        (lo >>> 8) & 0xff,\n        (lo >>> 16) & 0xff,\n        lo >>> 24,\n        hi & 0xff,\n        (hi >>> 8) & 0xff,\n        (hi >>> 16) & 0xff,\n        hi >>> 24,\n      ];\n    };\n\n    /**\n     * Converts this Long to its big endian byte representation.\n     * @this {!Long}\n     * @returns {!Array.<number>} Big endian byte representation\n     */\n    LongPrototype.toBytesBE = function toBytesBE() {\n      var hi = this.high,\n        lo = this.low;\n      return [\n        hi >>> 24,\n        (hi >>> 16) & 0xff,\n        (hi >>> 8) & 0xff,\n        hi & 0xff,\n        lo >>> 24,\n        (lo >>> 16) & 0xff,\n        (lo >>> 8) & 0xff,\n        lo & 0xff,\n      ];\n    };\n\n    /**\n     * Creates a Long from its byte representation.\n     * @param {!Array.<number>} bytes Byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @param {boolean=} le Whether little or big endian, defaults to big endian\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytes = function fromBytes(bytes, unsigned, le) {\n      return le\n        ? Long.fromBytesLE(bytes, unsigned)\n        : Long.fromBytesBE(bytes, unsigned);\n    };\n\n    /**\n     * Creates a Long from its little endian byte representation.\n     * @param {!Array.<number>} bytes Little endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesLE = function fromBytesLE(bytes, unsigned) {\n      return new Long(\n        bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24),\n        bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24),\n        unsigned,\n      );\n    };\n\n    /**\n     * Creates a Long from its big endian byte representation.\n     * @param {!Array.<number>} bytes Big endian byte representation\n     * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n     * @returns {Long} The corresponding Long value\n     */\n    Long.fromBytesBE = function fromBytesBE(bytes, unsigned) {\n      return new Long(\n        (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7],\n        (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3],\n        unsigned,\n      );\n    };\n\n    // Support conversion to/from BigInt where available\n    if (typeof BigInt === \"function\") {\n      /**\n       * Returns a Long representing the given big integer.\n       * @function\n       * @param {number} value The big integer value\n       * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n       * @returns {!Long} The corresponding Long value\n       */\n      Long.fromBigInt = function fromBigInt(value, unsigned) {\n        var lowBits = Number(BigInt.asIntN(32, value));\n        var highBits = Number(BigInt.asIntN(32, value >> BigInt(32)));\n        return fromBits(lowBits, highBits, unsigned);\n      };\n\n      // Override\n      Long.fromValue = function fromValueWithBigInt(value, unsigned) {\n        if (typeof value === \"bigint\") return Long.fromBigInt(value, unsigned);\n        return fromValue(value, unsigned);\n      };\n\n      /**\n       * Converts the Long to its big integer representation.\n       * @this {!Long}\n       * @returns {bigint}\n       */\n      LongPrototype.toBigInt = function toBigInt() {\n        var lowBigInt = BigInt(this.low >>> 0);\n        var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high);\n        return (highBigInt << BigInt(32)) | lowBigInt;\n      };\n    }\n    var _default = (_exports.default = Long);\n  },\n);\n","\"use strict\";\n/* global globalThis */\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"./aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"./base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"./eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"./float\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"./utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"./pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Tests if the specified key can affect object prototypes.\n * @memberof util\n * @param {string} key Key to test\n * @returns {boolean} `true` if the key is unsafe\n */\nfunction isUnsafeProperty(key) {\n    return key === \"__proto__\" || key === \"prototype\" || key === \"constructor\";\n}\n\nutil.isUnsafeProperty = isUnsafeProperty;\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n                   && global\n                   && global.process\n                   && global.process.versions\n                   && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n           || typeof window !== \"undefined\" && window\n           || typeof self   !== \"undefined\" && self\n           || typeof globalThis !== \"undefined\" && globalThis\n           || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n    return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n    return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n    return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n    var value = obj[prop];\n    if (value != null && Object.hasOwnProperty.call(obj, prop)) // eslint-disable-line eqeqeq\n        return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n    return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n    try {\n        var Buffer = util.global.Buffer;\n        // refuse to use non-node buffers if not explicitly assigned (perf reasons)\n        return Buffer.prototype.utf8Write || util.isNode ? Buffer : /* istanbul ignore next */ null;\n    } catch (e) {\n        /* istanbul ignore next */\n        return null;\n    }\n})();\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n    var Buffer = util.Buffer;\n    /* istanbul ignore next */\n    return typeof sizeOrArray === \"number\"\n        ? Buffer\n            ? Buffer.allocUnsafe(sizeOrArray)\n            : new Uint8Array(sizeOrArray)\n        : Buffer\n            ? Buffer.from(sizeOrArray)\n            : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Prepends a raw field tag to raw field data.\n * @param {number} id Field id\n * @param {number} wireType Wire type\n * @param {Uint8Array} data Raw field data\n * @returns {Uint8Array|Buffer} Raw field bytes\n * @ignore\n */\nutil.rawField = function rawField(id, wireType, data) {\n    var out = [],\n        tag = id << 3 | wireType;\n    tag >>>= 0;\n    while (tag > 127) {\n        out.push(tag & 127 | 128);\n        tag >>>= 7;\n    }\n    out.push(tag);\n    for (var i = 0; i < data.length; ++i)\n        out.push(data[i]);\n    return util.newBuffer(out);\n};\n\n/**\n * Array implementation used in the browser.\n * @type {Constructor<Uint8Array>}\n * @deprecated Use `Uint8Array` instead.\n */\nutil.Array = Uint8Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n         || /* istanbul ignore next */ util.global.Long\n         || (function() {\n                try {\n                    var Long = require(\"long\");\n                    return Long && Long.isLong ? Long : null;\n                } catch (e) {\n                    /* istanbul ignore next */\n                    return null;\n                }\n            })();\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^(?:true|false|0|1)$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/; // eslint-disable-line no-control-regex\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n    return value\n        ? util.LongBits.from(value).toHash()\n        : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n    var bits = util.LongBits.fromHash(hash);\n    if (util.Long)\n        return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n    return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Converts a 64 bit key to a long or number if it is an 8 characters long hash string.\n * @param {string} key Map key\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number|string} Original value\n */\nutil.longFromKey = function longFromKey(key, unsigned) {\n    return util.key64Re.test(key) && !util.key32Re.test(key)\n        ? util.longFromHash(key, unsigned)\n        : key;\n};\n\n/**\n * Converts a boolean key to a boolean value.\n * @param {string} key Map key\n * @returns {boolean} Boolean value\n */\nutil.boolFromKey = function boolFromKey(key) {\n    return key === \"true\" || key === \"1\";\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {...(Object.<string,*>|boolean)} src Source objects, optionally followed by an `ifNotSet` flag\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst) { // used by converters\n    var ifNotSet = typeof arguments[arguments.length - 1] === \"boolean\",\n        limit = ifNotSet ? arguments.length - 1 : arguments.length;\n    ifNotSet = ifNotSet && arguments[arguments.length - 1];\n    for (var a = 1; a < limit; ++a) {\n        var src = arguments[a];\n        if (!src)\n            continue;\n        for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n            if (!isUnsafeProperty(keys[i]) && (!ifNotSet || !Object.prototype.hasOwnProperty.call(dst, keys[i]) || dst[keys[i]] === undefined))\n                dst[keys[i]] = src[keys[i]];\n    }\n    return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Schema declaration nesting limit.\n * @memberof util\n * @type {number}\n */\nutil.nestingLimit = 32; // protoc: MaxMessageDeclarationNestingDepth\n\n/**\n * Recursion limit.\n * @memberof util\n * @type {number}\n */\nutil.recursionLimit = 100; // protoc: CodedInputStream::default_recursion_limit_\n\n/**\n * Makes a property safe for assignment as an own property.\n * @memberof util\n * @param {Object.<string,*>} obj Object\n * @param {string} key Property key\n * @param {boolean} [enumerable=true] Whether the property should be enumerable\n * @returns {undefined}\n */\nutil.makeProp = function makeProp(obj, key, enumerable) {\n    if (Object.prototype.hasOwnProperty.call(obj, key))\n        return;\n    Object.defineProperty(obj, key, {\n        enumerable: enumerable === undefined ? true : enumerable,\n        configurable: true,\n        writable: true\n    });\n};\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n    return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n    function CustomError(message, properties) {\n\n        if (!(this instanceof CustomError))\n            return new CustomError(message, properties);\n\n        // Error.call(this, message);\n        // ^ just returns a new error instance because the ctor can be called as a function\n\n        Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n        /* istanbul ignore next */\n        if (Error.captureStackTrace) // node\n            Error.captureStackTrace(this, CustomError);\n        else\n            Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n        if (properties)\n            merge(this, properties);\n    }\n\n    CustomError.prototype = Object.create(Error.prototype, {\n        constructor: {\n            value: CustomError,\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n        name: {\n            get: function get() { return name; },\n            set: undefined,\n            enumerable: false,\n            // configurable: false would accurately preserve the behavior of\n            // the original, but I'm guessing that was not intentional.\n            // For an actual error subclass, this property would\n            // be configurable.\n            configurable: true,\n        },\n        toString: {\n            value: function value() { return this.name + \": \" + this.message; },\n            writable: true,\n            enumerable: false,\n            configurable: true,\n        },\n    });\n\n    return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n *     MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n *     if (e instanceof ProtocolError && e.instance)\n *         console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n    var fieldMap = {};\n    for (var i = 0; i < fieldNames.length; ++i)\n        fieldMap[fieldNames[i]] = 1;\n\n    /**\n     * @returns {string|undefined} Set field name, if any\n     * @this Object\n     * @ignore\n     */\n    return function() { // eslint-disable-line consistent-return\n        for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n            if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n                return keys[i];\n    };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n    /**\n     * @param {string} name Field name\n     * @returns {undefined}\n     * @this Object\n     * @ignore\n     */\n    return function(name) {\n        for (var i = 0; i < fieldNames.length; ++i)\n            if (fieldNames[i] !== name)\n                delete this[fieldNames[i]];\n    };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n    longs: String,\n    enums: String,\n    bytes: String,\n    json: true\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits  = util.LongBits,\n    base64    = util.base64,\n    utf8      = util.utf8;\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array`.\n * @constructor\n */\nfunction Writer() {\n\n    /**\n     * Write cursor into {@link Writer#buf}.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Backing buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = this.constructor.alloc(Writer.initialBufferSize);\n\n    /**\n     * Cached DataView over {@link Writer#buf}.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Stack of forked length-prefix positions.\n     * @type {Array<number>|null}\n     */\n    this.states = null;\n}\n\n/**\n * Initial backing buffer size in bytes. Defaults to 128.\n * @type {number}\n */\nWriter.initialBufferSize = 128;\n\n/**\n * Current write position.\n * @name Writer#len\n * @type {number}\n * @deprecated Use {@link Writer#pos} instead.\n */\nObject.defineProperty(Writer.prototype, \"len\", {\n    configurable: true,\n    enumerable: true,\n    get: function get_len() {\n        return this.pos;\n    }\n});\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup() {\n            return (Writer.create = function create_buffer() {\n                return new BufferWriter();\n            })();\n        }\n        /* istanbul ignore next */\n        : function create_array() {\n            return new Writer();\n        };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n    return new Uint8Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\nWriter.alloc = util.pool(Writer.alloc, Uint8Array.prototype.subarray);\n\n/**\n * Calculates the number of bytes a value occupies as a varint.\n * @param {number} value Value to size (unsigned)\n * @returns {number} Byte length (1..5)\n * @ignore\n */\nfunction sizeVarint32(value) {\n    return value         < 128       ? 1\n         : value         < 16384     ? 2\n         : value         < 2097152   ? 3\n         : value         < 268435456 ? 4\n         :                             5;\n}\n\n/**\n * Ensures that at least `n` more bytes fit into the backing buffer, doubling it if not.\n * @param {number} n Number of additional bytes required\n * @returns {undefined}\n * @private\n */\nWriter.prototype._reserve = function _reserve(n) {\n    var need = this.pos + n;\n    if (need > this.buf.length) {\n        var size = this.buf.length << 1;\n        if (size < need)\n            size = need;\n        var buf = this.constructor.alloc(size);\n        buf.set(this.buf.subarray(0, this.pos), 0);\n        this.buf = buf;\n        this.view = null; // invalidate\n    }\n};\n\nfunction writeStringAscii(val, buf, pos) {\n    for (var i = 0; i < val.length;)\n        buf[pos++] = val.charCodeAt(i++);\n}\n\nfunction writeVarint32(val, buf, pos) {\n    while (val > 127) {\n        buf[pos++] = val & 127 | 128;\n        val >>>= 7;\n    }\n    buf[pos] = val;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n    value = value >>> 0;\n    this._reserve(5);\n    var pos = this.pos;\n    this.pos = writeVarint32(value, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n    if ((value |= 0) < 0) { // 10 bytes per spec\n        this._reserve(10);\n        writeVarint64(LongBits.fromNumber(value), this.buf, this.pos);\n        this.pos += 10;\n        return this;\n    }\n    return this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n    return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n    var lo = val.lo,\n        hi = val.hi;\n    while (hi) {\n        buf[pos++] = lo & 127 | 128;\n        lo = (lo >>> 7 | hi << 25) >>> 0;\n        hi >>>= 7;\n    }\n    while (lo > 127) {\n        buf[pos++] = lo & 127 | 128;\n        lo = lo >>> 7;\n    }\n    buf[pos] = lo;\n    return pos + 1;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n    var bits = LongBits.from(value).zzEncode();\n    this._reserve(10);\n    var pos = this.pos;\n    this.pos = writeVarint64(bits, this.buf, pos);\n    return this;\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n    this._reserve(1);\n    this.buf[this.pos++] = value ? 1 : 0;\n    return this;\n};\n\nfunction writeFixed32(val, buf, pos) {\n    buf[pos    ] =  val         & 255;\n    buf[pos + 1] =  val >>> 8   & 255;\n    buf[pos + 2] =  val >>> 16  & 255;\n    buf[pos + 3] =  val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n    this._reserve(4);\n    writeFixed32(value >>> 0, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n    var bits = LongBits.from(value);\n    this._reserve(8);\n    writeFixed32(bits.lo, this.buf, this.pos);\n    writeFixed32(bits.hi, this.buf, this.pos + 4);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n    this._reserve(4);\n    util.float.writeFloatLE(value, this.buf, this.pos);\n    this.pos += 4;\n    return this;\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n    this._reserve(8);\n    util.float.writeDoubleLE(value, this.buf, this.pos);\n    this.pos += 8;\n    return this;\n};\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n    var len = value.length >>> 0;\n    if (!len) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (util.isString(value)) {\n        var buf = Writer.alloc(len = base64.length(value));\n        base64.decode(value, buf, 0);\n        value = buf;\n    }\n    this.uint32(len);\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes raw bytes without a tag or length prefix.\n * @param {Uint8Array} value Raw bytes\n * @returns {Writer} `this`\n */\nWriter.prototype.raw = function write_raw(value) {\n    var len = value.length >>> 0;\n    if (!len)\n        return this;\n    this._reserve(len);\n    this.buf.set(value, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Backfills the length varint.\n * @param {number} pos Position of reserved length byte\n * @param {number} len Length of content after length varint\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._delim = function _delim(pos, len) {\n    var n = sizeVarint32(len);\n    if (n > 1)\n        this.buf.copyWithin(pos + n, pos + 1, pos + 1 + len);\n    writeVarint32(len, this.buf, pos);\n    this.pos = pos + n + len;\n    return this;\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var lenPos = this.pos;\n        return this._delim(lenPos, utf8.write(value, this.buf, lenPos + 1));\n    }\n    var len = utf8.length(value);\n    this.uint32(len);\n    this._reserve(len);\n    if (len === value.length)\n        writeStringAscii(value, this.buf, this.pos);\n    else\n        utf8.write(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n/**\n * Writes an array of unsigned 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32s = function write_uint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5); // worst case: 5 bytes per value + length varint\n    var buf = this.buf, lenPos = this.pos, p = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        p = writeVarint32(value[i] >>> 0, buf, p);\n    return this._delim(lenPos, p - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 32 bit values as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32s = function write_int32s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5); // worst case: 10 bytes per negative value + length varint\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1, val;\n    for (var i = 0; i < n; ++i) {\n        if ((val = value[i] | 0) < 0) { // negatives are 10 bytes per spec\n            pos = writeVarint64(LongBits.fromNumber(val), buf, pos);\n        } else {\n            pos = writeVarint32(val, buf, pos);\n        }\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of 32 bit values as packed, zig-zag encoded varints.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32s = function write_sint32s(value) {\n    var n = value.length;\n    this._reserve(n * 5 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i)\n        pos = writeVarint32((value[i] << 1 ^ value[i] >> 31) >>> 0, buf, pos);\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of unsigned 64 bit values as a packed repeated field.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint64s = function write_uint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of signed 64 bit values as a packed repeated field.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int64s = Writer.prototype.uint64s;\n\n/**\n * Writes an array of 64 bit values as packed, zig-zag encoded varints.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint64s = function write_sint64s(value) {\n    var n = value.length;\n    this._reserve(n * 10 + 5);\n    var buf = this.buf, lenPos = this.pos, pos = lenPos + 1;\n    for (var i = 0; i < n; ++i) {\n        pos = writeVarint64(LongBits.from(value[i]).zzEncode(), buf, pos);\n    }\n    return this._delim(lenPos, pos - lenPos - 1);\n};\n\n/**\n * Writes an array of boolish values as a packed repeated field.\n * @param {boolean[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bools = function write_bools(value) {\n    var n = value.length;\n    this.uint32(n); // one byte per value\n    this._reserve(n);\n    var buf = this.buf, p = this.pos;\n    for (var i = 0; i < n; ++i)\n        buf[p++] = value[i] ? 1 : 0;\n    this.pos += n;\n    return this;\n};\n\n// The view allocation only pays off when amortized over enough writes\nvar VIEW_THRESHOLD_FLOAT = 16,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(writer, count, threshold) {\n    var view = writer.view;\n    if (view || count < threshold)\n        return view;\n    var buf = writer.buf;\n    return writer.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Writes an array of unsigned 32 bit values as packed, fixed 32 bits.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32s = function write_fixed32s(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes); // length is known exactly\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setUint32(p, value[i] >>> 0, true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { writeFixed32(value[i] >>> 0, buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 32 bit values as packed, fixed 32 bits.\n * @function\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32s = Writer.prototype.fixed32s;\n\n/**\n * Writes an array of unsigned 64 bit values as packed, fixed 64 bits.\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed64s = function write_fixed64s(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, bits, dv = getLazyView(this, n, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); dv.setUint32(p, bits.lo, true); dv.setUint32(p + 4, bits.hi, true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { bits = LongBits.from(value[i]); writeFixed32(bits.lo, buf, p); writeFixed32(bits.hi, buf, p + 4); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of signed 64 bit values as packed, fixed 64 bits.\n * @function\n * @param {Array.<Long|number|string>} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed64s = Writer.prototype.fixed64s;\n\n/**\n * Writes an array of floats (32 bit) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.floats = function write_floats(value) {\n    var n = value.length, bytes = n * 4;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat32(p, value[i], true); p += 4; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeFloatLE(value[i], buf, p); p += 4; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Writes an array of doubles (64 bit float) as a packed repeated field.\n * @param {number[]} value Values to write\n * @returns {Writer} `this`\n */\nWriter.prototype.doubles = function write_doubles(value) {\n    var n = value.length, bytes = n * 8;\n    this.uint32(bytes);\n    this._reserve(bytes);\n    var p = this.pos, i, dv = getLazyView(this, n, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (i = 0; i < n; ++i) { dv.setFloat64(p, value[i], true); p += 8; }\n    else {\n        var buf = this.buf;\n        for (i = 0; i < n; ++i) { util.float.writeDoubleLE(value[i], buf, p); p += 8; }\n    }\n    this.pos += bytes;\n    return this;\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n    this._reserve(1);\n    (this.states || (this.states = [])).push(this.pos);\n    this.pos += 1;\n    return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n    var states = this.states;\n    if (states && states.length) {\n        this.pos = states.pop();\n    } else {\n        this.pos = 0;\n    }\n    return this;\n};\n\n/**\n * Resets to the last state and prepends the fork state's current write length as a varint.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n    var states = this.states,\n        len,\n        vlen;\n    if (states && states.length) {\n        var lenPos = states.pop();\n        len = this.pos - lenPos - 1;\n        vlen = sizeVarint32(len);\n        if (vlen > 1) { // grow the reserved single byte and shift content forward\n            this._reserve(vlen - 1);\n            this.buf.copyWithin(lenPos + vlen, lenPos + 1, lenPos + 1 + len);\n            this.pos += vlen - 1;\n            writeVarint32(len, this.buf, lenPos);\n        } else {\n            this.buf[lenPos] = len;\n        }\n    } else { // not forked: prefix the entire buffer with its length\n        // TODO: Compatibility with older generated code.\n        // Remove this branch in the next major release.\n        len = this.pos;\n        vlen = sizeVarint32(len);\n        this._reserve(vlen);\n        this.buf.copyWithin(vlen, 0, len);\n        writeVarint32(len, this.buf, 0);\n        this.pos += vlen;\n    }\n    return this;\n};\n\n/**\n * Finishes the write operation.\n * Returns a buffer sized to the written data by default.\n * @param {boolean} [shared=false] Whether to return a shared view instead of a unique copy\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish(shared) {\n    if (shared)\n        return this.buf.subarray(0, this.pos);\n    var buf = this.constructor.alloc(this.pos);\n    buf.set(this.buf.subarray(0, this.pos), 0);\n    return buf;\n};\n\n/**\n * Finishes the write operation, writing into the provided buffer.\n * The caller must ensure that `buf` has enough space starting at `offset`\n * to hold {@link Writer#pos} bytes.\n * @param {T} buf Target buffer\n * @param {number} [offset=0] Offset to start writing at\n * @returns {T} The provided buffer\n * @template T extends Uint8Array\n */\nWriter.prototype.finishInto = function finishInto(buf, offset) {\n    if (offset === undefined)\n        offset = 0;\n    buf.set(this.buf.subarray(0, this.pos), offset);\n    return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n    BufferWriter = BufferWriter_;\n    Writer.create = create();\n    BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\nBufferWriter.prototype = Object.create(Writer.prototype, {\n    constructor: {\n        value: BufferWriter,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n    Writer.call(this);\n}\n\nvar writeStringBuffer;\n\nBufferWriter._configure = function () {\n    /**\n     * Allocates a buffer of the specified size.\n     * @function\n     * @param {number} size Buffer size\n     * @returns {Buffer} Buffer\n     */\n    BufferWriter.alloc = util.Buffer && util.Buffer.allocUnsafe;\n\n    writeStringBuffer = util.Buffer && util.Buffer.prototype.utf8Write\n        ? function writeStringBuffer_utf8Write(val, buf, pos) {\n            return buf.utf8Write(val, pos);\n        }\n        : function writeStringBuffer_write(val, buf, pos) {\n            return buf.write(val, pos);\n        };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n    if (util.isString(value))\n        value = util.Buffer.from(value, \"base64\");\n    var len = value.length >>> 0;\n    this.uint32(len);\n    if (len) {\n        this._reserve(len);\n        this.buf.set(value, this.pos);\n        this.pos += len;\n    }\n    return this;\n};\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n    var n = value.length;\n    if (!n) {\n        this._reserve(1);\n        this.buf[this.pos++] = 0;\n        return this;\n    }\n    if (n < 0x80) {\n        this._reserve(n * 3 + 5); // worst case\n        var pos = this.pos,\n            buf = this.buf;\n        return this._delim(pos,\n            n < 40\n                ? util.utf8.write(value, buf, pos + 1)\n                : writeStringBuffer(value, buf, pos + 1)\n        );\n    }\n    var len = util.Buffer.byteLength(value);\n    this.uint32(len);\n    this._reserve(len);\n    writeStringBuffer(value, this.buf, this.pos);\n    this.pos += len;\n    return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util      = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits  = util.LongBits,\n    utf8      = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n    return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n    /**\n     * Read buffer.\n     * @type {Uint8Array}\n     */\n    this.buf = buffer;\n\n    /**\n     * Read buffer position.\n     * @type {number}\n     */\n    this.pos = 0;\n\n    /**\n     * Read buffer length.\n     * @type {number}\n     */\n    this.len = buffer.length;\n\n    /**\n     * Cached DataView for packed reads.\n     * @type {DataView|null}\n     */\n    this.view = null;\n\n    /**\n     * Whether to discard unknown fields while decoding.\n     * @type {boolean}\n     */\n    this.discardUnknown = Reader.discardUnknown;\n}\n\nfunction create_array(buffer) {\n    // TODO: Remove plain array reader support in the next major release.\n    if (Array.isArray(buffer))\n        buffer = new Uint8Array(buffer);\n    if (buffer instanceof Uint8Array)\n        return new Reader(buffer);\n    throw Error(\"illegal buffer\");\n}\n\nvar create = function create() {\n    return util.Buffer\n        ? function create_buffer_setup(buffer) {\n            return (Reader.create = function create_buffer(buffer) {\n                return util.Buffer.isBuffer(buffer)\n                    ? new BufferReader(buffer)\n                    /* istanbul ignore next */\n                    : create_array(buffer);\n            })(buffer);\n        }\n        /* istanbul ignore next */\n        : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Uint8Array} Raw bytes\n */\nReader.prototype.raw = function read_raw(start, end) {\n    return this.buf.subarray(start, end);\n};\n\nfunction readVarint32NearEnd(reader) {\n    // Safely read up to four bytes of a varint32 near the reader limit\n    var value = 0;\n    for (var i = 0; i < 4; ++i) {\n        if (reader.pos >= reader.len)\n            throw indexOutOfRange(reader);\n        var b = reader.buf[reader.pos++];\n        value = (value | (b & 127) << i * 7) >>> 0;\n        if (b < 128)\n            return value;\n    }\n    throw indexOutOfRange(reader);\n}\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = function read_uint32() {\n    if (this.len - this.pos < 5) {\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        if (this.buf[this.pos] >= 128)\n            return readVarint32NearEnd(this);\n    }\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n\n    for (var i = 0; i < 5; ++i) {\n        /* istanbul ignore if */\n        if (pos >= this.len) {\n            this.pos = pos;\n            throw indexOutOfRange(this);\n        }\n        if (buf[pos++] < 128) {\n            this.pos = pos;\n            return value;\n        }\n    }\n    /* istanbul ignore next */\n    this.pos = pos;\n    throw Error(\"invalid varint encoding\");\n};\n\n/**\n * Reads a field tag.\n * @function\n * @returns {number} Tag read\n */\nReader.prototype.tag = function read_tag() {\n    if (this.len - this.pos < 5) {\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        if (this.buf[this.pos] >= 128)\n            return readVarint32NearEnd(this);\n    }\n    var buf = this.buf,\n        pos = this.pos,\n        value = (buf[pos] & 127) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 7) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 14) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 127) << 21) >>> 0;\n    if (buf[pos++] < 128) {\n        this.pos = pos;\n        return value;\n    }\n    value = (value | (buf[pos] & 15) << 28) >>> 0;\n    if (buf[pos] < 128 && (buf[pos] & 112) === 0) {\n        this.pos = pos + 1;\n        return value;\n    }\n\n    this.pos = pos + 1;\n    throw Error(\"invalid tag encoding\");\n};\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n    return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n    var value = this.uint32();\n    return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n    // tends to deopt with local vars for octet etc.\n    var bits = new LongBits(0, 0);\n    var i = 0;\n    if (this.len - this.pos > 4) { // fast route (lo)\n        for (; i < 4; ++i) {\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        // 5th\n        bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n        bits.hi = (bits.hi | (this.buf[this.pos] & 127) >>  4) >>> 0;\n        if (this.buf[this.pos++] < 128)\n            return bits;\n        i = 0;\n    } else {\n        for (; i < 4; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 1st..4th\n            bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n        throw indexOutOfRange(this);\n    }\n    if (this.len - this.pos > 4) { // fast route (hi)\n        for (; i < 5; ++i) {\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    } else {\n        for (; i < 5; ++i) {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n            // 6th..10th\n            bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n            if (this.buf[this.pos++] < 128)\n                return bits;\n        }\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n    var value = false,\n        b;\n    for (var i = 0; i < 10; ++i) {\n        /* istanbul ignore if */\n        if (this.pos >= this.len)\n            throw indexOutOfRange(this);\n        b = this.buf[this.pos++];\n        if (b & 127)\n            value = true;\n        if (b < 128)\n            return value;\n    }\n    /* istanbul ignore next */\n    throw Error(\"invalid varint encoding\");\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n    return (buf[end - 4]\n          | buf[end - 3] << 8\n          | buf[end - 2] << 16\n          | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 8);\n\n    return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n    /* istanbul ignore if */\n    if (this.pos + 4 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readFloatLE(this.buf, this.pos);\n    this.pos += 4;\n    return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n    /* istanbul ignore if */\n    if (this.pos + 8 > this.len)\n        throw indexOutOfRange(this, 4);\n\n    var value = util.float.readDoubleLE(this.buf, this.pos);\n    this.pos += 8;\n    return value;\n};\n\n/**\n * Reads a packed repeated field of unsigned 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.uint32s = function read_uint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len, buf = this.buf, pos = this.pos, value;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.uint32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    if (pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.int32s = function read_int32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len, buf = this.buf, pos = this.pos, value;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value);\n        else {\n            this.pos = pos - 1;\n            array.push(this.int32());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    if (pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 32 bit varints.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sint32s = function read_sint32s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.sint32());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of booleans.\n * @param {boolean[]} [array] Array to read into; a new one is created if omitted\n * @returns {boolean[]} Array read into\n */\nReader.prototype.bools = function read_bools(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len, buf = this.buf, pos = this.pos, value;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (pos < end) {\n        value = buf[pos++];\n        if (value < 128)\n            array.push(value !== 0);\n        else {\n            this.pos = pos - 1;\n            array.push(this.bool());\n            pos = this.pos;\n        }\n    }\n    this.pos = pos;\n    if (pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n// The view allocation only pays off when amortized over enough reads\nvar VIEW_THRESHOLD_FLOAT = 8,\n    VIEW_THRESHOLD_INT   = 128;\n\nfunction getLazyView(reader, count, threshold) {\n    var view = reader.view;\n    if (view || count < threshold)\n        return view;\n    var buf = reader.buf;\n    return reader.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n}\n\n/**\n * Reads a packed repeated field of unsigned 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.fixed32s = function read_fixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getUint32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 32 bit fixed values.\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.sfixed32s = function read_sfixed32s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_INT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getInt32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = readFixed32_end(buf, pos + 4) | 0;\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of floats (32 bit).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.floats = function read_floats(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 2, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 4) array[i++] = dv.getFloat32(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 4) array[i++] = util.float.readFloatLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 4);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of doubles (64 bit float).\n * @param {number[]} [array] Array to read into; a new one is created if omitted\n * @returns {number[]} Array read into\n */\nReader.prototype.doubles = function read_doubles(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3, i = array.length, pos = this.pos;\n    array.length = i + count;\n    var dv = getLazyView(this, count, VIEW_THRESHOLD_FLOAT);\n    if (dv)\n        for (var k = 0; k < count; ++k, pos += 8) array[i++] = dv.getFloat64(pos, true);\n    else {\n        var buf = this.buf;\n        for (var j = 0; j < count; ++j, pos += 8) array[i++] = util.float.readDoubleLE(buf, pos);\n    }\n    this.pos = pos;\n    if (pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.uint64s = function read_uint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.uint64());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.int64s = function read_int64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.int64());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of zig-zag encoded signed 64 bit varints.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sint64s = function read_sint64s(array) {\n    if (array === undefined) array = [];\n    var end = this.uint32() + this.pos, len = this.len;\n    if (end > len) throw indexOutOfRange(this, end - this.pos);\n    this.len = end;\n    while (this.pos < end)\n        array.push(this.sint64());\n    if (this.pos !== end) throw RangeError(\"index out of range\");\n    this.len = len;\n    return array;\n};\n\n/**\n * Reads a packed repeated field of unsigned 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.fixed64s = function read_fixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.fixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a packed repeated field of signed 64 bit fixed values.\n * @param {Array.<Long|number>} [array] Array to read into; a new one is created if omitted\n * @returns {Array.<Long|number>} Array read into\n */\nReader.prototype.sfixed64s = function read_sfixed64s(array) {\n    if (array === undefined) array = [];\n    var len = this.uint32(), end = this.pos + len, i = array.length;\n    /* istanbul ignore if */\n    if (end > this.len) throw indexOutOfRange(this, len);\n    var count = len >>> 3;\n    array.length = i + count; // 8 bytes per value, count is known\n    for (var j = 0; j < count; ++j)\n        array[i++] = this.sfixed64();\n    if (this.pos !== end) throw indexOutOfRange(this, 8);\n    return array;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return this.raw(start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.read(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint, rejecting invalid UTF8.\n * @returns {string} Value read\n */\nReader.prototype.stringVerify = function read_string_verify() {\n    var length = this.uint32(),\n        start  = this.pos,\n        end    = this.pos + length;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw indexOutOfRange(this, length);\n\n    this.pos = end;\n    return utf8.readStrict(this.buf, start, end);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n    if (typeof length === \"number\") {\n        /* istanbul ignore if */\n        if (this.pos + length > this.len)\n            throw indexOutOfRange(this, length);\n        this.pos += length;\n    } else {\n        do {\n            /* istanbul ignore if */\n            if (this.pos >= this.len)\n                throw indexOutOfRange(this);\n        } while (this.buf[this.pos++] & 128);\n    }\n    return this;\n};\n\n/**\n * Recursion limit.\n * @type {number}\n */\nReader.recursionLimit = util.recursionLimit;\n\n/**\n * Whether readers discard unknown fields while decoding.\n * @type {boolean}\n */\nReader.discardUnknown = true;\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @param {number} [depth] Depth of recursion to control nested calls; 0 if omitted\n * @param {number} [fieldNumber] Field number for validating group end tags\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType, depth, fieldNumber) {\n    if (depth === undefined) depth = 0;\n    if (depth > Reader.recursionLimit)\n        throw Error(\"max depth exceeded\");\n    if (fieldNumber === 0)\n        throw Error(\"illegal tag: field number 0\");\n    switch (wireType) {\n        case 0:\n            this.skip();\n            break;\n        case 1:\n            this.skip(8);\n            break;\n        case 2:\n            this.skip(this.uint32());\n            break;\n        case 3:\n            while (true) {\n                var tag = this.tag();\n                var nestedField = tag >>> 3;\n                wireType = tag & 7;\n                if (!nestedField)\n                    throw Error(\"illegal tag: field number 0\");\n                if (wireType === 4) {\n                    if (fieldNumber !== undefined && nestedField !== fieldNumber)\n                        throw Error(\"invalid end group tag\");\n                    break;\n                }\n                this.skipType(wireType, depth + 1, nestedField);\n            }\n            break;\n        case 5:\n            this.skip(4);\n            break;\n\n        /* istanbul ignore next */\n        default:\n            throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n    }\n    return this;\n};\n\nReader._configure = function(BufferReader_) {\n    BufferReader = BufferReader_;\n    Reader.create = create();\n    BufferReader._configure();\n\n    var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n    util.merge(Reader.prototype, {\n\n        int64: function read_int64() {\n            return readLongVarint.call(this)[fn](false);\n        },\n\n        uint64: function read_uint64() {\n            return readLongVarint.call(this)[fn](true);\n        },\n\n        sint64: function read_sint64() {\n            return readLongVarint.call(this).zzDecode()[fn](false);\n        },\n\n        fixed64: function read_fixed64() {\n            return readFixed64.call(this)[fn](true);\n        },\n\n        sfixed64: function read_sfixed64() {\n            return readFixed64.call(this)[fn](false);\n        }\n\n    });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\nBufferReader.prototype = Object.create(Reader.prototype, {\n    constructor: {\n        value: BufferReader,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n    Reader.call(this, buffer);\n\n    /**\n     * Read buffer.\n     * @name BufferReader#buf\n     * @type {Buffer}\n    */\n}\n\nBufferReader._configure = function () {\n    /* istanbul ignore else */\n    if (util.Buffer)\n        BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n/**\n * Returns raw bytes from the backing buffer without advancing the reader.\n * @name BufferReader#raw\n * @function\n * @param {number} start Start offset\n * @param {number} end End offset\n * @returns {Buffer} Raw bytes\n */\nBufferReader.prototype.raw = function read_raw_buffer(start, end) {\n    return this._slice.call(this.buf, start, end);\n};\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n    var len = this.uint32(), // modifies pos\n        start = this.pos,\n        end = this.pos + len;\n\n    /* istanbul ignore if */\n    if (end > this.len)\n        throw RangeError(\"index out of range: \" + this.pos + \" + \" + len + \" > \" + this.len);\n\n    this.pos = end;\n    return this.buf.utf8Slice\n        ? this.buf.utf8Slice(start, end)\n        : this.buf.toString(\"utf-8\", start, end);\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\nService.prototype = Object.create(util.EventEmitter.prototype, {\n    constructor: {\n        value: Service,\n        writable: true,\n        enumerable: false,\n        configurable: true\n    }\n});\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {{\n *   (request: TReq|Properties<TReq>, callback: rpc.ServiceMethodCallback<TRes>): void;\n *   (request: TReq|Properties<TReq>): Promise<TRes>;\n *   readonly name: string;\n *   readonly path: string;\n *   readonly requestType: string;\n *   readonly responseType: string;\n *   readonly requestStream: true|undefined;\n *   readonly responseStream: true|undefined;\n * }}\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n    if (typeof rpcImpl !== \"function\")\n        throw TypeError(\"rpcImpl must be a function\");\n\n    util.EventEmitter.call(this);\n\n    /**\n     * RPC implementation. Becomes `null` once the service is ended.\n     * @type {RPCImpl|null}\n     */\n    this.rpcImpl = rpcImpl;\n\n    /**\n     * Whether requests are length-delimited.\n     * @type {boolean}\n     */\n    this.requestDelimited = Boolean(requestDelimited);\n\n    /**\n     * Whether responses are length-delimited.\n     * @type {boolean}\n     */\n    this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n    if (!request)\n        throw TypeError(\"request must be specified\");\n\n    var self = this;\n    if (!callback)\n        return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n    if (!self.rpcImpl) {\n        setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n        return undefined;\n    }\n\n    try {\n        return self.rpcImpl(\n            method,\n            requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n            function rpcCallback(err, response) {\n\n                if (err) {\n                    self.emit(\"error\", err, method);\n                    return callback(err);\n                }\n\n                if (response === null) {\n                    self.end(/* endedByRPC */ true);\n                    return undefined;\n                }\n\n                if (!(response instanceof responseCtor)) {\n                    try {\n                        response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n                    } catch (err) {\n                        self.emit(\"error\", err, method);\n                        return callback(err);\n                    }\n                }\n\n                self.emit(\"data\", response, method);\n                return callback(null, response);\n            }\n        );\n    } catch (err) {\n        self.emit(\"error\", err, method);\n        setTimeout(function() { callback(err); }, 0);\n        return undefined;\n    }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n    if (this.rpcImpl) {\n        if (!endedByRPC) // signal end to rpcImpl\n            this.rpcImpl(null, null, null);\n        this.rpcImpl = null;\n        this.emit(\"end\").off();\n    }\n    return this;\n};\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n *     if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n *         throw Error(\"no such method\");\n *     asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n *         callback(err, responseData);\n *     });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Object.create(null);\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available across modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nexports.build = \"minimal\";\n\n// Serialization\nexports.Writer       = require(\"./writer\");\nexports.BufferWriter = require(\"./writer_buffer\");\nexports.Reader       = require(\"./reader\");\nexports.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nexports.util         = require(\"./util/minimal\");\nexports.rpc          = require(\"./rpc\");\nexports.roots        = require(\"./roots\");\nexports.configure    = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n    exports.util.LongBits._configure(exports.util.Long);\n    exports.Writer._configure(exports.BufferWriter);\n    exports.Reader._configure(exports.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-mixed-operators, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars, default-case, jsdoc/require-param*/\nimport $protobuf from \"protobufjs/minimal.js\";\n\n// Common aliases\nconst $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\nconst $Object = $util.global.Object, $undefined = $util.global.undefined, $Error = $util.global.Error, $RangeError = $util.global.RangeError, $TypeError = $util.global.TypeError, $String = $util.global.String, $Number = $util.global.Number, $parseInt = $util.global.parseInt, $Boolean = $util.global.Boolean, $BigInt = $util.global.BigInt, $Array = $util.global.Array;\n\n// Exported root namespace\nconst $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n\nexport const users = $root.users = (() => {\n\n    /**\n     * Namespace users.\n     * @exports users\n     * @namespace\n     */\n    const users = {};\n\n    /**\n     * Role enum.\n     * @name users.Role\n     * @enum {number}\n     * @property {number} ROLE_ADMIN=0 ROLE_ADMIN value\n     * @property {number} ROLE_BROADCASTER=1 ROLE_BROADCASTER value\n     * @property {number} ROLE_DISABLED=2 ROLE_DISABLED value\n     */\n    users.Role = (function() {\n        const valuesById = $Object.create(null), values = $Object.create(valuesById);\n        values[valuesById[0] = \"ROLE_ADMIN\"] = 0;\n        values[valuesById[1] = \"ROLE_BROADCASTER\"] = 1;\n        values[valuesById[2] = \"ROLE_DISABLED\"] = 2;\n        return values;\n    })();\n\n    users.UserProtoRow = (function() {\n\n        /**\n         * Properties of a UserProtoRow.\n         * @typedef {Object} users.UserProtoRow.$Properties\n         * @property {string|null} [id] UserProtoRow id\n         * @property {string|null} [email] UserProtoRow email\n         * @property {string|null} [name] UserProtoRow name\n         * @property {number|Long|null} [createdAtUnixMs] UserProtoRow createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] UserProtoRow updatedAtUnixMs\n         * @property {Object.<string,users.Role>|null} [tenantRoles] UserProtoRow tenantRoles\n         * @property {Object.<string,string>|null} [identities] UserProtoRow identities\n         * @property {boolean|null} [isSiteAdmin] UserProtoRow isSiteAdmin\n         * @property {string|null} [tcAcceptedVersion] UserProtoRow tcAcceptedVersion\n         * @property {number|Long|null} [tcAcceptedAtUnixMs] UserProtoRow tcAcceptedAtUnixMs\n         * @property {boolean|null} [trialClaimed] UserProtoRow trialClaimed\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a UserProtoRow.\n         * @memberof users\n         * @interface IUserProtoRow\n         * @augments users.UserProtoRow.$Properties\n         * @deprecated Use users.UserProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a UserProtoRow.\n         * @typedef {users.UserProtoRow.$Properties} users.UserProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new UserProtoRow.\n         * @memberof users\n         * @classdesc Represents a UserProtoRow.\n         * @constructor\n         * @param {users.UserProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const UserProtoRow = function (properties) {\n            this.tenantRoles = {};\n            this.identities = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * UserProtoRow id.\n         * @member {string} id\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.id = \"\";\n\n        /**\n         * UserProtoRow email.\n         * @member {string} email\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.email = \"\";\n\n        /**\n         * UserProtoRow name.\n         * @member {string} name\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.name = \"\";\n\n        /**\n         * UserProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * UserProtoRow updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * UserProtoRow tenantRoles.\n         * @member {Object.<string,users.Role>} tenantRoles\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.tenantRoles = $util.emptyObject;\n\n        /**\n         * UserProtoRow identities.\n         * @member {Object.<string,string>} identities\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.identities = $util.emptyObject;\n\n        /**\n         * UserProtoRow isSiteAdmin.\n         * @member {boolean} isSiteAdmin\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.isSiteAdmin = false;\n\n        /**\n         * UserProtoRow tcAcceptedVersion.\n         * @member {string} tcAcceptedVersion\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.tcAcceptedVersion = \"\";\n\n        /**\n         * UserProtoRow tcAcceptedAtUnixMs.\n         * @member {number|Long} tcAcceptedAtUnixMs\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.tcAcceptedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * UserProtoRow trialClaimed.\n         * @member {boolean} trialClaimed\n         * @memberof users.UserProtoRow\n         * @instance\n         */\n        UserProtoRow.prototype.trialClaimed = false;\n\n        /**\n         * Creates a new UserProtoRow instance using the specified properties.\n         * @function create\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow.$Properties=} [properties] Properties to set\n         * @returns {users.UserProtoRow} UserProtoRow instance\n         * @type {{\n         *   (properties: users.UserProtoRow.$Shape): users.UserProtoRow & users.UserProtoRow.$Shape;\n         *   (properties?: users.UserProtoRow.$Properties): users.UserProtoRow;\n         * }}\n         */\n        UserProtoRow.create = function(properties) {\n            return new UserProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified UserProtoRow message. Does not implicitly {@link users.UserProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow.$Properties} message UserProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && message.id !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\") && message.email !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.email);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.name);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.updatedAtUnixMs);\n            if (message.tenantRoles != null && $Object.hasOwnProperty.call(message, \"tenantRoles\"))\n                for (let keys = $Object.keys(message.tenantRoles), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 10, wireType 2 =*/82).fork().uint32(/* id 1, wireType 0 =*/8).int64($util.longFromKey(keys[i], false)).uint32(/* id 2, wireType 0 =*/16).int32(message.tenantRoles[keys[i]]).ldelim();\n            if (message.identities != null && $Object.hasOwnProperty.call(message, \"identities\"))\n                for (let keys = $Object.keys(message.identities), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 11, wireType 2 =*/90).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.identities[keys[i]]).ldelim();\n            if (message.isSiteAdmin != null && $Object.hasOwnProperty.call(message, \"isSiteAdmin\") && message.isSiteAdmin !== false)\n                writer.uint32(/* id 12, wireType 0 =*/96).bool(message.isSiteAdmin);\n            if (message.tcAcceptedVersion != null && $Object.hasOwnProperty.call(message, \"tcAcceptedVersion\") && message.tcAcceptedVersion !== \"\")\n                writer.uint32(/* id 13, wireType 2 =*/106).string(message.tcAcceptedVersion);\n            if (message.tcAcceptedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"tcAcceptedAtUnixMs\") && (typeof message.tcAcceptedAtUnixMs === \"object\" ? message.tcAcceptedAtUnixMs.low || message.tcAcceptedAtUnixMs.high : message.tcAcceptedAtUnixMs !== 0))\n                writer.uint32(/* id 14, wireType 0 =*/112).int64(message.tcAcceptedAtUnixMs);\n            if (message.trialClaimed != null && $Object.hasOwnProperty.call(message, \"trialClaimed\") && message.trialClaimed !== false)\n                writer.uint32(/* id 15, wireType 0 =*/120).bool(message.trialClaimed);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified UserProtoRow message, length delimited. Does not implicitly {@link users.UserProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow.$Properties} message UserProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a UserProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {users.UserProtoRow & users.UserProtoRow.$Shape} UserProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.users.UserProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.email = value;\n                        else\n                            delete message.email;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.tenantRoles === $util.emptyObject)\n                            message.tenantRoles = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = 0;\n                        value = 0;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 0)\n                                    break;\n                                key = reader.int64();\n                                continue;\n                            case 2:\n                                if (wireType !== 0)\n                                    break;\n                                value = reader.int32();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        message.tenantRoles[typeof key === \"object\" ? $util.longToHash(key) : key] = value;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.identities === $util.emptyObject)\n                            message.identities = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = \"\";\n                        value = \"\";\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 2)\n                                    break;\n                                key = reader.stringVerify();\n                                continue;\n                            case 2:\n                                if (wireType !== 2)\n                                    break;\n                                value = reader.stringVerify();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        if (key === \"__proto__\")\n                            $util.makeProp(message.identities, key);\n                        message.identities[key] = value;\n                        continue;\n                    }\n                case 12: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isSiteAdmin = value;\n                        else\n                            delete message.isSiteAdmin;\n                        continue;\n                    }\n                case 13: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tcAcceptedVersion = value;\n                        else\n                            delete message.tcAcceptedVersion;\n                        continue;\n                    }\n                case 14: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tcAcceptedAtUnixMs = value;\n                        else\n                            delete message.tcAcceptedAtUnixMs;\n                        continue;\n                    }\n                case 15: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.trialClaimed = value;\n                        else\n                            delete message.trialClaimed;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a UserProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {users.UserProtoRow & users.UserProtoRow.$Shape} UserProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a UserProtoRow message.\n         * @function verify\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        UserProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isString(message.id))\n                    return \"id: string expected\";\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                if (!$util.isString(message.email))\n                    return \"email: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.tenantRoles != null && $Object.hasOwnProperty.call(message, \"tenantRoles\")) {\n                if (!$util.isObject(message.tenantRoles))\n                    return \"tenantRoles: object expected\";\n                let key = $Object.keys(message.tenantRoles);\n                for (let i = 0; i < key.length; ++i) {\n                    if (!$util.key64Re.test(key[i]))\n                        return \"tenantRoles: integer|Long key{k:int64} expected\";\n                    if (typeof message.tenantRoles[key[i]] !== \"number\" || (message.tenantRoles[key[i]] | 0) !== message.tenantRoles[key[i]])\n                        return \"tenantRoles: enum value{k:int64} expected\";\n                }\n            }\n            if (message.identities != null && $Object.hasOwnProperty.call(message, \"identities\")) {\n                if (!$util.isObject(message.identities))\n                    return \"identities: object expected\";\n                let key = $Object.keys(message.identities);\n                for (let i = 0; i < key.length; ++i)\n                    if (!$util.isString(message.identities[key[i]]))\n                        return \"identities: string{k:string} expected\";\n            }\n            if (message.isSiteAdmin != null && $Object.hasOwnProperty.call(message, \"isSiteAdmin\"))\n                if (typeof message.isSiteAdmin !== \"boolean\")\n                    return \"isSiteAdmin: boolean expected\";\n            if (message.tcAcceptedVersion != null && $Object.hasOwnProperty.call(message, \"tcAcceptedVersion\"))\n                if (!$util.isString(message.tcAcceptedVersion))\n                    return \"tcAcceptedVersion: string expected\";\n            if (message.tcAcceptedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"tcAcceptedAtUnixMs\"))\n                if (!$util.isInteger(message.tcAcceptedAtUnixMs) && !(message.tcAcceptedAtUnixMs && $util.isInteger(message.tcAcceptedAtUnixMs.low) && $util.isInteger(message.tcAcceptedAtUnixMs.high)))\n                    return \"tcAcceptedAtUnixMs: integer|Long expected\";\n            if (message.trialClaimed != null && $Object.hasOwnProperty.call(message, \"trialClaimed\"))\n                if (typeof message.trialClaimed !== \"boolean\")\n                    return \"trialClaimed: boolean expected\";\n            return null;\n        };\n\n        /**\n         * Creates a UserProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {users.UserProtoRow} UserProtoRow\n         */\n        UserProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.users.UserProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".users.UserProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.users.UserProtoRow();\n            if (object.id != null)\n                if (typeof object.id !== \"string\" || object.id.length)\n                    message.id = $String(object.id);\n            if (object.email != null)\n                if (typeof object.email !== \"string\" || object.email.length)\n                    message.email = $String(object.email);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.tenantRoles) {\n                if (!$util.isObject(object.tenantRoles))\n                    throw $TypeError(\".users.UserProtoRow.tenantRoles: object expected\");\n                message.tenantRoles = {};\n                for (let keys = $Object.keys(object.tenantRoles), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.tenantRoles, keys[i]);\n                    switch (object.tenantRoles[keys[i]]) {\n                    case \"ROLE_ADMIN\":\n                    case 0:\n                        message.tenantRoles[keys[i]] = 0;\n                        break;\n                    case \"ROLE_BROADCASTER\":\n                    case 1:\n                        message.tenantRoles[keys[i]] = 1;\n                        break;\n                    case \"ROLE_DISABLED\":\n                    case 2:\n                        message.tenantRoles[keys[i]] = 2;\n                        break;\n                    default:\n                        if (typeof object.tenantRoles[keys[i]] === \"number\" && (object.tenantRoles[keys[i]] | 0) === object.tenantRoles[keys[i]])\n                            message.tenantRoles[keys[i]] = object.tenantRoles[keys[i]];\n                    }\n                }\n            }\n            if (object.identities) {\n                if (!$util.isObject(object.identities))\n                    throw $TypeError(\".users.UserProtoRow.identities: object expected\");\n                message.identities = {};\n                for (let keys = $Object.keys(object.identities), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.identities, keys[i]);\n                    message.identities[keys[i]] = $String(object.identities[keys[i]]);\n                }\n            }\n            if (object.isSiteAdmin != null)\n                if (object.isSiteAdmin)\n                    message.isSiteAdmin = $Boolean(object.isSiteAdmin);\n            if (object.tcAcceptedVersion != null)\n                if (typeof object.tcAcceptedVersion !== \"string\" || object.tcAcceptedVersion.length)\n                    message.tcAcceptedVersion = $String(object.tcAcceptedVersion);\n            if (object.tcAcceptedAtUnixMs != null)\n                if (typeof object.tcAcceptedAtUnixMs === \"object\" ? object.tcAcceptedAtUnixMs.low || object.tcAcceptedAtUnixMs.high : $Number(object.tcAcceptedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.tcAcceptedAtUnixMs = $util.Long.fromValue(object.tcAcceptedAtUnixMs, false);\n                    else if (typeof object.tcAcceptedAtUnixMs === \"string\")\n                        message.tcAcceptedAtUnixMs = $parseInt(object.tcAcceptedAtUnixMs, 10);\n                    else if (typeof object.tcAcceptedAtUnixMs === \"number\")\n                        message.tcAcceptedAtUnixMs = object.tcAcceptedAtUnixMs;\n                    else if (typeof object.tcAcceptedAtUnixMs === \"object\")\n                        message.tcAcceptedAtUnixMs = new $util.LongBits(object.tcAcceptedAtUnixMs.low >>> 0, object.tcAcceptedAtUnixMs.high >>> 0).toNumber();\n            if (object.trialClaimed != null)\n                if (object.trialClaimed)\n                    message.trialClaimed = $Boolean(object.trialClaimed);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a UserProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {users.UserProtoRow} message UserProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        UserProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.objects || options.defaults) {\n                object.tenantRoles = {};\n                object.identities = {};\n            }\n            if (options.defaults) {\n                object.id = \"\";\n                object.email = \"\";\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.isSiteAdmin = false;\n                object.tcAcceptedVersion = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.trialClaimed = false;\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                object.id = message.id;\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                object.email = message.email;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            let keys2;\n            if (message.tenantRoles && (keys2 = $Object.keys(message.tenantRoles)).length) {\n                object.tenantRoles = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    let k2 = $util.longFromKey(keys2[j], false).toString();\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.tenantRoles, keys2[j]);\n                    object.tenantRoles[k2] = options.enums === $String ? $root.users.Role[message.tenantRoles[keys2[j]]] === $undefined ? message.tenantRoles[keys2[j]] : $root.users.Role[message.tenantRoles[keys2[j]]] : message.tenantRoles[keys2[j]];\n                }\n            }\n            if (message.identities && (keys2 = $Object.keys(message.identities)).length) {\n                object.identities = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.identities, keys2[j]);\n                    object.identities[keys2[j]] = message.identities[keys2[j]];\n                }\n            }\n            if (message.isSiteAdmin != null && $Object.hasOwnProperty.call(message, \"isSiteAdmin\"))\n                object.isSiteAdmin = message.isSiteAdmin;\n            if (message.tcAcceptedVersion != null && $Object.hasOwnProperty.call(message, \"tcAcceptedVersion\"))\n                object.tcAcceptedVersion = message.tcAcceptedVersion;\n            if (message.tcAcceptedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"tcAcceptedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tcAcceptedAtUnixMs = typeof message.tcAcceptedAtUnixMs === \"number\" ? $BigInt(message.tcAcceptedAtUnixMs) : $util.Long.fromBits(message.tcAcceptedAtUnixMs.low >>> 0, message.tcAcceptedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.tcAcceptedAtUnixMs === \"number\")\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? $String(message.tcAcceptedAtUnixMs) : message.tcAcceptedAtUnixMs;\n                else\n                    object.tcAcceptedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.tcAcceptedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.tcAcceptedAtUnixMs.low >>> 0, message.tcAcceptedAtUnixMs.high >>> 0).toNumber() : message.tcAcceptedAtUnixMs;\n            if (message.trialClaimed != null && $Object.hasOwnProperty.call(message, \"trialClaimed\"))\n                object.trialClaimed = message.trialClaimed;\n            return object;\n        };\n\n        /**\n         * Converts this UserProtoRow to JSON.\n         * @function toJSON\n         * @memberof users.UserProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        UserProtoRow.prototype.toJSON = function() {\n            return UserProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for UserProtoRow\n         * @function getTypeUrl\n         * @memberof users.UserProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        UserProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/users.UserProtoRow\";\n        };\n\n        return UserProtoRow;\n    })();\n\n    users.UsersProto = (function() {\n\n        /**\n         * Properties of a UsersProto.\n         * @typedef {Object} users.UsersProto.$Properties\n         * @property {number|null} [schemaMinorVersion] UsersProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] UsersProto lastModifiedByCommit\n         * @property {Array.<users.UserProtoRow.$Properties>|null} [users] UsersProto users\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a UsersProto.\n         * @memberof users\n         * @interface IUsersProto\n         * @augments users.UsersProto.$Properties\n         * @deprecated Use users.UsersProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a UsersProto.\n         * @typedef {users.UsersProto.$Properties} users.UsersProto.$Shape\n         */\n\n        /**\n         * Constructs a new UsersProto.\n         * @memberof users\n         * @classdesc Represents a UsersProto.\n         * @constructor\n         * @param {users.UsersProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const UsersProto = function (properties) {\n            this.users = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * UsersProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof users.UsersProto\n         * @instance\n         */\n        UsersProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * UsersProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof users.UsersProto\n         * @instance\n         */\n        UsersProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * UsersProto users.\n         * @member {Array.<users.UserProtoRow.$Properties>} users\n         * @memberof users.UsersProto\n         * @instance\n         */\n        UsersProto.prototype.users = $util.emptyArray;\n\n        /**\n         * Creates a new UsersProto instance using the specified properties.\n         * @function create\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto.$Properties=} [properties] Properties to set\n         * @returns {users.UsersProto} UsersProto instance\n         * @type {{\n         *   (properties: users.UsersProto.$Shape): users.UsersProto & users.UsersProto.$Shape;\n         *   (properties?: users.UsersProto.$Properties): users.UsersProto;\n         * }}\n         */\n        UsersProto.create = function(properties) {\n            return new UsersProto(properties);\n        };\n\n        /**\n         * Encodes the specified UsersProto message. Does not implicitly {@link users.UsersProto.verify|verify} messages.\n         * @function encode\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto.$Properties} message UsersProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UsersProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.users != null && message.users.length)\n                for (let i = 0; i < message.users.length; ++i)\n                    $root.users.UserProtoRow.encode(message.users[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified UsersProto message, length delimited. Does not implicitly {@link users.UsersProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto.$Properties} message UsersProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UsersProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a UsersProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof users.UsersProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {users.UsersProto & users.UsersProto.$Shape} UsersProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UsersProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.users.UsersProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.users && message.users.length))\n                            message.users = [];\n                        message.users.push($root.users.UserProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a UsersProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof users.UsersProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {users.UsersProto & users.UsersProto.$Shape} UsersProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UsersProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a UsersProto message.\n         * @function verify\n         * @memberof users.UsersProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        UsersProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.users != null && $Object.hasOwnProperty.call(message, \"users\")) {\n                if (!$Array.isArray(message.users))\n                    return \"users: array expected\";\n                for (let i = 0; i < message.users.length; ++i) {\n                    let error = $root.users.UserProtoRow.verify(message.users[i], _depth + 1);\n                    if (error)\n                        return \"users.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a UsersProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof users.UsersProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {users.UsersProto} UsersProto\n         */\n        UsersProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.users.UsersProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".users.UsersProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.users.UsersProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.users) {\n                if (!$Array.isArray(object.users))\n                    throw $TypeError(\".users.UsersProto.users: array expected\");\n                message.users = $Array(object.users.length);\n                for (let i = 0; i < object.users.length; ++i) {\n                    if (!$util.isObject(object.users[i]))\n                        throw $TypeError(\".users.UsersProto.users: object expected\");\n                    message.users[i] = $root.users.UserProtoRow.fromObject(object.users[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a UsersProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof users.UsersProto\n         * @static\n         * @param {users.UsersProto} message UsersProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        UsersProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.users = [];\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.users && message.users.length) {\n                object.users = $Array(message.users.length);\n                for (let j = 0; j < message.users.length; ++j)\n                    object.users[j] = $root.users.UserProtoRow.toObject(message.users[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this UsersProto to JSON.\n         * @function toJSON\n         * @memberof users.UsersProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        UsersProto.prototype.toJSON = function() {\n            return UsersProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for UsersProto\n         * @function getTypeUrl\n         * @memberof users.UsersProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        UsersProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/users.UsersProto\";\n        };\n\n        return UsersProto;\n    })();\n\n    return users;\n})();\n\nexport const tenants = $root.tenants = (() => {\n\n    /**\n     * Namespace tenants.\n     * @exports tenants\n     * @namespace\n     */\n    const tenants = {};\n\n    tenants.TenantProto = (function() {\n\n        /**\n         * Properties of a TenantProto.\n         * @typedef {Object} tenants.TenantProto.$Properties\n         * @property {number|null} [schemaMinorVersion] TenantProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] TenantProto lastModifiedByCommit\n         * @property {number|Long|null} [id] TenantProto id\n         * @property {string|null} [name] TenantProto name\n         * @property {number|Long|null} [createdAtUnixMs] TenantProto createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] TenantProto updatedAtUnixMs\n         * @property {number|null} [maxChannels] TenantProto maxChannels\n         * @property {string|null} [customDomain] TenantProto customDomain\n         * @property {number|Long|null} [customDomainVerifiedAtUnixMs] TenantProto customDomainVerifiedAtUnixMs\n         * @property {number|Long|null} [customDomainSetAtUnixMs] TenantProto customDomainSetAtUnixMs\n         * @property {boolean|null} [isDisabled] TenantProto isDisabled\n         * @property {number|Long|null} [disabledAtUnixMs] TenantProto disabledAtUnixMs\n         * @property {string|null} [createdByUserId] TenantProto createdByUserId\n         * @property {string|null} [disabledByUserId] TenantProto disabledByUserId\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a TenantProto.\n         * @memberof tenants\n         * @interface ITenantProto\n         * @augments tenants.TenantProto.$Properties\n         * @deprecated Use tenants.TenantProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a TenantProto.\n         * @typedef {tenants.TenantProto.$Properties} tenants.TenantProto.$Shape\n         */\n\n        /**\n         * Constructs a new TenantProto.\n         * @memberof tenants\n         * @classdesc Represents a TenantProto.\n         * @constructor\n         * @param {tenants.TenantProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const TenantProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * TenantProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * TenantProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * TenantProto id.\n         * @member {number|Long} id\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto name.\n         * @member {string} name\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.name = \"\";\n\n        /**\n         * TenantProto createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto maxChannels.\n         * @member {number} maxChannels\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.maxChannels = 0;\n\n        /**\n         * TenantProto customDomain.\n         * @member {string} customDomain\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.customDomain = \"\";\n\n        /**\n         * TenantProto customDomainVerifiedAtUnixMs.\n         * @member {number|Long} customDomainVerifiedAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.customDomainVerifiedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto customDomainSetAtUnixMs.\n         * @member {number|Long} customDomainSetAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.customDomainSetAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto isDisabled.\n         * @member {boolean} isDisabled\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.isDisabled = false;\n\n        /**\n         * TenantProto disabledAtUnixMs.\n         * @member {number|Long} disabledAtUnixMs\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.disabledAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProto createdByUserId.\n         * @member {string} createdByUserId\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.createdByUserId = \"\";\n\n        /**\n         * TenantProto disabledByUserId.\n         * @member {string} disabledByUserId\n         * @memberof tenants.TenantProto\n         * @instance\n         */\n        TenantProto.prototype.disabledByUserId = \"\";\n\n        /**\n         * Creates a new TenantProto instance using the specified properties.\n         * @function create\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto.$Properties=} [properties] Properties to set\n         * @returns {tenants.TenantProto} TenantProto instance\n         * @type {{\n         *   (properties: tenants.TenantProto.$Shape): tenants.TenantProto & tenants.TenantProto.$Shape;\n         *   (properties?: tenants.TenantProto.$Properties): tenants.TenantProto;\n         * }}\n         */\n        TenantProto.create = function(properties) {\n            return new TenantProto(properties);\n        };\n\n        /**\n         * Encodes the specified TenantProto message. Does not implicitly {@link tenants.TenantProto.verify|verify} messages.\n         * @function encode\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto.$Properties} message TenantProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && (typeof message.id === \"object\" ? message.id.low || message.id.high : message.id !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.id);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.name);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.updatedAtUnixMs);\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\") && message.maxChannels !== 0)\n                writer.uint32(/* id 7, wireType 0 =*/56).int32(message.maxChannels);\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\") && message.customDomain !== \"\")\n                writer.uint32(/* id 8, wireType 2 =*/66).string(message.customDomain);\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\") && (typeof message.customDomainVerifiedAtUnixMs === \"object\" ? message.customDomainVerifiedAtUnixMs.low || message.customDomainVerifiedAtUnixMs.high : message.customDomainVerifiedAtUnixMs !== 0))\n                writer.uint32(/* id 9, wireType 0 =*/72).int64(message.customDomainVerifiedAtUnixMs);\n            if (message.customDomainSetAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainSetAtUnixMs\") && (typeof message.customDomainSetAtUnixMs === \"object\" ? message.customDomainSetAtUnixMs.low || message.customDomainSetAtUnixMs.high : message.customDomainSetAtUnixMs !== 0))\n                writer.uint32(/* id 10, wireType 0 =*/80).int64(message.customDomainSetAtUnixMs);\n            if (message.isDisabled != null && $Object.hasOwnProperty.call(message, \"isDisabled\") && message.isDisabled !== false)\n                writer.uint32(/* id 11, wireType 0 =*/88).bool(message.isDisabled);\n            if (message.disabledAtUnixMs != null && $Object.hasOwnProperty.call(message, \"disabledAtUnixMs\") && (typeof message.disabledAtUnixMs === \"object\" ? message.disabledAtUnixMs.low || message.disabledAtUnixMs.high : message.disabledAtUnixMs !== 0))\n                writer.uint32(/* id 12, wireType 0 =*/96).int64(message.disabledAtUnixMs);\n            if (message.createdByUserId != null && $Object.hasOwnProperty.call(message, \"createdByUserId\") && message.createdByUserId !== \"\")\n                writer.uint32(/* id 13, wireType 2 =*/106).string(message.createdByUserId);\n            if (message.disabledByUserId != null && $Object.hasOwnProperty.call(message, \"disabledByUserId\") && message.disabledByUserId !== \"\")\n                writer.uint32(/* id 14, wireType 2 =*/114).string(message.disabledByUserId);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified TenantProto message, length delimited. Does not implicitly {@link tenants.TenantProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto.$Properties} message TenantProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a TenantProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tenants.TenantProto & tenants.TenantProto.$Shape} TenantProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tenants.TenantProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.maxChannels = value;\n                        else\n                            delete message.maxChannels;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.customDomain = value;\n                        else\n                            delete message.customDomain;\n                        continue;\n                    }\n                case 9: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.customDomainVerifiedAtUnixMs = value;\n                        else\n                            delete message.customDomainVerifiedAtUnixMs;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.customDomainSetAtUnixMs = value;\n                        else\n                            delete message.customDomainSetAtUnixMs;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isDisabled = value;\n                        else\n                            delete message.isDisabled;\n                        continue;\n                    }\n                case 12: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.disabledAtUnixMs = value;\n                        else\n                            delete message.disabledAtUnixMs;\n                        continue;\n                    }\n                case 13: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.createdByUserId = value;\n                        else\n                            delete message.createdByUserId;\n                        continue;\n                    }\n                case 14: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.disabledByUserId = value;\n                        else\n                            delete message.disabledByUserId;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a TenantProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tenants.TenantProto & tenants.TenantProto.$Shape} TenantProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a TenantProto message.\n         * @function verify\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        TenantProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))\n                    return \"id: integer|Long expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                if (!$util.isInteger(message.maxChannels))\n                    return \"maxChannels: integer expected\";\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                if (!$util.isString(message.customDomain))\n                    return \"customDomain: string expected\";\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (!$util.isInteger(message.customDomainVerifiedAtUnixMs) && !(message.customDomainVerifiedAtUnixMs && $util.isInteger(message.customDomainVerifiedAtUnixMs.low) && $util.isInteger(message.customDomainVerifiedAtUnixMs.high)))\n                    return \"customDomainVerifiedAtUnixMs: integer|Long expected\";\n            if (message.customDomainSetAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainSetAtUnixMs\"))\n                if (!$util.isInteger(message.customDomainSetAtUnixMs) && !(message.customDomainSetAtUnixMs && $util.isInteger(message.customDomainSetAtUnixMs.low) && $util.isInteger(message.customDomainSetAtUnixMs.high)))\n                    return \"customDomainSetAtUnixMs: integer|Long expected\";\n            if (message.isDisabled != null && $Object.hasOwnProperty.call(message, \"isDisabled\"))\n                if (typeof message.isDisabled !== \"boolean\")\n                    return \"isDisabled: boolean expected\";\n            if (message.disabledAtUnixMs != null && $Object.hasOwnProperty.call(message, \"disabledAtUnixMs\"))\n                if (!$util.isInteger(message.disabledAtUnixMs) && !(message.disabledAtUnixMs && $util.isInteger(message.disabledAtUnixMs.low) && $util.isInteger(message.disabledAtUnixMs.high)))\n                    return \"disabledAtUnixMs: integer|Long expected\";\n            if (message.createdByUserId != null && $Object.hasOwnProperty.call(message, \"createdByUserId\"))\n                if (!$util.isString(message.createdByUserId))\n                    return \"createdByUserId: string expected\";\n            if (message.disabledByUserId != null && $Object.hasOwnProperty.call(message, \"disabledByUserId\"))\n                if (!$util.isString(message.disabledByUserId))\n                    return \"disabledByUserId: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a TenantProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tenants.TenantProto} TenantProto\n         */\n        TenantProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tenants.TenantProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tenants.TenantProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tenants.TenantProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.id != null)\n                if (typeof object.id === \"object\" ? object.id.low || object.id.high : $Number(object.id) !== 0)\n                    if ($util.Long)\n                        message.id = $util.Long.fromValue(object.id, false);\n                    else if (typeof object.id === \"string\")\n                        message.id = $parseInt(object.id, 10);\n                    else if (typeof object.id === \"number\")\n                        message.id = object.id;\n                    else if (typeof object.id === \"object\")\n                        message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.maxChannels != null)\n                if ($Number(object.maxChannels) !== 0)\n                    message.maxChannels = object.maxChannels | 0;\n            if (object.customDomain != null)\n                if (typeof object.customDomain !== \"string\" || object.customDomain.length)\n                    message.customDomain = $String(object.customDomain);\n            if (object.customDomainVerifiedAtUnixMs != null)\n                if (typeof object.customDomainVerifiedAtUnixMs === \"object\" ? object.customDomainVerifiedAtUnixMs.low || object.customDomainVerifiedAtUnixMs.high : $Number(object.customDomainVerifiedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.customDomainVerifiedAtUnixMs = $util.Long.fromValue(object.customDomainVerifiedAtUnixMs, false);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"string\")\n                        message.customDomainVerifiedAtUnixMs = $parseInt(object.customDomainVerifiedAtUnixMs, 10);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"number\")\n                        message.customDomainVerifiedAtUnixMs = object.customDomainVerifiedAtUnixMs;\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"object\")\n                        message.customDomainVerifiedAtUnixMs = new $util.LongBits(object.customDomainVerifiedAtUnixMs.low >>> 0, object.customDomainVerifiedAtUnixMs.high >>> 0).toNumber();\n            if (object.customDomainSetAtUnixMs != null)\n                if (typeof object.customDomainSetAtUnixMs === \"object\" ? object.customDomainSetAtUnixMs.low || object.customDomainSetAtUnixMs.high : $Number(object.customDomainSetAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.customDomainSetAtUnixMs = $util.Long.fromValue(object.customDomainSetAtUnixMs, false);\n                    else if (typeof object.customDomainSetAtUnixMs === \"string\")\n                        message.customDomainSetAtUnixMs = $parseInt(object.customDomainSetAtUnixMs, 10);\n                    else if (typeof object.customDomainSetAtUnixMs === \"number\")\n                        message.customDomainSetAtUnixMs = object.customDomainSetAtUnixMs;\n                    else if (typeof object.customDomainSetAtUnixMs === \"object\")\n                        message.customDomainSetAtUnixMs = new $util.LongBits(object.customDomainSetAtUnixMs.low >>> 0, object.customDomainSetAtUnixMs.high >>> 0).toNumber();\n            if (object.isDisabled != null)\n                if (object.isDisabled)\n                    message.isDisabled = $Boolean(object.isDisabled);\n            if (object.disabledAtUnixMs != null)\n                if (typeof object.disabledAtUnixMs === \"object\" ? object.disabledAtUnixMs.low || object.disabledAtUnixMs.high : $Number(object.disabledAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.disabledAtUnixMs = $util.Long.fromValue(object.disabledAtUnixMs, false);\n                    else if (typeof object.disabledAtUnixMs === \"string\")\n                        message.disabledAtUnixMs = $parseInt(object.disabledAtUnixMs, 10);\n                    else if (typeof object.disabledAtUnixMs === \"number\")\n                        message.disabledAtUnixMs = object.disabledAtUnixMs;\n                    else if (typeof object.disabledAtUnixMs === \"object\")\n                        message.disabledAtUnixMs = new $util.LongBits(object.disabledAtUnixMs.low >>> 0, object.disabledAtUnixMs.high >>> 0).toNumber();\n            if (object.createdByUserId != null)\n                if (typeof object.createdByUserId !== \"string\" || object.createdByUserId.length)\n                    message.createdByUserId = $String(object.createdByUserId);\n            if (object.disabledByUserId != null)\n                if (typeof object.disabledByUserId !== \"string\" || object.disabledByUserId.length)\n                    message.disabledByUserId = $String(object.disabledByUserId);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a TenantProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {tenants.TenantProto} message TenantProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        TenantProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.id = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.id = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.maxChannels = 0;\n                object.customDomain = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.customDomainSetAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.customDomainSetAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.isDisabled = false;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.disabledAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.disabledAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.createdByUserId = \"\";\n                object.disabledByUserId = \"\";\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.id = typeof message.id === \"number\" ? $BigInt(message.id) : $util.Long.fromBits(message.id.low >>> 0, message.id.high >>> 0, false).toBigInt();\n                else if (typeof message.id === \"number\")\n                    object.id = options.longs === $String ? $String(message.id) : message.id;\n                else\n                    object.id = options.longs === $String ? $util.Long.prototype.toString.call(message.id) : options.longs === $Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                object.maxChannels = message.maxChannels;\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                object.customDomain = message.customDomain;\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.customDomainVerifiedAtUnixMs = typeof message.customDomainVerifiedAtUnixMs === \"number\" ? $BigInt(message.customDomainVerifiedAtUnixMs) : $util.Long.fromBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.customDomainVerifiedAtUnixMs === \"number\")\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $String(message.customDomainVerifiedAtUnixMs) : message.customDomainVerifiedAtUnixMs;\n                else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.customDomainVerifiedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0).toNumber() : message.customDomainVerifiedAtUnixMs;\n            if (message.customDomainSetAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainSetAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.customDomainSetAtUnixMs = typeof message.customDomainSetAtUnixMs === \"number\" ? $BigInt(message.customDomainSetAtUnixMs) : $util.Long.fromBits(message.customDomainSetAtUnixMs.low >>> 0, message.customDomainSetAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.customDomainSetAtUnixMs === \"number\")\n                    object.customDomainSetAtUnixMs = options.longs === $String ? $String(message.customDomainSetAtUnixMs) : message.customDomainSetAtUnixMs;\n                else\n                    object.customDomainSetAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.customDomainSetAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.customDomainSetAtUnixMs.low >>> 0, message.customDomainSetAtUnixMs.high >>> 0).toNumber() : message.customDomainSetAtUnixMs;\n            if (message.isDisabled != null && $Object.hasOwnProperty.call(message, \"isDisabled\"))\n                object.isDisabled = message.isDisabled;\n            if (message.disabledAtUnixMs != null && $Object.hasOwnProperty.call(message, \"disabledAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.disabledAtUnixMs = typeof message.disabledAtUnixMs === \"number\" ? $BigInt(message.disabledAtUnixMs) : $util.Long.fromBits(message.disabledAtUnixMs.low >>> 0, message.disabledAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.disabledAtUnixMs === \"number\")\n                    object.disabledAtUnixMs = options.longs === $String ? $String(message.disabledAtUnixMs) : message.disabledAtUnixMs;\n                else\n                    object.disabledAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.disabledAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.disabledAtUnixMs.low >>> 0, message.disabledAtUnixMs.high >>> 0).toNumber() : message.disabledAtUnixMs;\n            if (message.createdByUserId != null && $Object.hasOwnProperty.call(message, \"createdByUserId\"))\n                object.createdByUserId = message.createdByUserId;\n            if (message.disabledByUserId != null && $Object.hasOwnProperty.call(message, \"disabledByUserId\"))\n                object.disabledByUserId = message.disabledByUserId;\n            return object;\n        };\n\n        /**\n         * Converts this TenantProto to JSON.\n         * @function toJSON\n         * @memberof tenants.TenantProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        TenantProto.prototype.toJSON = function() {\n            return TenantProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for TenantProto\n         * @function getTypeUrl\n         * @memberof tenants.TenantProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        TenantProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tenants.TenantProto\";\n        };\n\n        return TenantProto;\n    })();\n\n    tenants.TenantProtoRow = (function() {\n\n        /**\n         * Properties of a TenantProtoRow.\n         * @typedef {Object} tenants.TenantProtoRow.$Properties\n         * @property {number|Long|null} [id] TenantProtoRow id\n         * @property {string|null} [name] TenantProtoRow name\n         * @property {number|Long|null} [createdAtUnixMs] TenantProtoRow createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] TenantProtoRow updatedAtUnixMs\n         * @property {number|null} [maxChannels] TenantProtoRow maxChannels\n         * @property {string|null} [customDomain] TenantProtoRow customDomain\n         * @property {number|Long|null} [customDomainVerifiedAtUnixMs] TenantProtoRow customDomainVerifiedAtUnixMs\n         * @property {number|Long|null} [customDomainSetAtUnixMs] TenantProtoRow customDomainSetAtUnixMs\n         * @property {boolean|null} [isDisabled] TenantProtoRow isDisabled\n         * @property {number|Long|null} [disabledAtUnixMs] TenantProtoRow disabledAtUnixMs\n         * @property {string|null} [createdByUserId] TenantProtoRow createdByUserId\n         * @property {string|null} [disabledByUserId] TenantProtoRow disabledByUserId\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a TenantProtoRow.\n         * @memberof tenants\n         * @interface ITenantProtoRow\n         * @augments tenants.TenantProtoRow.$Properties\n         * @deprecated Use tenants.TenantProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a TenantProtoRow.\n         * @typedef {tenants.TenantProtoRow.$Properties} tenants.TenantProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new TenantProtoRow.\n         * @memberof tenants\n         * @classdesc Represents a TenantProtoRow.\n         * @constructor\n         * @param {tenants.TenantProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const TenantProtoRow = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * TenantProtoRow id.\n         * @member {number|Long} id\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.id = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow name.\n         * @member {string} name\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.name = \"\";\n\n        /**\n         * TenantProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow maxChannels.\n         * @member {number} maxChannels\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.maxChannels = 0;\n\n        /**\n         * TenantProtoRow customDomain.\n         * @member {string} customDomain\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.customDomain = \"\";\n\n        /**\n         * TenantProtoRow customDomainVerifiedAtUnixMs.\n         * @member {number|Long} customDomainVerifiedAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.customDomainVerifiedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow customDomainSetAtUnixMs.\n         * @member {number|Long} customDomainSetAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.customDomainSetAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow isDisabled.\n         * @member {boolean} isDisabled\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.isDisabled = false;\n\n        /**\n         * TenantProtoRow disabledAtUnixMs.\n         * @member {number|Long} disabledAtUnixMs\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.disabledAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * TenantProtoRow createdByUserId.\n         * @member {string} createdByUserId\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.createdByUserId = \"\";\n\n        /**\n         * TenantProtoRow disabledByUserId.\n         * @member {string} disabledByUserId\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         */\n        TenantProtoRow.prototype.disabledByUserId = \"\";\n\n        /**\n         * Creates a new TenantProtoRow instance using the specified properties.\n         * @function create\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow.$Properties=} [properties] Properties to set\n         * @returns {tenants.TenantProtoRow} TenantProtoRow instance\n         * @type {{\n         *   (properties: tenants.TenantProtoRow.$Shape): tenants.TenantProtoRow & tenants.TenantProtoRow.$Shape;\n         *   (properties?: tenants.TenantProtoRow.$Properties): tenants.TenantProtoRow;\n         * }}\n         */\n        TenantProtoRow.create = function(properties) {\n            return new TenantProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified TenantProtoRow message. Does not implicitly {@link tenants.TenantProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow.$Properties} message TenantProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && (typeof message.id === \"object\" ? message.id.low || message.id.high : message.id !== 0))\n                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.id);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.updatedAtUnixMs);\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\") && message.maxChannels !== 0)\n                writer.uint32(/* id 6, wireType 0 =*/48).int32(message.maxChannels);\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\") && message.customDomain !== \"\")\n                writer.uint32(/* id 7, wireType 2 =*/58).string(message.customDomain);\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\") && (typeof message.customDomainVerifiedAtUnixMs === \"object\" ? message.customDomainVerifiedAtUnixMs.low || message.customDomainVerifiedAtUnixMs.high : message.customDomainVerifiedAtUnixMs !== 0))\n                writer.uint32(/* id 8, wireType 0 =*/64).int64(message.customDomainVerifiedAtUnixMs);\n            if (message.customDomainSetAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainSetAtUnixMs\") && (typeof message.customDomainSetAtUnixMs === \"object\" ? message.customDomainSetAtUnixMs.low || message.customDomainSetAtUnixMs.high : message.customDomainSetAtUnixMs !== 0))\n                writer.uint32(/* id 9, wireType 0 =*/72).int64(message.customDomainSetAtUnixMs);\n            if (message.isDisabled != null && $Object.hasOwnProperty.call(message, \"isDisabled\") && message.isDisabled !== false)\n                writer.uint32(/* id 10, wireType 0 =*/80).bool(message.isDisabled);\n            if (message.disabledAtUnixMs != null && $Object.hasOwnProperty.call(message, \"disabledAtUnixMs\") && (typeof message.disabledAtUnixMs === \"object\" ? message.disabledAtUnixMs.low || message.disabledAtUnixMs.high : message.disabledAtUnixMs !== 0))\n                writer.uint32(/* id 11, wireType 0 =*/88).int64(message.disabledAtUnixMs);\n            if (message.createdByUserId != null && $Object.hasOwnProperty.call(message, \"createdByUserId\") && message.createdByUserId !== \"\")\n                writer.uint32(/* id 12, wireType 2 =*/98).string(message.createdByUserId);\n            if (message.disabledByUserId != null && $Object.hasOwnProperty.call(message, \"disabledByUserId\") && message.disabledByUserId !== \"\")\n                writer.uint32(/* id 13, wireType 2 =*/106).string(message.disabledByUserId);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified TenantProtoRow message, length delimited. Does not implicitly {@link tenants.TenantProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow.$Properties} message TenantProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a TenantProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tenants.TenantProtoRow & tenants.TenantProtoRow.$Shape} TenantProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tenants.TenantProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.maxChannels = value;\n                        else\n                            delete message.maxChannels;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.customDomain = value;\n                        else\n                            delete message.customDomain;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.customDomainVerifiedAtUnixMs = value;\n                        else\n                            delete message.customDomainVerifiedAtUnixMs;\n                        continue;\n                    }\n                case 9: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.customDomainSetAtUnixMs = value;\n                        else\n                            delete message.customDomainSetAtUnixMs;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isDisabled = value;\n                        else\n                            delete message.isDisabled;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.disabledAtUnixMs = value;\n                        else\n                            delete message.disabledAtUnixMs;\n                        continue;\n                    }\n                case 12: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.createdByUserId = value;\n                        else\n                            delete message.createdByUserId;\n                        continue;\n                    }\n                case 13: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.disabledByUserId = value;\n                        else\n                            delete message.disabledByUserId;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a TenantProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tenants.TenantProtoRow & tenants.TenantProtoRow.$Shape} TenantProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a TenantProtoRow message.\n         * @function verify\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        TenantProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isInteger(message.id) && !(message.id && $util.isInteger(message.id.low) && $util.isInteger(message.id.high)))\n                    return \"id: integer|Long expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                if (!$util.isInteger(message.maxChannels))\n                    return \"maxChannels: integer expected\";\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                if (!$util.isString(message.customDomain))\n                    return \"customDomain: string expected\";\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (!$util.isInteger(message.customDomainVerifiedAtUnixMs) && !(message.customDomainVerifiedAtUnixMs && $util.isInteger(message.customDomainVerifiedAtUnixMs.low) && $util.isInteger(message.customDomainVerifiedAtUnixMs.high)))\n                    return \"customDomainVerifiedAtUnixMs: integer|Long expected\";\n            if (message.customDomainSetAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainSetAtUnixMs\"))\n                if (!$util.isInteger(message.customDomainSetAtUnixMs) && !(message.customDomainSetAtUnixMs && $util.isInteger(message.customDomainSetAtUnixMs.low) && $util.isInteger(message.customDomainSetAtUnixMs.high)))\n                    return \"customDomainSetAtUnixMs: integer|Long expected\";\n            if (message.isDisabled != null && $Object.hasOwnProperty.call(message, \"isDisabled\"))\n                if (typeof message.isDisabled !== \"boolean\")\n                    return \"isDisabled: boolean expected\";\n            if (message.disabledAtUnixMs != null && $Object.hasOwnProperty.call(message, \"disabledAtUnixMs\"))\n                if (!$util.isInteger(message.disabledAtUnixMs) && !(message.disabledAtUnixMs && $util.isInteger(message.disabledAtUnixMs.low) && $util.isInteger(message.disabledAtUnixMs.high)))\n                    return \"disabledAtUnixMs: integer|Long expected\";\n            if (message.createdByUserId != null && $Object.hasOwnProperty.call(message, \"createdByUserId\"))\n                if (!$util.isString(message.createdByUserId))\n                    return \"createdByUserId: string expected\";\n            if (message.disabledByUserId != null && $Object.hasOwnProperty.call(message, \"disabledByUserId\"))\n                if (!$util.isString(message.disabledByUserId))\n                    return \"disabledByUserId: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a TenantProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tenants.TenantProtoRow} TenantProtoRow\n         */\n        TenantProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.tenants.TenantProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tenants.TenantProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tenants.TenantProtoRow();\n            if (object.id != null)\n                if (typeof object.id === \"object\" ? object.id.low || object.id.high : $Number(object.id) !== 0)\n                    if ($util.Long)\n                        message.id = $util.Long.fromValue(object.id, false);\n                    else if (typeof object.id === \"string\")\n                        message.id = $parseInt(object.id, 10);\n                    else if (typeof object.id === \"number\")\n                        message.id = object.id;\n                    else if (typeof object.id === \"object\")\n                        message.id = new $util.LongBits(object.id.low >>> 0, object.id.high >>> 0).toNumber();\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.maxChannels != null)\n                if ($Number(object.maxChannels) !== 0)\n                    message.maxChannels = object.maxChannels | 0;\n            if (object.customDomain != null)\n                if (typeof object.customDomain !== \"string\" || object.customDomain.length)\n                    message.customDomain = $String(object.customDomain);\n            if (object.customDomainVerifiedAtUnixMs != null)\n                if (typeof object.customDomainVerifiedAtUnixMs === \"object\" ? object.customDomainVerifiedAtUnixMs.low || object.customDomainVerifiedAtUnixMs.high : $Number(object.customDomainVerifiedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.customDomainVerifiedAtUnixMs = $util.Long.fromValue(object.customDomainVerifiedAtUnixMs, false);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"string\")\n                        message.customDomainVerifiedAtUnixMs = $parseInt(object.customDomainVerifiedAtUnixMs, 10);\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"number\")\n                        message.customDomainVerifiedAtUnixMs = object.customDomainVerifiedAtUnixMs;\n                    else if (typeof object.customDomainVerifiedAtUnixMs === \"object\")\n                        message.customDomainVerifiedAtUnixMs = new $util.LongBits(object.customDomainVerifiedAtUnixMs.low >>> 0, object.customDomainVerifiedAtUnixMs.high >>> 0).toNumber();\n            if (object.customDomainSetAtUnixMs != null)\n                if (typeof object.customDomainSetAtUnixMs === \"object\" ? object.customDomainSetAtUnixMs.low || object.customDomainSetAtUnixMs.high : $Number(object.customDomainSetAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.customDomainSetAtUnixMs = $util.Long.fromValue(object.customDomainSetAtUnixMs, false);\n                    else if (typeof object.customDomainSetAtUnixMs === \"string\")\n                        message.customDomainSetAtUnixMs = $parseInt(object.customDomainSetAtUnixMs, 10);\n                    else if (typeof object.customDomainSetAtUnixMs === \"number\")\n                        message.customDomainSetAtUnixMs = object.customDomainSetAtUnixMs;\n                    else if (typeof object.customDomainSetAtUnixMs === \"object\")\n                        message.customDomainSetAtUnixMs = new $util.LongBits(object.customDomainSetAtUnixMs.low >>> 0, object.customDomainSetAtUnixMs.high >>> 0).toNumber();\n            if (object.isDisabled != null)\n                if (object.isDisabled)\n                    message.isDisabled = $Boolean(object.isDisabled);\n            if (object.disabledAtUnixMs != null)\n                if (typeof object.disabledAtUnixMs === \"object\" ? object.disabledAtUnixMs.low || object.disabledAtUnixMs.high : $Number(object.disabledAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.disabledAtUnixMs = $util.Long.fromValue(object.disabledAtUnixMs, false);\n                    else if (typeof object.disabledAtUnixMs === \"string\")\n                        message.disabledAtUnixMs = $parseInt(object.disabledAtUnixMs, 10);\n                    else if (typeof object.disabledAtUnixMs === \"number\")\n                        message.disabledAtUnixMs = object.disabledAtUnixMs;\n                    else if (typeof object.disabledAtUnixMs === \"object\")\n                        message.disabledAtUnixMs = new $util.LongBits(object.disabledAtUnixMs.low >>> 0, object.disabledAtUnixMs.high >>> 0).toNumber();\n            if (object.createdByUserId != null)\n                if (typeof object.createdByUserId !== \"string\" || object.createdByUserId.length)\n                    message.createdByUserId = $String(object.createdByUserId);\n            if (object.disabledByUserId != null)\n                if (typeof object.disabledByUserId !== \"string\" || object.disabledByUserId.length)\n                    message.disabledByUserId = $String(object.disabledByUserId);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a TenantProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {tenants.TenantProtoRow} message TenantProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        TenantProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.id = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.id = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.maxChannels = 0;\n                object.customDomain = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.customDomainSetAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.customDomainSetAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.isDisabled = false;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.disabledAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.disabledAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.createdByUserId = \"\";\n                object.disabledByUserId = \"\";\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.id = typeof message.id === \"number\" ? $BigInt(message.id) : $util.Long.fromBits(message.id.low >>> 0, message.id.high >>> 0, false).toBigInt();\n                else if (typeof message.id === \"number\")\n                    object.id = options.longs === $String ? $String(message.id) : message.id;\n                else\n                    object.id = options.longs === $String ? $util.Long.prototype.toString.call(message.id) : options.longs === $Number ? new $util.LongBits(message.id.low >>> 0, message.id.high >>> 0).toNumber() : message.id;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.maxChannels != null && $Object.hasOwnProperty.call(message, \"maxChannels\"))\n                object.maxChannels = message.maxChannels;\n            if (message.customDomain != null && $Object.hasOwnProperty.call(message, \"customDomain\"))\n                object.customDomain = message.customDomain;\n            if (message.customDomainVerifiedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainVerifiedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.customDomainVerifiedAtUnixMs = typeof message.customDomainVerifiedAtUnixMs === \"number\" ? $BigInt(message.customDomainVerifiedAtUnixMs) : $util.Long.fromBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.customDomainVerifiedAtUnixMs === \"number\")\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $String(message.customDomainVerifiedAtUnixMs) : message.customDomainVerifiedAtUnixMs;\n                else\n                    object.customDomainVerifiedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.customDomainVerifiedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.customDomainVerifiedAtUnixMs.low >>> 0, message.customDomainVerifiedAtUnixMs.high >>> 0).toNumber() : message.customDomainVerifiedAtUnixMs;\n            if (message.customDomainSetAtUnixMs != null && $Object.hasOwnProperty.call(message, \"customDomainSetAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.customDomainSetAtUnixMs = typeof message.customDomainSetAtUnixMs === \"number\" ? $BigInt(message.customDomainSetAtUnixMs) : $util.Long.fromBits(message.customDomainSetAtUnixMs.low >>> 0, message.customDomainSetAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.customDomainSetAtUnixMs === \"number\")\n                    object.customDomainSetAtUnixMs = options.longs === $String ? $String(message.customDomainSetAtUnixMs) : message.customDomainSetAtUnixMs;\n                else\n                    object.customDomainSetAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.customDomainSetAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.customDomainSetAtUnixMs.low >>> 0, message.customDomainSetAtUnixMs.high >>> 0).toNumber() : message.customDomainSetAtUnixMs;\n            if (message.isDisabled != null && $Object.hasOwnProperty.call(message, \"isDisabled\"))\n                object.isDisabled = message.isDisabled;\n            if (message.disabledAtUnixMs != null && $Object.hasOwnProperty.call(message, \"disabledAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.disabledAtUnixMs = typeof message.disabledAtUnixMs === \"number\" ? $BigInt(message.disabledAtUnixMs) : $util.Long.fromBits(message.disabledAtUnixMs.low >>> 0, message.disabledAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.disabledAtUnixMs === \"number\")\n                    object.disabledAtUnixMs = options.longs === $String ? $String(message.disabledAtUnixMs) : message.disabledAtUnixMs;\n                else\n                    object.disabledAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.disabledAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.disabledAtUnixMs.low >>> 0, message.disabledAtUnixMs.high >>> 0).toNumber() : message.disabledAtUnixMs;\n            if (message.createdByUserId != null && $Object.hasOwnProperty.call(message, \"createdByUserId\"))\n                object.createdByUserId = message.createdByUserId;\n            if (message.disabledByUserId != null && $Object.hasOwnProperty.call(message, \"disabledByUserId\"))\n                object.disabledByUserId = message.disabledByUserId;\n            return object;\n        };\n\n        /**\n         * Converts this TenantProtoRow to JSON.\n         * @function toJSON\n         * @memberof tenants.TenantProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        TenantProtoRow.prototype.toJSON = function() {\n            return TenantProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for TenantProtoRow\n         * @function getTypeUrl\n         * @memberof tenants.TenantProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        TenantProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tenants.TenantProtoRow\";\n        };\n\n        return TenantProtoRow;\n    })();\n\n    tenants.TenantsProto = (function() {\n\n        /**\n         * Properties of a TenantsProto.\n         * @typedef {Object} tenants.TenantsProto.$Properties\n         * @property {number|null} [schemaMinorVersion] TenantsProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] TenantsProto lastModifiedByCommit\n         * @property {Array.<tenants.TenantProtoRow.$Properties>|null} [tenants] TenantsProto tenants\n         * @property {number|Long|null} [lastUpdatedUnixMs] TenantsProto lastUpdatedUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a TenantsProto.\n         * @memberof tenants\n         * @interface ITenantsProto\n         * @augments tenants.TenantsProto.$Properties\n         * @deprecated Use tenants.TenantsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a TenantsProto.\n         * @typedef {tenants.TenantsProto.$Properties} tenants.TenantsProto.$Shape\n         */\n\n        /**\n         * Constructs a new TenantsProto.\n         * @memberof tenants\n         * @classdesc Represents a TenantsProto.\n         * @constructor\n         * @param {tenants.TenantsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const TenantsProto = function (properties) {\n            this.tenants = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * TenantsProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * TenantsProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * TenantsProto tenants.\n         * @member {Array.<tenants.TenantProtoRow.$Properties>} tenants\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.tenants = $util.emptyArray;\n\n        /**\n         * TenantsProto lastUpdatedUnixMs.\n         * @member {number|Long} lastUpdatedUnixMs\n         * @memberof tenants.TenantsProto\n         * @instance\n         */\n        TenantsProto.prototype.lastUpdatedUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new TenantsProto instance using the specified properties.\n         * @function create\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto.$Properties=} [properties] Properties to set\n         * @returns {tenants.TenantsProto} TenantsProto instance\n         * @type {{\n         *   (properties: tenants.TenantsProto.$Shape): tenants.TenantsProto & tenants.TenantsProto.$Shape;\n         *   (properties?: tenants.TenantsProto.$Properties): tenants.TenantsProto;\n         * }}\n         */\n        TenantsProto.create = function(properties) {\n            return new TenantsProto(properties);\n        };\n\n        /**\n         * Encodes the specified TenantsProto message. Does not implicitly {@link tenants.TenantsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto.$Properties} message TenantsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.tenants != null && message.tenants.length)\n                for (let i = 0; i < message.tenants.length; ++i)\n                    $root.tenants.TenantProtoRow.encode(message.tenants[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.lastUpdatedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUpdatedUnixMs\") && (typeof message.lastUpdatedUnixMs === \"object\" ? message.lastUpdatedUnixMs.low || message.lastUpdatedUnixMs.high : message.lastUpdatedUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.lastUpdatedUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified TenantsProto message, length delimited. Does not implicitly {@link tenants.TenantsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto.$Properties} message TenantsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        TenantsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a TenantsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tenants.TenantsProto & tenants.TenantsProto.$Shape} TenantsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tenants.TenantsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.tenants && message.tenants.length))\n                            message.tenants = [];\n                        message.tenants.push($root.tenants.TenantProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.lastUpdatedUnixMs = value;\n                        else\n                            delete message.lastUpdatedUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a TenantsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tenants.TenantsProto & tenants.TenantsProto.$Shape} TenantsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        TenantsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a TenantsProto message.\n         * @function verify\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        TenantsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.tenants != null && $Object.hasOwnProperty.call(message, \"tenants\")) {\n                if (!$Array.isArray(message.tenants))\n                    return \"tenants: array expected\";\n                for (let i = 0; i < message.tenants.length; ++i) {\n                    let error = $root.tenants.TenantProtoRow.verify(message.tenants[i], _depth + 1);\n                    if (error)\n                        return \"tenants.\" + error;\n                }\n            }\n            if (message.lastUpdatedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUpdatedUnixMs\"))\n                if (!$util.isInteger(message.lastUpdatedUnixMs) && !(message.lastUpdatedUnixMs && $util.isInteger(message.lastUpdatedUnixMs.low) && $util.isInteger(message.lastUpdatedUnixMs.high)))\n                    return \"lastUpdatedUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a TenantsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tenants.TenantsProto} TenantsProto\n         */\n        TenantsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tenants.TenantsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tenants.TenantsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tenants.TenantsProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.tenants) {\n                if (!$Array.isArray(object.tenants))\n                    throw $TypeError(\".tenants.TenantsProto.tenants: array expected\");\n                message.tenants = $Array(object.tenants.length);\n                for (let i = 0; i < object.tenants.length; ++i) {\n                    if (!$util.isObject(object.tenants[i]))\n                        throw $TypeError(\".tenants.TenantsProto.tenants: object expected\");\n                    message.tenants[i] = $root.tenants.TenantProtoRow.fromObject(object.tenants[i], _depth + 1);\n                }\n            }\n            if (object.lastUpdatedUnixMs != null)\n                if (typeof object.lastUpdatedUnixMs === \"object\" ? object.lastUpdatedUnixMs.low || object.lastUpdatedUnixMs.high : $Number(object.lastUpdatedUnixMs) !== 0)\n                    if ($util.Long)\n                        message.lastUpdatedUnixMs = $util.Long.fromValue(object.lastUpdatedUnixMs, false);\n                    else if (typeof object.lastUpdatedUnixMs === \"string\")\n                        message.lastUpdatedUnixMs = $parseInt(object.lastUpdatedUnixMs, 10);\n                    else if (typeof object.lastUpdatedUnixMs === \"number\")\n                        message.lastUpdatedUnixMs = object.lastUpdatedUnixMs;\n                    else if (typeof object.lastUpdatedUnixMs === \"object\")\n                        message.lastUpdatedUnixMs = new $util.LongBits(object.lastUpdatedUnixMs.low >>> 0, object.lastUpdatedUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a TenantsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {tenants.TenantsProto} message TenantsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        TenantsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.tenants = [];\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.lastUpdatedUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.lastUpdatedUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.tenants && message.tenants.length) {\n                object.tenants = $Array(message.tenants.length);\n                for (let j = 0; j < message.tenants.length; ++j)\n                    object.tenants[j] = $root.tenants.TenantProtoRow.toObject(message.tenants[j], options, _depth + 1);\n            }\n            if (message.lastUpdatedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUpdatedUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.lastUpdatedUnixMs = typeof message.lastUpdatedUnixMs === \"number\" ? $BigInt(message.lastUpdatedUnixMs) : $util.Long.fromBits(message.lastUpdatedUnixMs.low >>> 0, message.lastUpdatedUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.lastUpdatedUnixMs === \"number\")\n                    object.lastUpdatedUnixMs = options.longs === $String ? $String(message.lastUpdatedUnixMs) : message.lastUpdatedUnixMs;\n                else\n                    object.lastUpdatedUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.lastUpdatedUnixMs) : options.longs === $Number ? new $util.LongBits(message.lastUpdatedUnixMs.low >>> 0, message.lastUpdatedUnixMs.high >>> 0).toNumber() : message.lastUpdatedUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this TenantsProto to JSON.\n         * @function toJSON\n         * @memberof tenants.TenantsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        TenantsProto.prototype.toJSON = function() {\n            return TenantsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for TenantsProto\n         * @function getTypeUrl\n         * @memberof tenants.TenantsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        TenantsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tenants.TenantsProto\";\n        };\n\n        return TenantsProto;\n    })();\n\n    return tenants;\n})();\n\nexport const channels = $root.channels = (() => {\n\n    /**\n     * Namespace channels.\n     * @exports channels\n     * @namespace\n     */\n    const channels = {};\n\n    channels.ChannelProtoRow = (function() {\n\n        /**\n         * Properties of a ChannelProtoRow.\n         * @typedef {Object} channels.ChannelProtoRow.$Properties\n         * @property {string|null} [id] ChannelProtoRow id\n         * @property {string|null} [name] ChannelProtoRow name\n         * @property {number|Long|null} [tenantId] ChannelProtoRow tenantId\n         * @property {number|Long|null} [createdAtUnixMs] ChannelProtoRow createdAtUnixMs\n         * @property {number|Long|null} [updatedAtUnixMs] ChannelProtoRow updatedAtUnixMs\n         * @property {number|null} [logoFileId] ChannelProtoRow logoFileId\n         * @property {string|null} [backgroundColor] ChannelProtoRow backgroundColor\n         * @property {boolean|null} [isPrimary] ChannelProtoRow isPrimary\n         * @property {boolean|null} [isUnlisted] ChannelProtoRow isUnlisted\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a ChannelProtoRow.\n         * @memberof channels\n         * @interface IChannelProtoRow\n         * @augments channels.ChannelProtoRow.$Properties\n         * @deprecated Use channels.ChannelProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a ChannelProtoRow.\n         * @typedef {channels.ChannelProtoRow.$Properties} channels.ChannelProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new ChannelProtoRow.\n         * @memberof channels\n         * @classdesc Represents a ChannelProtoRow.\n         * @constructor\n         * @param {channels.ChannelProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const ChannelProtoRow = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * ChannelProtoRow id.\n         * @member {string} id\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.id = \"\";\n\n        /**\n         * ChannelProtoRow name.\n         * @member {string} name\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.name = \"\";\n\n        /**\n         * ChannelProtoRow tenantId.\n         * @member {number|Long} tenantId\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelProtoRow updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelProtoRow logoFileId.\n         * @member {number} logoFileId\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.logoFileId = 0;\n\n        /**\n         * ChannelProtoRow backgroundColor.\n         * @member {string} backgroundColor\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.backgroundColor = \"\";\n\n        /**\n         * ChannelProtoRow isPrimary.\n         * @member {boolean} isPrimary\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.isPrimary = false;\n\n        /**\n         * ChannelProtoRow isUnlisted.\n         * @member {boolean} isUnlisted\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         */\n        ChannelProtoRow.prototype.isUnlisted = false;\n\n        /**\n         * Creates a new ChannelProtoRow instance using the specified properties.\n         * @function create\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow.$Properties=} [properties] Properties to set\n         * @returns {channels.ChannelProtoRow} ChannelProtoRow instance\n         * @type {{\n         *   (properties: channels.ChannelProtoRow.$Shape): channels.ChannelProtoRow & channels.ChannelProtoRow.$Shape;\n         *   (properties?: channels.ChannelProtoRow.$Properties): channels.ChannelProtoRow;\n         * }}\n         */\n        ChannelProtoRow.create = function(properties) {\n            return new ChannelProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified ChannelProtoRow message. Does not implicitly {@link channels.ChannelProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow.$Properties} message ChannelProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && message.id !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.createdAtUnixMs);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.updatedAtUnixMs);\n            if (message.logoFileId != null && $Object.hasOwnProperty.call(message, \"logoFileId\") && message.logoFileId !== 0)\n                writer.uint32(/* id 8, wireType 0 =*/64).int32(message.logoFileId);\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\") && message.backgroundColor !== \"\")\n                writer.uint32(/* id 9, wireType 2 =*/74).string(message.backgroundColor);\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\") && message.isPrimary !== false)\n                writer.uint32(/* id 10, wireType 0 =*/80).bool(message.isPrimary);\n            if (message.isUnlisted != null && $Object.hasOwnProperty.call(message, \"isUnlisted\") && message.isUnlisted !== false)\n                writer.uint32(/* id 11, wireType 0 =*/88).bool(message.isUnlisted);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified ChannelProtoRow message, length delimited. Does not implicitly {@link channels.ChannelProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow.$Properties} message ChannelProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a ChannelProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {channels.ChannelProtoRow & channels.ChannelProtoRow.$Shape} ChannelProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.channels.ChannelProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.logoFileId = value;\n                        else\n                            delete message.logoFileId;\n                        continue;\n                    }\n                case 9: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.backgroundColor = value;\n                        else\n                            delete message.backgroundColor;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isPrimary = value;\n                        else\n                            delete message.isPrimary;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isUnlisted = value;\n                        else\n                            delete message.isUnlisted;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a ChannelProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {channels.ChannelProtoRow & channels.ChannelProtoRow.$Shape} ChannelProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a ChannelProtoRow message.\n         * @function verify\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        ChannelProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isString(message.id))\n                    return \"id: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.logoFileId != null && $Object.hasOwnProperty.call(message, \"logoFileId\"))\n                if (!$util.isInteger(message.logoFileId))\n                    return \"logoFileId: integer expected\";\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                if (!$util.isString(message.backgroundColor))\n                    return \"backgroundColor: string expected\";\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                if (typeof message.isPrimary !== \"boolean\")\n                    return \"isPrimary: boolean expected\";\n            if (message.isUnlisted != null && $Object.hasOwnProperty.call(message, \"isUnlisted\"))\n                if (typeof message.isUnlisted !== \"boolean\")\n                    return \"isUnlisted: boolean expected\";\n            return null;\n        };\n\n        /**\n         * Creates a ChannelProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {channels.ChannelProtoRow} ChannelProtoRow\n         */\n        ChannelProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.channels.ChannelProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".channels.ChannelProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.channels.ChannelProtoRow();\n            if (object.id != null)\n                if (typeof object.id !== \"string\" || object.id.length)\n                    message.id = $String(object.id);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.logoFileId != null)\n                if ($Number(object.logoFileId) !== 0)\n                    message.logoFileId = object.logoFileId | 0;\n            if (object.backgroundColor != null)\n                if (typeof object.backgroundColor !== \"string\" || object.backgroundColor.length)\n                    message.backgroundColor = $String(object.backgroundColor);\n            if (object.isPrimary != null)\n                if (object.isPrimary)\n                    message.isPrimary = $Boolean(object.isPrimary);\n            if (object.isUnlisted != null)\n                if (object.isUnlisted)\n                    message.isUnlisted = $Boolean(object.isUnlisted);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a ChannelProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {channels.ChannelProtoRow} message ChannelProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        ChannelProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.id = \"\";\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.logoFileId = 0;\n                object.backgroundColor = \"\";\n                object.isPrimary = false;\n                object.isUnlisted = false;\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                object.id = message.id;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.logoFileId != null && $Object.hasOwnProperty.call(message, \"logoFileId\"))\n                object.logoFileId = message.logoFileId;\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                object.backgroundColor = message.backgroundColor;\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                object.isPrimary = message.isPrimary;\n            if (message.isUnlisted != null && $Object.hasOwnProperty.call(message, \"isUnlisted\"))\n                object.isUnlisted = message.isUnlisted;\n            return object;\n        };\n\n        /**\n         * Converts this ChannelProtoRow to JSON.\n         * @function toJSON\n         * @memberof channels.ChannelProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        ChannelProtoRow.prototype.toJSON = function() {\n            return ChannelProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for ChannelProtoRow\n         * @function getTypeUrl\n         * @memberof channels.ChannelProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        ChannelProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/channels.ChannelProtoRow\";\n        };\n\n        return ChannelProtoRow;\n    })();\n\n    channels.ChannelsProto = (function() {\n\n        /**\n         * Properties of a ChannelsProto.\n         * @typedef {Object} channels.ChannelsProto.$Properties\n         * @property {number|null} [schemaMinorVersion] ChannelsProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] ChannelsProto lastModifiedByCommit\n         * @property {Array.<channels.ChannelProtoRow.$Properties>|null} [channels] ChannelsProto channels\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a ChannelsProto.\n         * @memberof channels\n         * @interface IChannelsProto\n         * @augments channels.ChannelsProto.$Properties\n         * @deprecated Use channels.ChannelsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a ChannelsProto.\n         * @typedef {channels.ChannelsProto.$Properties} channels.ChannelsProto.$Shape\n         */\n\n        /**\n         * Constructs a new ChannelsProto.\n         * @memberof channels\n         * @classdesc Represents a ChannelsProto.\n         * @constructor\n         * @param {channels.ChannelsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const ChannelsProto = function (properties) {\n            this.channels = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * ChannelsProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof channels.ChannelsProto\n         * @instance\n         */\n        ChannelsProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * ChannelsProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof channels.ChannelsProto\n         * @instance\n         */\n        ChannelsProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * ChannelsProto channels.\n         * @member {Array.<channels.ChannelProtoRow.$Properties>} channels\n         * @memberof channels.ChannelsProto\n         * @instance\n         */\n        ChannelsProto.prototype.channels = $util.emptyArray;\n\n        /**\n         * Creates a new ChannelsProto instance using the specified properties.\n         * @function create\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto.$Properties=} [properties] Properties to set\n         * @returns {channels.ChannelsProto} ChannelsProto instance\n         * @type {{\n         *   (properties: channels.ChannelsProto.$Shape): channels.ChannelsProto & channels.ChannelsProto.$Shape;\n         *   (properties?: channels.ChannelsProto.$Properties): channels.ChannelsProto;\n         * }}\n         */\n        ChannelsProto.create = function(properties) {\n            return new ChannelsProto(properties);\n        };\n\n        /**\n         * Encodes the specified ChannelsProto message. Does not implicitly {@link channels.ChannelsProto.verify|verify} messages.\n         * @function encode\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto.$Properties} message ChannelsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.channels != null && message.channels.length)\n                for (let i = 0; i < message.channels.length; ++i)\n                    $root.channels.ChannelProtoRow.encode(message.channels[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified ChannelsProto message, length delimited. Does not implicitly {@link channels.ChannelsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto.$Properties} message ChannelsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a ChannelsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {channels.ChannelsProto & channels.ChannelsProto.$Shape} ChannelsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.channels.ChannelsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.channels && message.channels.length))\n                            message.channels = [];\n                        message.channels.push($root.channels.ChannelProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a ChannelsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {channels.ChannelsProto & channels.ChannelsProto.$Shape} ChannelsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a ChannelsProto message.\n         * @function verify\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        ChannelsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.channels != null && $Object.hasOwnProperty.call(message, \"channels\")) {\n                if (!$Array.isArray(message.channels))\n                    return \"channels: array expected\";\n                for (let i = 0; i < message.channels.length; ++i) {\n                    let error = $root.channels.ChannelProtoRow.verify(message.channels[i], _depth + 1);\n                    if (error)\n                        return \"channels.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a ChannelsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {channels.ChannelsProto} ChannelsProto\n         */\n        ChannelsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.channels.ChannelsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".channels.ChannelsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.channels.ChannelsProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.channels) {\n                if (!$Array.isArray(object.channels))\n                    throw $TypeError(\".channels.ChannelsProto.channels: array expected\");\n                message.channels = $Array(object.channels.length);\n                for (let i = 0; i < object.channels.length; ++i) {\n                    if (!$util.isObject(object.channels[i]))\n                        throw $TypeError(\".channels.ChannelsProto.channels: object expected\");\n                    message.channels[i] = $root.channels.ChannelProtoRow.fromObject(object.channels[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a ChannelsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {channels.ChannelsProto} message ChannelsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        ChannelsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.channels = [];\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.channels && message.channels.length) {\n                object.channels = $Array(message.channels.length);\n                for (let j = 0; j < message.channels.length; ++j)\n                    object.channels[j] = $root.channels.ChannelProtoRow.toObject(message.channels[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this ChannelsProto to JSON.\n         * @function toJSON\n         * @memberof channels.ChannelsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        ChannelsProto.prototype.toJSON = function() {\n            return ChannelsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for ChannelsProto\n         * @function getTypeUrl\n         * @memberof channels.ChannelsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        ChannelsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/channels.ChannelsProto\";\n        };\n\n        return ChannelsProto;\n    })();\n\n    channels.ChannelInfoProto = (function() {\n\n        /**\n         * Properties of a ChannelInfoProto.\n         * @typedef {Object} channels.ChannelInfoProto.$Properties\n         * @property {string|null} [channelId] ChannelInfoProto channelId\n         * @property {string|null} [channelName] ChannelInfoProto channelName\n         * @property {number|Long|null} [tenantId] ChannelInfoProto tenantId\n         * @property {string|null} [tenantName] ChannelInfoProto tenantName\n         * @property {boolean|null} [hasLogo] ChannelInfoProto hasLogo\n         * @property {string|null} [status] ChannelInfoProto status\n         * @property {string|null} [channel] ChannelInfoProto channel\n         * @property {string|null} [backgroundColor] ChannelInfoProto backgroundColor\n         * @property {boolean|null} [isPrimary] ChannelInfoProto isPrimary\n         * @property {Uint8Array|null} [logoBytes] ChannelInfoProto logoBytes\n         * @property {boolean|null} [isUnlisted] ChannelInfoProto isUnlisted\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a ChannelInfoProto.\n         * @memberof channels\n         * @interface IChannelInfoProto\n         * @augments channels.ChannelInfoProto.$Properties\n         * @deprecated Use channels.ChannelInfoProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a ChannelInfoProto.\n         * @typedef {channels.ChannelInfoProto.$Properties} channels.ChannelInfoProto.$Shape\n         */\n\n        /**\n         * Constructs a new ChannelInfoProto.\n         * @memberof channels\n         * @classdesc Represents a ChannelInfoProto.\n         * @constructor\n         * @param {channels.ChannelInfoProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const ChannelInfoProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * ChannelInfoProto channelId.\n         * @member {string} channelId\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.channelId = \"\";\n\n        /**\n         * ChannelInfoProto channelName.\n         * @member {string} channelName\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.channelName = \"\";\n\n        /**\n         * ChannelInfoProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * ChannelInfoProto tenantName.\n         * @member {string} tenantName\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.tenantName = \"\";\n\n        /**\n         * ChannelInfoProto hasLogo.\n         * @member {boolean} hasLogo\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.hasLogo = false;\n\n        /**\n         * ChannelInfoProto status.\n         * @member {string} status\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.status = \"\";\n\n        /**\n         * ChannelInfoProto channel.\n         * @member {string} channel\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.channel = \"\";\n\n        /**\n         * ChannelInfoProto backgroundColor.\n         * @member {string} backgroundColor\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.backgroundColor = \"\";\n\n        /**\n         * ChannelInfoProto isPrimary.\n         * @member {boolean} isPrimary\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.isPrimary = false;\n\n        /**\n         * ChannelInfoProto logoBytes.\n         * @member {Uint8Array} logoBytes\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.logoBytes = $util.newBuffer([]);\n\n        /**\n         * ChannelInfoProto isUnlisted.\n         * @member {boolean} isUnlisted\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         */\n        ChannelInfoProto.prototype.isUnlisted = false;\n\n        /**\n         * Creates a new ChannelInfoProto instance using the specified properties.\n         * @function create\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto.$Properties=} [properties] Properties to set\n         * @returns {channels.ChannelInfoProto} ChannelInfoProto instance\n         * @type {{\n         *   (properties: channels.ChannelInfoProto.$Shape): channels.ChannelInfoProto & channels.ChannelInfoProto.$Shape;\n         *   (properties?: channels.ChannelInfoProto.$Properties): channels.ChannelInfoProto;\n         * }}\n         */\n        ChannelInfoProto.create = function(properties) {\n            return new ChannelInfoProto(properties);\n        };\n\n        /**\n         * Encodes the specified ChannelInfoProto message. Does not implicitly {@link channels.ChannelInfoProto.verify|verify} messages.\n         * @function encode\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto.$Properties} message ChannelInfoProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelInfoProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.channelId != null && $Object.hasOwnProperty.call(message, \"channelId\") && message.channelId !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.channelId);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelName);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\") && message.tenantName !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.tenantName);\n            if (message.hasLogo != null && $Object.hasOwnProperty.call(message, \"hasLogo\") && message.hasLogo !== false)\n                writer.uint32(/* id 5, wireType 0 =*/40).bool(message.hasLogo);\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\") && message.status !== \"\")\n                writer.uint32(/* id 6, wireType 2 =*/50).string(message.status);\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\") && message.channel !== \"\")\n                writer.uint32(/* id 7, wireType 2 =*/58).string(message.channel);\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\") && message.backgroundColor !== \"\")\n                writer.uint32(/* id 10, wireType 2 =*/82).string(message.backgroundColor);\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\") && message.isPrimary !== false)\n                writer.uint32(/* id 11, wireType 0 =*/88).bool(message.isPrimary);\n            if (message.logoBytes != null && $Object.hasOwnProperty.call(message, \"logoBytes\") && message.logoBytes.length)\n                writer.uint32(/* id 12, wireType 2 =*/98).bytes(message.logoBytes);\n            if (message.isUnlisted != null && $Object.hasOwnProperty.call(message, \"isUnlisted\") && message.isUnlisted !== false)\n                writer.uint32(/* id 13, wireType 0 =*/104).bool(message.isUnlisted);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified ChannelInfoProto message, length delimited. Does not implicitly {@link channels.ChannelInfoProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto.$Properties} message ChannelInfoProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        ChannelInfoProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a ChannelInfoProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {channels.ChannelInfoProto & channels.ChannelInfoProto.$Shape} ChannelInfoProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelInfoProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.channels.ChannelInfoProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelId = value;\n                        else\n                            delete message.channelId;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tenantName = value;\n                        else\n                            delete message.tenantName;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.hasLogo = value;\n                        else\n                            delete message.hasLogo;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.status = value;\n                        else\n                            delete message.status;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channel = value;\n                        else\n                            delete message.channel;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.backgroundColor = value;\n                        else\n                            delete message.backgroundColor;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isPrimary = value;\n                        else\n                            delete message.isPrimary;\n                        continue;\n                    }\n                case 12: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.bytes()).length)\n                            message.logoBytes = value;\n                        else\n                            delete message.logoBytes;\n                        continue;\n                    }\n                case 13: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.bool())\n                            message.isUnlisted = value;\n                        else\n                            delete message.isUnlisted;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a ChannelInfoProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {channels.ChannelInfoProto & channels.ChannelInfoProto.$Shape} ChannelInfoProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        ChannelInfoProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a ChannelInfoProto message.\n         * @function verify\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        ChannelInfoProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.channelId != null && $Object.hasOwnProperty.call(message, \"channelId\"))\n                if (!$util.isString(message.channelId))\n                    return \"channelId: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                if (!$util.isString(message.tenantName))\n                    return \"tenantName: string expected\";\n            if (message.hasLogo != null && $Object.hasOwnProperty.call(message, \"hasLogo\"))\n                if (typeof message.hasLogo !== \"boolean\")\n                    return \"hasLogo: boolean expected\";\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                if (!$util.isString(message.status))\n                    return \"status: string expected\";\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                if (!$util.isString(message.channel))\n                    return \"channel: string expected\";\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                if (!$util.isString(message.backgroundColor))\n                    return \"backgroundColor: string expected\";\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                if (typeof message.isPrimary !== \"boolean\")\n                    return \"isPrimary: boolean expected\";\n            if (message.logoBytes != null && $Object.hasOwnProperty.call(message, \"logoBytes\"))\n                if (!(message.logoBytes && typeof message.logoBytes.length === \"number\" || $util.isString(message.logoBytes)))\n                    return \"logoBytes: buffer expected\";\n            if (message.isUnlisted != null && $Object.hasOwnProperty.call(message, \"isUnlisted\"))\n                if (typeof message.isUnlisted !== \"boolean\")\n                    return \"isUnlisted: boolean expected\";\n            return null;\n        };\n\n        /**\n         * Creates a ChannelInfoProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {channels.ChannelInfoProto} ChannelInfoProto\n         */\n        ChannelInfoProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.channels.ChannelInfoProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".channels.ChannelInfoProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.channels.ChannelInfoProto();\n            if (object.channelId != null)\n                if (typeof object.channelId !== \"string\" || object.channelId.length)\n                    message.channelId = $String(object.channelId);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.tenantName != null)\n                if (typeof object.tenantName !== \"string\" || object.tenantName.length)\n                    message.tenantName = $String(object.tenantName);\n            if (object.hasLogo != null)\n                if (object.hasLogo)\n                    message.hasLogo = $Boolean(object.hasLogo);\n            if (object.status != null)\n                if (typeof object.status !== \"string\" || object.status.length)\n                    message.status = $String(object.status);\n            if (object.channel != null)\n                if (typeof object.channel !== \"string\" || object.channel.length)\n                    message.channel = $String(object.channel);\n            if (object.backgroundColor != null)\n                if (typeof object.backgroundColor !== \"string\" || object.backgroundColor.length)\n                    message.backgroundColor = $String(object.backgroundColor);\n            if (object.isPrimary != null)\n                if (object.isPrimary)\n                    message.isPrimary = $Boolean(object.isPrimary);\n            if (object.logoBytes != null)\n                if (object.logoBytes.length)\n                    if (typeof object.logoBytes === \"string\")\n                        $util.base64.decode(object.logoBytes, message.logoBytes = $util.newBuffer($util.base64.length(object.logoBytes)), 0);\n                    else if (object.logoBytes.length >= 0)\n                        message.logoBytes = object.logoBytes;\n            if (object.isUnlisted != null)\n                if (object.isUnlisted)\n                    message.isUnlisted = $Boolean(object.isUnlisted);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a ChannelInfoProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {channels.ChannelInfoProto} message ChannelInfoProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        ChannelInfoProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.channelId = \"\";\n                object.channelName = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.tenantName = \"\";\n                object.hasLogo = false;\n                object.status = \"\";\n                object.channel = \"\";\n                object.backgroundColor = \"\";\n                object.isPrimary = false;\n                if (options.bytes === $String)\n                    object.logoBytes = \"\";\n                else {\n                    object.logoBytes = [];\n                    if (options.bytes !== $Array)\n                        object.logoBytes = $util.newBuffer(object.logoBytes);\n                }\n                object.isUnlisted = false;\n            }\n            if (message.channelId != null && $Object.hasOwnProperty.call(message, \"channelId\"))\n                object.channelId = message.channelId;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                object.tenantName = message.tenantName;\n            if (message.hasLogo != null && $Object.hasOwnProperty.call(message, \"hasLogo\"))\n                object.hasLogo = message.hasLogo;\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                object.status = message.status;\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                object.channel = message.channel;\n            if (message.backgroundColor != null && $Object.hasOwnProperty.call(message, \"backgroundColor\"))\n                object.backgroundColor = message.backgroundColor;\n            if (message.isPrimary != null && $Object.hasOwnProperty.call(message, \"isPrimary\"))\n                object.isPrimary = message.isPrimary;\n            if (message.logoBytes != null && $Object.hasOwnProperty.call(message, \"logoBytes\"))\n                object.logoBytes = options.bytes === $String ? $util.base64.encode(message.logoBytes, 0, message.logoBytes.length) : options.bytes === $Array ? $Array.prototype.slice.call(message.logoBytes) : message.logoBytes;\n            if (message.isUnlisted != null && $Object.hasOwnProperty.call(message, \"isUnlisted\"))\n                object.isUnlisted = message.isUnlisted;\n            return object;\n        };\n\n        /**\n         * Converts this ChannelInfoProto to JSON.\n         * @function toJSON\n         * @memberof channels.ChannelInfoProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        ChannelInfoProto.prototype.toJSON = function() {\n            return ChannelInfoProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for ChannelInfoProto\n         * @function getTypeUrl\n         * @memberof channels.ChannelInfoProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        ChannelInfoProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/channels.ChannelInfoProto\";\n        };\n\n        return ChannelInfoProto;\n    })();\n\n    return channels;\n})();\n\nexport const tokens = $root.tokens = (() => {\n\n    /**\n     * Namespace tokens.\n     * @exports tokens\n     * @namespace\n     */\n    const tokens = {};\n\n    tokens.WorkerConnectionProto = (function() {\n\n        /**\n         * Properties of a WorkerConnectionProto.\n         * @typedef {Object} tokens.WorkerConnectionProto.$Properties\n         * @property {string|null} [workerUrl] WorkerConnectionProto workerUrl\n         * @property {string|null} [channelName] WorkerConnectionProto channelName\n         * @property {string|null} [token] WorkerConnectionProto token\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a WorkerConnectionProto.\n         * @memberof tokens\n         * @interface IWorkerConnectionProto\n         * @augments tokens.WorkerConnectionProto.$Properties\n         * @deprecated Use tokens.WorkerConnectionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a WorkerConnectionProto.\n         * @typedef {tokens.WorkerConnectionProto.$Properties} tokens.WorkerConnectionProto.$Shape\n         */\n\n        /**\n         * Constructs a new WorkerConnectionProto.\n         * @memberof tokens\n         * @classdesc Represents a WorkerConnectionProto.\n         * @constructor\n         * @param {tokens.WorkerConnectionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const WorkerConnectionProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * WorkerConnectionProto workerUrl.\n         * @member {string} workerUrl\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         */\n        WorkerConnectionProto.prototype.workerUrl = \"\";\n\n        /**\n         * WorkerConnectionProto channelName.\n         * @member {string} channelName\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         */\n        WorkerConnectionProto.prototype.channelName = \"\";\n\n        /**\n         * WorkerConnectionProto token.\n         * @member {string} token\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         */\n        WorkerConnectionProto.prototype.token = \"\";\n\n        /**\n         * Creates a new WorkerConnectionProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.WorkerConnectionProto} WorkerConnectionProto instance\n         * @type {{\n         *   (properties: tokens.WorkerConnectionProto.$Shape): tokens.WorkerConnectionProto & tokens.WorkerConnectionProto.$Shape;\n         *   (properties?: tokens.WorkerConnectionProto.$Properties): tokens.WorkerConnectionProto;\n         * }}\n         */\n        WorkerConnectionProto.create = function(properties) {\n            return new WorkerConnectionProto(properties);\n        };\n\n        /**\n         * Encodes the specified WorkerConnectionProto message. Does not implicitly {@link tokens.WorkerConnectionProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto.$Properties} message WorkerConnectionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerConnectionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.workerUrl != null && $Object.hasOwnProperty.call(message, \"workerUrl\") && message.workerUrl !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.workerUrl);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelName);\n            if (message.token != null && $Object.hasOwnProperty.call(message, \"token\") && message.token !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.token);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified WorkerConnectionProto message, length delimited. Does not implicitly {@link tokens.WorkerConnectionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto.$Properties} message WorkerConnectionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerConnectionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a WorkerConnectionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.WorkerConnectionProto & tokens.WorkerConnectionProto.$Shape} WorkerConnectionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerConnectionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.WorkerConnectionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.workerUrl = value;\n                        else\n                            delete message.workerUrl;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.token = value;\n                        else\n                            delete message.token;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a WorkerConnectionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.WorkerConnectionProto & tokens.WorkerConnectionProto.$Shape} WorkerConnectionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerConnectionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a WorkerConnectionProto message.\n         * @function verify\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        WorkerConnectionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.workerUrl != null && $Object.hasOwnProperty.call(message, \"workerUrl\"))\n                if (!$util.isString(message.workerUrl))\n                    return \"workerUrl: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.token != null && $Object.hasOwnProperty.call(message, \"token\"))\n                if (!$util.isString(message.token))\n                    return \"token: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a WorkerConnectionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.WorkerConnectionProto} WorkerConnectionProto\n         */\n        WorkerConnectionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.WorkerConnectionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.WorkerConnectionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.WorkerConnectionProto();\n            if (object.workerUrl != null)\n                if (typeof object.workerUrl !== \"string\" || object.workerUrl.length)\n                    message.workerUrl = $String(object.workerUrl);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.token != null)\n                if (typeof object.token !== \"string\" || object.token.length)\n                    message.token = $String(object.token);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a WorkerConnectionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {tokens.WorkerConnectionProto} message WorkerConnectionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        WorkerConnectionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.workerUrl = \"\";\n                object.channelName = \"\";\n                object.token = \"\";\n            }\n            if (message.workerUrl != null && $Object.hasOwnProperty.call(message, \"workerUrl\"))\n                object.workerUrl = message.workerUrl;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.token != null && $Object.hasOwnProperty.call(message, \"token\"))\n                object.token = message.token;\n            return object;\n        };\n\n        /**\n         * Converts this WorkerConnectionProto to JSON.\n         * @function toJSON\n         * @memberof tokens.WorkerConnectionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        WorkerConnectionProto.prototype.toJSON = function() {\n            return WorkerConnectionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for WorkerConnectionProto\n         * @function getTypeUrl\n         * @memberof tokens.WorkerConnectionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        WorkerConnectionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.WorkerConnectionProto\";\n        };\n\n        return WorkerConnectionProto;\n    })();\n\n    tokens.LanguageOptionProto = (function() {\n\n        /**\n         * Properties of a LanguageOptionProto.\n         * @typedef {Object} tokens.LanguageOptionProto.$Properties\n         * @property {string|null} [code] LanguageOptionProto code\n         * @property {string|null} [name] LanguageOptionProto name\n         * @property {string|null} [nativeName] LanguageOptionProto nativeName\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a LanguageOptionProto.\n         * @memberof tokens\n         * @interface ILanguageOptionProto\n         * @augments tokens.LanguageOptionProto.$Properties\n         * @deprecated Use tokens.LanguageOptionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a LanguageOptionProto.\n         * @typedef {tokens.LanguageOptionProto.$Properties} tokens.LanguageOptionProto.$Shape\n         */\n\n        /**\n         * Constructs a new LanguageOptionProto.\n         * @memberof tokens\n         * @classdesc Represents a LanguageOptionProto.\n         * @constructor\n         * @param {tokens.LanguageOptionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const LanguageOptionProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * LanguageOptionProto code.\n         * @member {string} code\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         */\n        LanguageOptionProto.prototype.code = \"\";\n\n        /**\n         * LanguageOptionProto name.\n         * @member {string} name\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         */\n        LanguageOptionProto.prototype.name = \"\";\n\n        /**\n         * LanguageOptionProto nativeName.\n         * @member {string} nativeName\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         */\n        LanguageOptionProto.prototype.nativeName = \"\";\n\n        /**\n         * Creates a new LanguageOptionProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.LanguageOptionProto} LanguageOptionProto instance\n         * @type {{\n         *   (properties: tokens.LanguageOptionProto.$Shape): tokens.LanguageOptionProto & tokens.LanguageOptionProto.$Shape;\n         *   (properties?: tokens.LanguageOptionProto.$Properties): tokens.LanguageOptionProto;\n         * }}\n         */\n        LanguageOptionProto.create = function(properties) {\n            return new LanguageOptionProto(properties);\n        };\n\n        /**\n         * Encodes the specified LanguageOptionProto message. Does not implicitly {@link tokens.LanguageOptionProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto.$Properties} message LanguageOptionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        LanguageOptionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.code != null && $Object.hasOwnProperty.call(message, \"code\") && message.code !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.code);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.name);\n            if (message.nativeName != null && $Object.hasOwnProperty.call(message, \"nativeName\") && message.nativeName !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.nativeName);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified LanguageOptionProto message, length delimited. Does not implicitly {@link tokens.LanguageOptionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto.$Properties} message LanguageOptionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        LanguageOptionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a LanguageOptionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.LanguageOptionProto & tokens.LanguageOptionProto.$Shape} LanguageOptionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        LanguageOptionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.LanguageOptionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.code = value;\n                        else\n                            delete message.code;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.nativeName = value;\n                        else\n                            delete message.nativeName;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a LanguageOptionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.LanguageOptionProto & tokens.LanguageOptionProto.$Shape} LanguageOptionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        LanguageOptionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a LanguageOptionProto message.\n         * @function verify\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        LanguageOptionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.code != null && $Object.hasOwnProperty.call(message, \"code\"))\n                if (!$util.isString(message.code))\n                    return \"code: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.nativeName != null && $Object.hasOwnProperty.call(message, \"nativeName\"))\n                if (!$util.isString(message.nativeName))\n                    return \"nativeName: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a LanguageOptionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.LanguageOptionProto} LanguageOptionProto\n         */\n        LanguageOptionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.LanguageOptionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.LanguageOptionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.LanguageOptionProto();\n            if (object.code != null)\n                if (typeof object.code !== \"string\" || object.code.length)\n                    message.code = $String(object.code);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.nativeName != null)\n                if (typeof object.nativeName !== \"string\" || object.nativeName.length)\n                    message.nativeName = $String(object.nativeName);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a LanguageOptionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {tokens.LanguageOptionProto} message LanguageOptionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        LanguageOptionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.code = \"\";\n                object.name = \"\";\n                object.nativeName = \"\";\n            }\n            if (message.code != null && $Object.hasOwnProperty.call(message, \"code\"))\n                object.code = message.code;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.nativeName != null && $Object.hasOwnProperty.call(message, \"nativeName\"))\n                object.nativeName = message.nativeName;\n            return object;\n        };\n\n        /**\n         * Converts this LanguageOptionProto to JSON.\n         * @function toJSON\n         * @memberof tokens.LanguageOptionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        LanguageOptionProto.prototype.toJSON = function() {\n            return LanguageOptionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for LanguageOptionProto\n         * @function getTypeUrl\n         * @memberof tokens.LanguageOptionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        LanguageOptionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.LanguageOptionProto\";\n        };\n\n        return LanguageOptionProto;\n    })();\n\n    tokens.SupportedLanguagesProto = (function() {\n\n        /**\n         * Properties of a SupportedLanguagesProto.\n         * @typedef {Object} tokens.SupportedLanguagesProto.$Properties\n         * @property {Array.<tokens.LanguageOptionProto.$Properties>|null} [languages] SupportedLanguagesProto languages\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a SupportedLanguagesProto.\n         * @memberof tokens\n         * @interface ISupportedLanguagesProto\n         * @augments tokens.SupportedLanguagesProto.$Properties\n         * @deprecated Use tokens.SupportedLanguagesProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a SupportedLanguagesProto.\n         * @typedef {tokens.SupportedLanguagesProto.$Properties} tokens.SupportedLanguagesProto.$Shape\n         */\n\n        /**\n         * Constructs a new SupportedLanguagesProto.\n         * @memberof tokens\n         * @classdesc Represents a SupportedLanguagesProto.\n         * @constructor\n         * @param {tokens.SupportedLanguagesProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const SupportedLanguagesProto = function (properties) {\n            this.languages = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * SupportedLanguagesProto languages.\n         * @member {Array.<tokens.LanguageOptionProto.$Properties>} languages\n         * @memberof tokens.SupportedLanguagesProto\n         * @instance\n         */\n        SupportedLanguagesProto.prototype.languages = $util.emptyArray;\n\n        /**\n         * Creates a new SupportedLanguagesProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.SupportedLanguagesProto} SupportedLanguagesProto instance\n         * @type {{\n         *   (properties: tokens.SupportedLanguagesProto.$Shape): tokens.SupportedLanguagesProto & tokens.SupportedLanguagesProto.$Shape;\n         *   (properties?: tokens.SupportedLanguagesProto.$Properties): tokens.SupportedLanguagesProto;\n         * }}\n         */\n        SupportedLanguagesProto.create = function(properties) {\n            return new SupportedLanguagesProto(properties);\n        };\n\n        /**\n         * Encodes the specified SupportedLanguagesProto message. Does not implicitly {@link tokens.SupportedLanguagesProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto.$Properties} message SupportedLanguagesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SupportedLanguagesProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.languages != null && message.languages.length)\n                for (let i = 0; i < message.languages.length; ++i)\n                    $root.tokens.LanguageOptionProto.encode(message.languages[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified SupportedLanguagesProto message, length delimited. Does not implicitly {@link tokens.SupportedLanguagesProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto.$Properties} message SupportedLanguagesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SupportedLanguagesProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a SupportedLanguagesProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.SupportedLanguagesProto & tokens.SupportedLanguagesProto.$Shape} SupportedLanguagesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SupportedLanguagesProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.SupportedLanguagesProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.languages && message.languages.length))\n                            message.languages = [];\n                        message.languages.push($root.tokens.LanguageOptionProto.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a SupportedLanguagesProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.SupportedLanguagesProto & tokens.SupportedLanguagesProto.$Shape} SupportedLanguagesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SupportedLanguagesProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a SupportedLanguagesProto message.\n         * @function verify\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        SupportedLanguagesProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.languages != null && $Object.hasOwnProperty.call(message, \"languages\")) {\n                if (!$Array.isArray(message.languages))\n                    return \"languages: array expected\";\n                for (let i = 0; i < message.languages.length; ++i) {\n                    let error = $root.tokens.LanguageOptionProto.verify(message.languages[i], _depth + 1);\n                    if (error)\n                        return \"languages.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a SupportedLanguagesProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.SupportedLanguagesProto} SupportedLanguagesProto\n         */\n        SupportedLanguagesProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.SupportedLanguagesProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.SupportedLanguagesProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.SupportedLanguagesProto();\n            if (object.languages) {\n                if (!$Array.isArray(object.languages))\n                    throw $TypeError(\".tokens.SupportedLanguagesProto.languages: array expected\");\n                message.languages = $Array(object.languages.length);\n                for (let i = 0; i < object.languages.length; ++i) {\n                    if (!$util.isObject(object.languages[i]))\n                        throw $TypeError(\".tokens.SupportedLanguagesProto.languages: object expected\");\n                    message.languages[i] = $root.tokens.LanguageOptionProto.fromObject(object.languages[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a SupportedLanguagesProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {tokens.SupportedLanguagesProto} message SupportedLanguagesProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        SupportedLanguagesProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.languages = [];\n            if (message.languages && message.languages.length) {\n                object.languages = $Array(message.languages.length);\n                for (let j = 0; j < message.languages.length; ++j)\n                    object.languages[j] = $root.tokens.LanguageOptionProto.toObject(message.languages[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this SupportedLanguagesProto to JSON.\n         * @function toJSON\n         * @memberof tokens.SupportedLanguagesProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        SupportedLanguagesProto.prototype.toJSON = function() {\n            return SupportedLanguagesProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for SupportedLanguagesProto\n         * @function getTypeUrl\n         * @memberof tokens.SupportedLanguagesProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        SupportedLanguagesProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.SupportedLanguagesProto\";\n        };\n\n        return SupportedLanguagesProto;\n    })();\n\n    tokens.SessionResponseProto = (function() {\n\n        /**\n         * Properties of a SessionResponseProto.\n         * @typedef {Object} tokens.SessionResponseProto.$Properties\n         * @property {string|null} [sessionId] SessionResponseProto sessionId\n         * @property {string|null} [channelName] SessionResponseProto channelName\n         * @property {number|Long|null} [tenantId] SessionResponseProto tenantId\n         * @property {string|null} [status] SessionResponseProto status\n         * @property {number|Long|null} [sessionSeconds] SessionResponseProto sessionSeconds\n         * @property {number|Long|null} [expiresAtUnixMs] SessionResponseProto expiresAtUnixMs\n         * @property {number|Long|null} [remainingSeconds] SessionResponseProto remainingSeconds\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a SessionResponseProto.\n         * @memberof tokens\n         * @interface ISessionResponseProto\n         * @augments tokens.SessionResponseProto.$Properties\n         * @deprecated Use tokens.SessionResponseProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a SessionResponseProto.\n         * @typedef {tokens.SessionResponseProto.$Properties} tokens.SessionResponseProto.$Shape\n         */\n\n        /**\n         * Constructs a new SessionResponseProto.\n         * @memberof tokens\n         * @classdesc Represents a SessionResponseProto.\n         * @constructor\n         * @param {tokens.SessionResponseProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const SessionResponseProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * SessionResponseProto sessionId.\n         * @member {string} sessionId\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.sessionId = \"\";\n\n        /**\n         * SessionResponseProto channelName.\n         * @member {string} channelName\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.channelName = \"\";\n\n        /**\n         * SessionResponseProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * SessionResponseProto status.\n         * @member {string} status\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.status = \"\";\n\n        /**\n         * SessionResponseProto sessionSeconds.\n         * @member {number|Long} sessionSeconds\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.sessionSeconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * SessionResponseProto expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * SessionResponseProto remainingSeconds.\n         * @member {number|Long} remainingSeconds\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         */\n        SessionResponseProto.prototype.remainingSeconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new SessionResponseProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.SessionResponseProto} SessionResponseProto instance\n         * @type {{\n         *   (properties: tokens.SessionResponseProto.$Shape): tokens.SessionResponseProto & tokens.SessionResponseProto.$Shape;\n         *   (properties?: tokens.SessionResponseProto.$Properties): tokens.SessionResponseProto;\n         * }}\n         */\n        SessionResponseProto.create = function(properties) {\n            return new SessionResponseProto(properties);\n        };\n\n        /**\n         * Encodes the specified SessionResponseProto message. Does not implicitly {@link tokens.SessionResponseProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto.$Properties} message SessionResponseProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SessionResponseProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\") && message.sessionId !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.sessionId);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channelName);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\") && message.status !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.status);\n            if (message.sessionSeconds != null && $Object.hasOwnProperty.call(message, \"sessionSeconds\") && (typeof message.sessionSeconds === \"object\" ? message.sessionSeconds.low || message.sessionSeconds.high : message.sessionSeconds !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.sessionSeconds);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.expiresAtUnixMs);\n            if (message.remainingSeconds != null && $Object.hasOwnProperty.call(message, \"remainingSeconds\") && (typeof message.remainingSeconds === \"object\" ? message.remainingSeconds.low || message.remainingSeconds.high : message.remainingSeconds !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.remainingSeconds);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified SessionResponseProto message, length delimited. Does not implicitly {@link tokens.SessionResponseProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto.$Properties} message SessionResponseProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        SessionResponseProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a SessionResponseProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.SessionResponseProto & tokens.SessionResponseProto.$Shape} SessionResponseProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SessionResponseProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.SessionResponseProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sessionId = value;\n                        else\n                            delete message.sessionId;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.status = value;\n                        else\n                            delete message.status;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.sessionSeconds = value;\n                        else\n                            delete message.sessionSeconds;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.remainingSeconds = value;\n                        else\n                            delete message.remainingSeconds;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a SessionResponseProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.SessionResponseProto & tokens.SessionResponseProto.$Shape} SessionResponseProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        SessionResponseProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a SessionResponseProto message.\n         * @function verify\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        SessionResponseProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                if (!$util.isString(message.sessionId))\n                    return \"sessionId: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                if (!$util.isString(message.status))\n                    return \"status: string expected\";\n            if (message.sessionSeconds != null && $Object.hasOwnProperty.call(message, \"sessionSeconds\"))\n                if (!$util.isInteger(message.sessionSeconds) && !(message.sessionSeconds && $util.isInteger(message.sessionSeconds.low) && $util.isInteger(message.sessionSeconds.high)))\n                    return \"sessionSeconds: integer|Long expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            if (message.remainingSeconds != null && $Object.hasOwnProperty.call(message, \"remainingSeconds\"))\n                if (!$util.isInteger(message.remainingSeconds) && !(message.remainingSeconds && $util.isInteger(message.remainingSeconds.low) && $util.isInteger(message.remainingSeconds.high)))\n                    return \"remainingSeconds: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a SessionResponseProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.SessionResponseProto} SessionResponseProto\n         */\n        SessionResponseProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.SessionResponseProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.SessionResponseProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.SessionResponseProto();\n            if (object.sessionId != null)\n                if (typeof object.sessionId !== \"string\" || object.sessionId.length)\n                    message.sessionId = $String(object.sessionId);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.status != null)\n                if (typeof object.status !== \"string\" || object.status.length)\n                    message.status = $String(object.status);\n            if (object.sessionSeconds != null)\n                if (typeof object.sessionSeconds === \"object\" ? object.sessionSeconds.low || object.sessionSeconds.high : $Number(object.sessionSeconds) !== 0)\n                    if ($util.Long)\n                        message.sessionSeconds = $util.Long.fromValue(object.sessionSeconds, false);\n                    else if (typeof object.sessionSeconds === \"string\")\n                        message.sessionSeconds = $parseInt(object.sessionSeconds, 10);\n                    else if (typeof object.sessionSeconds === \"number\")\n                        message.sessionSeconds = object.sessionSeconds;\n                    else if (typeof object.sessionSeconds === \"object\")\n                        message.sessionSeconds = new $util.LongBits(object.sessionSeconds.low >>> 0, object.sessionSeconds.high >>> 0).toNumber();\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            if (object.remainingSeconds != null)\n                if (typeof object.remainingSeconds === \"object\" ? object.remainingSeconds.low || object.remainingSeconds.high : $Number(object.remainingSeconds) !== 0)\n                    if ($util.Long)\n                        message.remainingSeconds = $util.Long.fromValue(object.remainingSeconds, false);\n                    else if (typeof object.remainingSeconds === \"string\")\n                        message.remainingSeconds = $parseInt(object.remainingSeconds, 10);\n                    else if (typeof object.remainingSeconds === \"number\")\n                        message.remainingSeconds = object.remainingSeconds;\n                    else if (typeof object.remainingSeconds === \"object\")\n                        message.remainingSeconds = new $util.LongBits(object.remainingSeconds.low >>> 0, object.remainingSeconds.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a SessionResponseProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {tokens.SessionResponseProto} message SessionResponseProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        SessionResponseProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.sessionId = \"\";\n                object.channelName = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.status = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.sessionSeconds = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.sessionSeconds = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.remainingSeconds = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.remainingSeconds = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                object.sessionId = message.sessionId;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.status != null && $Object.hasOwnProperty.call(message, \"status\"))\n                object.status = message.status;\n            if (message.sessionSeconds != null && $Object.hasOwnProperty.call(message, \"sessionSeconds\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.sessionSeconds = typeof message.sessionSeconds === \"number\" ? $BigInt(message.sessionSeconds) : $util.Long.fromBits(message.sessionSeconds.low >>> 0, message.sessionSeconds.high >>> 0, false).toBigInt();\n                else if (typeof message.sessionSeconds === \"number\")\n                    object.sessionSeconds = options.longs === $String ? $String(message.sessionSeconds) : message.sessionSeconds;\n                else\n                    object.sessionSeconds = options.longs === $String ? $util.Long.prototype.toString.call(message.sessionSeconds) : options.longs === $Number ? new $util.LongBits(message.sessionSeconds.low >>> 0, message.sessionSeconds.high >>> 0).toNumber() : message.sessionSeconds;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            if (message.remainingSeconds != null && $Object.hasOwnProperty.call(message, \"remainingSeconds\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.remainingSeconds = typeof message.remainingSeconds === \"number\" ? $BigInt(message.remainingSeconds) : $util.Long.fromBits(message.remainingSeconds.low >>> 0, message.remainingSeconds.high >>> 0, false).toBigInt();\n                else if (typeof message.remainingSeconds === \"number\")\n                    object.remainingSeconds = options.longs === $String ? $String(message.remainingSeconds) : message.remainingSeconds;\n                else\n                    object.remainingSeconds = options.longs === $String ? $util.Long.prototype.toString.call(message.remainingSeconds) : options.longs === $Number ? new $util.LongBits(message.remainingSeconds.low >>> 0, message.remainingSeconds.high >>> 0).toNumber() : message.remainingSeconds;\n            return object;\n        };\n\n        /**\n         * Converts this SessionResponseProto to JSON.\n         * @function toJSON\n         * @memberof tokens.SessionResponseProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        SessionResponseProto.prototype.toJSON = function() {\n            return SessionResponseProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for SessionResponseProto\n         * @function getTypeUrl\n         * @memberof tokens.SessionResponseProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        SessionResponseProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.SessionResponseProto\";\n        };\n\n        return SessionResponseProto;\n    })();\n\n    tokens.DeepgramTokenProto = (function() {\n\n        /**\n         * Properties of a DeepgramTokenProto.\n         * @typedef {Object} tokens.DeepgramTokenProto.$Properties\n         * @property {string|null} [key] DeepgramTokenProto key\n         * @property {number|Long|null} [expiresAt] DeepgramTokenProto expiresAt\n         * @property {string|null} [channelName] DeepgramTokenProto channelName\n         * @property {string|null} [sessionId] DeepgramTokenProto sessionId\n         * @property {string|null} [callbackUrl] DeepgramTokenProto callbackUrl\n         * @property {string|null} [tag] DeepgramTokenProto tag\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeepgramTokenProto.\n         * @memberof tokens\n         * @interface IDeepgramTokenProto\n         * @augments tokens.DeepgramTokenProto.$Properties\n         * @deprecated Use tokens.DeepgramTokenProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeepgramTokenProto.\n         * @typedef {tokens.DeepgramTokenProto.$Properties} tokens.DeepgramTokenProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeepgramTokenProto.\n         * @memberof tokens\n         * @classdesc Represents a DeepgramTokenProto.\n         * @constructor\n         * @param {tokens.DeepgramTokenProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeepgramTokenProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeepgramTokenProto key.\n         * @member {string} key\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.key = \"\";\n\n        /**\n         * DeepgramTokenProto expiresAt.\n         * @member {number|Long} expiresAt\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.expiresAt = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeepgramTokenProto channelName.\n         * @member {string} channelName\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.channelName = \"\";\n\n        /**\n         * DeepgramTokenProto sessionId.\n         * @member {string} sessionId\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.sessionId = \"\";\n\n        /**\n         * DeepgramTokenProto callbackUrl.\n         * @member {string} callbackUrl\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.callbackUrl = \"\";\n\n        /**\n         * DeepgramTokenProto tag.\n         * @member {string} tag\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         */\n        DeepgramTokenProto.prototype.tag = \"\";\n\n        /**\n         * Creates a new DeepgramTokenProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.DeepgramTokenProto} DeepgramTokenProto instance\n         * @type {{\n         *   (properties: tokens.DeepgramTokenProto.$Shape): tokens.DeepgramTokenProto & tokens.DeepgramTokenProto.$Shape;\n         *   (properties?: tokens.DeepgramTokenProto.$Properties): tokens.DeepgramTokenProto;\n         * }}\n         */\n        DeepgramTokenProto.create = function(properties) {\n            return new DeepgramTokenProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeepgramTokenProto message. Does not implicitly {@link tokens.DeepgramTokenProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto.$Properties} message DeepgramTokenProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeepgramTokenProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.key != null && $Object.hasOwnProperty.call(message, \"key\") && message.key !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.key);\n            if (message.expiresAt != null && $Object.hasOwnProperty.call(message, \"expiresAt\") && (typeof message.expiresAt === \"object\" ? message.expiresAt.low || message.expiresAt.high : message.expiresAt !== 0))\n                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.expiresAt);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.channelName);\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\") && message.sessionId !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.sessionId);\n            if (message.callbackUrl != null && $Object.hasOwnProperty.call(message, \"callbackUrl\") && message.callbackUrl !== \"\")\n                writer.uint32(/* id 5, wireType 2 =*/42).string(message.callbackUrl);\n            if (message.tag != null && $Object.hasOwnProperty.call(message, \"tag\") && message.tag !== \"\")\n                writer.uint32(/* id 6, wireType 2 =*/50).string(message.tag);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeepgramTokenProto message, length delimited. Does not implicitly {@link tokens.DeepgramTokenProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto.$Properties} message DeepgramTokenProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeepgramTokenProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeepgramTokenProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.DeepgramTokenProto & tokens.DeepgramTokenProto.$Shape} DeepgramTokenProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeepgramTokenProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.DeepgramTokenProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.key = value;\n                        else\n                            delete message.key;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAt = value;\n                        else\n                            delete message.expiresAt;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sessionId = value;\n                        else\n                            delete message.sessionId;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.callbackUrl = value;\n                        else\n                            delete message.callbackUrl;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tag = value;\n                        else\n                            delete message.tag;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeepgramTokenProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.DeepgramTokenProto & tokens.DeepgramTokenProto.$Shape} DeepgramTokenProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeepgramTokenProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeepgramTokenProto message.\n         * @function verify\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeepgramTokenProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.key != null && $Object.hasOwnProperty.call(message, \"key\"))\n                if (!$util.isString(message.key))\n                    return \"key: string expected\";\n            if (message.expiresAt != null && $Object.hasOwnProperty.call(message, \"expiresAt\"))\n                if (!$util.isInteger(message.expiresAt) && !(message.expiresAt && $util.isInteger(message.expiresAt.low) && $util.isInteger(message.expiresAt.high)))\n                    return \"expiresAt: integer|Long expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                if (!$util.isString(message.sessionId))\n                    return \"sessionId: string expected\";\n            if (message.callbackUrl != null && $Object.hasOwnProperty.call(message, \"callbackUrl\"))\n                if (!$util.isString(message.callbackUrl))\n                    return \"callbackUrl: string expected\";\n            if (message.tag != null && $Object.hasOwnProperty.call(message, \"tag\"))\n                if (!$util.isString(message.tag))\n                    return \"tag: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeepgramTokenProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.DeepgramTokenProto} DeepgramTokenProto\n         */\n        DeepgramTokenProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.DeepgramTokenProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.DeepgramTokenProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.DeepgramTokenProto();\n            if (object.key != null)\n                if (typeof object.key !== \"string\" || object.key.length)\n                    message.key = $String(object.key);\n            if (object.expiresAt != null)\n                if (typeof object.expiresAt === \"object\" ? object.expiresAt.low || object.expiresAt.high : $Number(object.expiresAt) !== 0)\n                    if ($util.Long)\n                        message.expiresAt = $util.Long.fromValue(object.expiresAt, false);\n                    else if (typeof object.expiresAt === \"string\")\n                        message.expiresAt = $parseInt(object.expiresAt, 10);\n                    else if (typeof object.expiresAt === \"number\")\n                        message.expiresAt = object.expiresAt;\n                    else if (typeof object.expiresAt === \"object\")\n                        message.expiresAt = new $util.LongBits(object.expiresAt.low >>> 0, object.expiresAt.high >>> 0).toNumber();\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.sessionId != null)\n                if (typeof object.sessionId !== \"string\" || object.sessionId.length)\n                    message.sessionId = $String(object.sessionId);\n            if (object.callbackUrl != null)\n                if (typeof object.callbackUrl !== \"string\" || object.callbackUrl.length)\n                    message.callbackUrl = $String(object.callbackUrl);\n            if (object.tag != null)\n                if (typeof object.tag !== \"string\" || object.tag.length)\n                    message.tag = $String(object.tag);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeepgramTokenProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {tokens.DeepgramTokenProto} message DeepgramTokenProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeepgramTokenProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.key = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAt = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAt = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.channelName = \"\";\n                object.sessionId = \"\";\n                object.callbackUrl = \"\";\n                object.tag = \"\";\n            }\n            if (message.key != null && $Object.hasOwnProperty.call(message, \"key\"))\n                object.key = message.key;\n            if (message.expiresAt != null && $Object.hasOwnProperty.call(message, \"expiresAt\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAt = typeof message.expiresAt === \"number\" ? $BigInt(message.expiresAt) : $util.Long.fromBits(message.expiresAt.low >>> 0, message.expiresAt.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAt === \"number\")\n                    object.expiresAt = options.longs === $String ? $String(message.expiresAt) : message.expiresAt;\n                else\n                    object.expiresAt = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAt) : options.longs === $Number ? new $util.LongBits(message.expiresAt.low >>> 0, message.expiresAt.high >>> 0).toNumber() : message.expiresAt;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.sessionId != null && $Object.hasOwnProperty.call(message, \"sessionId\"))\n                object.sessionId = message.sessionId;\n            if (message.callbackUrl != null && $Object.hasOwnProperty.call(message, \"callbackUrl\"))\n                object.callbackUrl = message.callbackUrl;\n            if (message.tag != null && $Object.hasOwnProperty.call(message, \"tag\"))\n                object.tag = message.tag;\n            return object;\n        };\n\n        /**\n         * Converts this DeepgramTokenProto to JSON.\n         * @function toJSON\n         * @memberof tokens.DeepgramTokenProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeepgramTokenProto.prototype.toJSON = function() {\n            return DeepgramTokenProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeepgramTokenProto\n         * @function getTypeUrl\n         * @memberof tokens.DeepgramTokenProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeepgramTokenProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.DeepgramTokenProto\";\n        };\n\n        return DeepgramTokenProto;\n    })();\n\n    tokens.WorkerTokenClaimsProto = (function() {\n\n        /**\n         * Properties of a WorkerTokenClaimsProto.\n         * @typedef {Object} tokens.WorkerTokenClaimsProto.$Properties\n         * @property {string|null} [sub] WorkerTokenClaimsProto sub\n         * @property {string|null} [channel] WorkerTokenClaimsProto channel\n         * @property {string|null} [role] WorkerTokenClaimsProto role\n         * @property {number|Long|null} [iat] WorkerTokenClaimsProto iat\n         * @property {number|Long|null} [exp] WorkerTokenClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a WorkerTokenClaimsProto.\n         * @memberof tokens\n         * @interface IWorkerTokenClaimsProto\n         * @augments tokens.WorkerTokenClaimsProto.$Properties\n         * @deprecated Use tokens.WorkerTokenClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a WorkerTokenClaimsProto.\n         * @typedef {tokens.WorkerTokenClaimsProto.$Properties} tokens.WorkerTokenClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new WorkerTokenClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a WorkerTokenClaimsProto.\n         * @constructor\n         * @param {tokens.WorkerTokenClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const WorkerTokenClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * WorkerTokenClaimsProto sub.\n         * @member {string} sub\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.sub = \"\";\n\n        /**\n         * WorkerTokenClaimsProto channel.\n         * @member {string} channel\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.channel = \"\";\n\n        /**\n         * WorkerTokenClaimsProto role.\n         * @member {string} role\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.role = \"\";\n\n        /**\n         * WorkerTokenClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * WorkerTokenClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         */\n        WorkerTokenClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new WorkerTokenClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.WorkerTokenClaimsProto} WorkerTokenClaimsProto instance\n         * @type {{\n         *   (properties: tokens.WorkerTokenClaimsProto.$Shape): tokens.WorkerTokenClaimsProto & tokens.WorkerTokenClaimsProto.$Shape;\n         *   (properties?: tokens.WorkerTokenClaimsProto.$Properties): tokens.WorkerTokenClaimsProto;\n         * }}\n         */\n        WorkerTokenClaimsProto.create = function(properties) {\n            return new WorkerTokenClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified WorkerTokenClaimsProto message. Does not implicitly {@link tokens.WorkerTokenClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto.$Properties} message WorkerTokenClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerTokenClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\") && message.sub !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.sub);\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\") && message.channel !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.channel);\n            if (message.role != null && $Object.hasOwnProperty.call(message, \"role\") && message.role !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.role);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified WorkerTokenClaimsProto message, length delimited. Does not implicitly {@link tokens.WorkerTokenClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto.$Properties} message WorkerTokenClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        WorkerTokenClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a WorkerTokenClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.WorkerTokenClaimsProto & tokens.WorkerTokenClaimsProto.$Shape} WorkerTokenClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerTokenClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.WorkerTokenClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sub = value;\n                        else\n                            delete message.sub;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channel = value;\n                        else\n                            delete message.channel;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.role = value;\n                        else\n                            delete message.role;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a WorkerTokenClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.WorkerTokenClaimsProto & tokens.WorkerTokenClaimsProto.$Shape} WorkerTokenClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        WorkerTokenClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a WorkerTokenClaimsProto message.\n         * @function verify\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        WorkerTokenClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                if (!$util.isString(message.sub))\n                    return \"sub: string expected\";\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                if (!$util.isString(message.channel))\n                    return \"channel: string expected\";\n            if (message.role != null && $Object.hasOwnProperty.call(message, \"role\"))\n                if (!$util.isString(message.role))\n                    return \"role: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a WorkerTokenClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.WorkerTokenClaimsProto} WorkerTokenClaimsProto\n         */\n        WorkerTokenClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.WorkerTokenClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.WorkerTokenClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.WorkerTokenClaimsProto();\n            if (object.sub != null)\n                if (typeof object.sub !== \"string\" || object.sub.length)\n                    message.sub = $String(object.sub);\n            if (object.channel != null)\n                if (typeof object.channel !== \"string\" || object.channel.length)\n                    message.channel = $String(object.channel);\n            if (object.role != null)\n                if (typeof object.role !== \"string\" || object.role.length)\n                    message.role = $String(object.role);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a WorkerTokenClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {tokens.WorkerTokenClaimsProto} message WorkerTokenClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        WorkerTokenClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.sub = \"\";\n                object.channel = \"\";\n                object.role = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                object.sub = message.sub;\n            if (message.channel != null && $Object.hasOwnProperty.call(message, \"channel\"))\n                object.channel = message.channel;\n            if (message.role != null && $Object.hasOwnProperty.call(message, \"role\"))\n                object.role = message.role;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this WorkerTokenClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        WorkerTokenClaimsProto.prototype.toJSON = function() {\n            return WorkerTokenClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for WorkerTokenClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.WorkerTokenClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        WorkerTokenClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.WorkerTokenClaimsProto\";\n        };\n\n        return WorkerTokenClaimsProto;\n    })();\n\n    tokens.DeviceEnrollmentClaimsProto = (function() {\n\n        /**\n         * Properties of a DeviceEnrollmentClaimsProto.\n         * @typedef {Object} tokens.DeviceEnrollmentClaimsProto.$Properties\n         * @property {string|null} [typ] DeviceEnrollmentClaimsProto typ\n         * @property {string|null} [jti] DeviceEnrollmentClaimsProto jti\n         * @property {number|Long|null} [tid] DeviceEnrollmentClaimsProto tid\n         * @property {string|null} [chn] DeviceEnrollmentClaimsProto chn\n         * @property {string|null} [lbl] DeviceEnrollmentClaimsProto lbl\n         * @property {number|Long|null} [iat] DeviceEnrollmentClaimsProto iat\n         * @property {number|Long|null} [exp] DeviceEnrollmentClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceEnrollmentClaimsProto.\n         * @memberof tokens\n         * @interface IDeviceEnrollmentClaimsProto\n         * @augments tokens.DeviceEnrollmentClaimsProto.$Properties\n         * @deprecated Use tokens.DeviceEnrollmentClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceEnrollmentClaimsProto.\n         * @typedef {tokens.DeviceEnrollmentClaimsProto.$Properties} tokens.DeviceEnrollmentClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceEnrollmentClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a DeviceEnrollmentClaimsProto.\n         * @constructor\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceEnrollmentClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceEnrollmentClaimsProto typ.\n         * @member {string} typ\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.typ = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto jti.\n         * @member {string} jti\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.jti = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto tid.\n         * @member {number|Long} tid\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.tid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceEnrollmentClaimsProto chn.\n         * @member {string} chn\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.chn = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto lbl.\n         * @member {string} lbl\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.lbl = \"\";\n\n        /**\n         * DeviceEnrollmentClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceEnrollmentClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         */\n        DeviceEnrollmentClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceEnrollmentClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.DeviceEnrollmentClaimsProto} DeviceEnrollmentClaimsProto instance\n         * @type {{\n         *   (properties: tokens.DeviceEnrollmentClaimsProto.$Shape): tokens.DeviceEnrollmentClaimsProto & tokens.DeviceEnrollmentClaimsProto.$Shape;\n         *   (properties?: tokens.DeviceEnrollmentClaimsProto.$Properties): tokens.DeviceEnrollmentClaimsProto;\n         * }}\n         */\n        DeviceEnrollmentClaimsProto.create = function(properties) {\n            return new DeviceEnrollmentClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentClaimsProto message. Does not implicitly {@link tokens.DeviceEnrollmentClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties} message DeviceEnrollmentClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\") && message.typ !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.typ);\n            if (message.jti != null && $Object.hasOwnProperty.call(message, \"jti\") && message.jti !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.jti);\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\") && (typeof message.tid === \"object\" ? message.tid.low || message.tid.high : message.tid !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tid);\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\") && message.chn !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.chn);\n            if (message.lbl != null && $Object.hasOwnProperty.call(message, \"lbl\") && message.lbl !== \"\")\n                writer.uint32(/* id 5, wireType 2 =*/42).string(message.lbl);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentClaimsProto message, length delimited. Does not implicitly {@link tokens.DeviceEnrollmentClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto.$Properties} message DeviceEnrollmentClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.DeviceEnrollmentClaimsProto & tokens.DeviceEnrollmentClaimsProto.$Shape} DeviceEnrollmentClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.DeviceEnrollmentClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.typ = value;\n                        else\n                            delete message.typ;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.jti = value;\n                        else\n                            delete message.jti;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tid = value;\n                        else\n                            delete message.tid;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.chn = value;\n                        else\n                            delete message.chn;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lbl = value;\n                        else\n                            delete message.lbl;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.DeviceEnrollmentClaimsProto & tokens.DeviceEnrollmentClaimsProto.$Shape} DeviceEnrollmentClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceEnrollmentClaimsProto message.\n         * @function verify\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceEnrollmentClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                if (!$util.isString(message.typ))\n                    return \"typ: string expected\";\n            if (message.jti != null && $Object.hasOwnProperty.call(message, \"jti\"))\n                if (!$util.isString(message.jti))\n                    return \"jti: string expected\";\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (!$util.isInteger(message.tid) && !(message.tid && $util.isInteger(message.tid.low) && $util.isInteger(message.tid.high)))\n                    return \"tid: integer|Long expected\";\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                if (!$util.isString(message.chn))\n                    return \"chn: string expected\";\n            if (message.lbl != null && $Object.hasOwnProperty.call(message, \"lbl\"))\n                if (!$util.isString(message.lbl))\n                    return \"lbl: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceEnrollmentClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.DeviceEnrollmentClaimsProto} DeviceEnrollmentClaimsProto\n         */\n        DeviceEnrollmentClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.DeviceEnrollmentClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.DeviceEnrollmentClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.DeviceEnrollmentClaimsProto();\n            if (object.typ != null)\n                if (typeof object.typ !== \"string\" || object.typ.length)\n                    message.typ = $String(object.typ);\n            if (object.jti != null)\n                if (typeof object.jti !== \"string\" || object.jti.length)\n                    message.jti = $String(object.jti);\n            if (object.tid != null)\n                if (typeof object.tid === \"object\" ? object.tid.low || object.tid.high : $Number(object.tid) !== 0)\n                    if ($util.Long)\n                        message.tid = $util.Long.fromValue(object.tid, false);\n                    else if (typeof object.tid === \"string\")\n                        message.tid = $parseInt(object.tid, 10);\n                    else if (typeof object.tid === \"number\")\n                        message.tid = object.tid;\n                    else if (typeof object.tid === \"object\")\n                        message.tid = new $util.LongBits(object.tid.low >>> 0, object.tid.high >>> 0).toNumber();\n            if (object.chn != null)\n                if (typeof object.chn !== \"string\" || object.chn.length)\n                    message.chn = $String(object.chn);\n            if (object.lbl != null)\n                if (typeof object.lbl !== \"string\" || object.lbl.length)\n                    message.lbl = $String(object.lbl);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceEnrollmentClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {tokens.DeviceEnrollmentClaimsProto} message DeviceEnrollmentClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceEnrollmentClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.typ = \"\";\n                object.jti = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tid = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tid = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.chn = \"\";\n                object.lbl = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                object.typ = message.typ;\n            if (message.jti != null && $Object.hasOwnProperty.call(message, \"jti\"))\n                object.jti = message.jti;\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tid = typeof message.tid === \"number\" ? $BigInt(message.tid) : $util.Long.fromBits(message.tid.low >>> 0, message.tid.high >>> 0, false).toBigInt();\n                else if (typeof message.tid === \"number\")\n                    object.tid = options.longs === $String ? $String(message.tid) : message.tid;\n                else\n                    object.tid = options.longs === $String ? $util.Long.prototype.toString.call(message.tid) : options.longs === $Number ? new $util.LongBits(message.tid.low >>> 0, message.tid.high >>> 0).toNumber() : message.tid;\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                object.chn = message.chn;\n            if (message.lbl != null && $Object.hasOwnProperty.call(message, \"lbl\"))\n                object.lbl = message.lbl;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceEnrollmentClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceEnrollmentClaimsProto.prototype.toJSON = function() {\n            return DeviceEnrollmentClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceEnrollmentClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.DeviceEnrollmentClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceEnrollmentClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.DeviceEnrollmentClaimsProto\";\n        };\n\n        return DeviceEnrollmentClaimsProto;\n    })();\n\n    tokens.DeviceAuthClaimsProto = (function() {\n\n        /**\n         * Properties of a DeviceAuthClaimsProto.\n         * @typedef {Object} tokens.DeviceAuthClaimsProto.$Properties\n         * @property {string|null} [typ] DeviceAuthClaimsProto typ\n         * @property {string|null} [sub] DeviceAuthClaimsProto sub\n         * @property {number|Long|null} [tid] DeviceAuthClaimsProto tid\n         * @property {string|null} [chn] DeviceAuthClaimsProto chn\n         * @property {number|Long|null} [iat] DeviceAuthClaimsProto iat\n         * @property {number|Long|null} [exp] DeviceAuthClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceAuthClaimsProto.\n         * @memberof tokens\n         * @interface IDeviceAuthClaimsProto\n         * @augments tokens.DeviceAuthClaimsProto.$Properties\n         * @deprecated Use tokens.DeviceAuthClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceAuthClaimsProto.\n         * @typedef {tokens.DeviceAuthClaimsProto.$Properties} tokens.DeviceAuthClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceAuthClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a DeviceAuthClaimsProto.\n         * @constructor\n         * @param {tokens.DeviceAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceAuthClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceAuthClaimsProto typ.\n         * @member {string} typ\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.typ = \"\";\n\n        /**\n         * DeviceAuthClaimsProto sub.\n         * @member {string} sub\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.sub = \"\";\n\n        /**\n         * DeviceAuthClaimsProto tid.\n         * @member {number|Long} tid\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.tid = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceAuthClaimsProto chn.\n         * @member {string} chn\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.chn = \"\";\n\n        /**\n         * DeviceAuthClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceAuthClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         */\n        DeviceAuthClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceAuthClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.DeviceAuthClaimsProto} DeviceAuthClaimsProto instance\n         * @type {{\n         *   (properties: tokens.DeviceAuthClaimsProto.$Shape): tokens.DeviceAuthClaimsProto & tokens.DeviceAuthClaimsProto.$Shape;\n         *   (properties?: tokens.DeviceAuthClaimsProto.$Properties): tokens.DeviceAuthClaimsProto;\n         * }}\n         */\n        DeviceAuthClaimsProto.create = function(properties) {\n            return new DeviceAuthClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceAuthClaimsProto message. Does not implicitly {@link tokens.DeviceAuthClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto.$Properties} message DeviceAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceAuthClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\") && message.typ !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.typ);\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\") && message.sub !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.sub);\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\") && (typeof message.tid === \"object\" ? message.tid.low || message.tid.high : message.tid !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tid);\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\") && message.chn !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.chn);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceAuthClaimsProto message, length delimited. Does not implicitly {@link tokens.DeviceAuthClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto.$Properties} message DeviceAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceAuthClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceAuthClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.DeviceAuthClaimsProto & tokens.DeviceAuthClaimsProto.$Shape} DeviceAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceAuthClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.DeviceAuthClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.typ = value;\n                        else\n                            delete message.typ;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sub = value;\n                        else\n                            delete message.sub;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tid = value;\n                        else\n                            delete message.tid;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.chn = value;\n                        else\n                            delete message.chn;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceAuthClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.DeviceAuthClaimsProto & tokens.DeviceAuthClaimsProto.$Shape} DeviceAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceAuthClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceAuthClaimsProto message.\n         * @function verify\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceAuthClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                if (!$util.isString(message.typ))\n                    return \"typ: string expected\";\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                if (!$util.isString(message.sub))\n                    return \"sub: string expected\";\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (!$util.isInteger(message.tid) && !(message.tid && $util.isInteger(message.tid.low) && $util.isInteger(message.tid.high)))\n                    return \"tid: integer|Long expected\";\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                if (!$util.isString(message.chn))\n                    return \"chn: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceAuthClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.DeviceAuthClaimsProto} DeviceAuthClaimsProto\n         */\n        DeviceAuthClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.DeviceAuthClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.DeviceAuthClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.DeviceAuthClaimsProto();\n            if (object.typ != null)\n                if (typeof object.typ !== \"string\" || object.typ.length)\n                    message.typ = $String(object.typ);\n            if (object.sub != null)\n                if (typeof object.sub !== \"string\" || object.sub.length)\n                    message.sub = $String(object.sub);\n            if (object.tid != null)\n                if (typeof object.tid === \"object\" ? object.tid.low || object.tid.high : $Number(object.tid) !== 0)\n                    if ($util.Long)\n                        message.tid = $util.Long.fromValue(object.tid, false);\n                    else if (typeof object.tid === \"string\")\n                        message.tid = $parseInt(object.tid, 10);\n                    else if (typeof object.tid === \"number\")\n                        message.tid = object.tid;\n                    else if (typeof object.tid === \"object\")\n                        message.tid = new $util.LongBits(object.tid.low >>> 0, object.tid.high >>> 0).toNumber();\n            if (object.chn != null)\n                if (typeof object.chn !== \"string\" || object.chn.length)\n                    message.chn = $String(object.chn);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceAuthClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {tokens.DeviceAuthClaimsProto} message DeviceAuthClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceAuthClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.typ = \"\";\n                object.sub = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tid = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tid = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.chn = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                object.typ = message.typ;\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                object.sub = message.sub;\n            if (message.tid != null && $Object.hasOwnProperty.call(message, \"tid\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tid = typeof message.tid === \"number\" ? $BigInt(message.tid) : $util.Long.fromBits(message.tid.low >>> 0, message.tid.high >>> 0, false).toBigInt();\n                else if (typeof message.tid === \"number\")\n                    object.tid = options.longs === $String ? $String(message.tid) : message.tid;\n                else\n                    object.tid = options.longs === $String ? $util.Long.prototype.toString.call(message.tid) : options.longs === $Number ? new $util.LongBits(message.tid.low >>> 0, message.tid.high >>> 0).toNumber() : message.tid;\n            if (message.chn != null && $Object.hasOwnProperty.call(message, \"chn\"))\n                object.chn = message.chn;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceAuthClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceAuthClaimsProto.prototype.toJSON = function() {\n            return DeviceAuthClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceAuthClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.DeviceAuthClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceAuthClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.DeviceAuthClaimsProto\";\n        };\n\n        return DeviceAuthClaimsProto;\n    })();\n\n    tokens.UserAuthClaimsProto = (function() {\n\n        /**\n         * Properties of a UserAuthClaimsProto.\n         * @typedef {Object} tokens.UserAuthClaimsProto.$Properties\n         * @property {string|null} [typ] UserAuthClaimsProto typ\n         * @property {string|null} [sub] UserAuthClaimsProto sub\n         * @property {string|null} [email] UserAuthClaimsProto email\n         * @property {string|null} [name] UserAuthClaimsProto name\n         * @property {number|Long|null} [iat] UserAuthClaimsProto iat\n         * @property {number|Long|null} [exp] UserAuthClaimsProto exp\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a UserAuthClaimsProto.\n         * @memberof tokens\n         * @interface IUserAuthClaimsProto\n         * @augments tokens.UserAuthClaimsProto.$Properties\n         * @deprecated Use tokens.UserAuthClaimsProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a UserAuthClaimsProto.\n         * @typedef {tokens.UserAuthClaimsProto.$Properties} tokens.UserAuthClaimsProto.$Shape\n         */\n\n        /**\n         * Constructs a new UserAuthClaimsProto.\n         * @memberof tokens\n         * @classdesc Represents a UserAuthClaimsProto.\n         * @constructor\n         * @param {tokens.UserAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const UserAuthClaimsProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * UserAuthClaimsProto typ.\n         * @member {string} typ\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.typ = \"\";\n\n        /**\n         * UserAuthClaimsProto sub.\n         * @member {string} sub\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.sub = \"\";\n\n        /**\n         * UserAuthClaimsProto email.\n         * @member {string} email\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.email = \"\";\n\n        /**\n         * UserAuthClaimsProto name.\n         * @member {string} name\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.name = \"\";\n\n        /**\n         * UserAuthClaimsProto iat.\n         * @member {number|Long} iat\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.iat = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * UserAuthClaimsProto exp.\n         * @member {number|Long} exp\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         */\n        UserAuthClaimsProto.prototype.exp = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new UserAuthClaimsProto instance using the specified properties.\n         * @function create\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto.$Properties=} [properties] Properties to set\n         * @returns {tokens.UserAuthClaimsProto} UserAuthClaimsProto instance\n         * @type {{\n         *   (properties: tokens.UserAuthClaimsProto.$Shape): tokens.UserAuthClaimsProto & tokens.UserAuthClaimsProto.$Shape;\n         *   (properties?: tokens.UserAuthClaimsProto.$Properties): tokens.UserAuthClaimsProto;\n         * }}\n         */\n        UserAuthClaimsProto.create = function(properties) {\n            return new UserAuthClaimsProto(properties);\n        };\n\n        /**\n         * Encodes the specified UserAuthClaimsProto message. Does not implicitly {@link tokens.UserAuthClaimsProto.verify|verify} messages.\n         * @function encode\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto.$Properties} message UserAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserAuthClaimsProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\") && message.typ !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.typ);\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\") && message.sub !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.sub);\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\") && message.email !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.email);\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.name);\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\") && (typeof message.iat === \"object\" ? message.iat.low || message.iat.high : message.iat !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.iat);\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\") && (typeof message.exp === \"object\" ? message.exp.low || message.exp.high : message.exp !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.exp);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified UserAuthClaimsProto message, length delimited. Does not implicitly {@link tokens.UserAuthClaimsProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto.$Properties} message UserAuthClaimsProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        UserAuthClaimsProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a UserAuthClaimsProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {tokens.UserAuthClaimsProto & tokens.UserAuthClaimsProto.$Shape} UserAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserAuthClaimsProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.tokens.UserAuthClaimsProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.typ = value;\n                        else\n                            delete message.typ;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.sub = value;\n                        else\n                            delete message.sub;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.email = value;\n                        else\n                            delete message.email;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.iat = value;\n                        else\n                            delete message.iat;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.exp = value;\n                        else\n                            delete message.exp;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a UserAuthClaimsProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {tokens.UserAuthClaimsProto & tokens.UserAuthClaimsProto.$Shape} UserAuthClaimsProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        UserAuthClaimsProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a UserAuthClaimsProto message.\n         * @function verify\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        UserAuthClaimsProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                if (!$util.isString(message.typ))\n                    return \"typ: string expected\";\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                if (!$util.isString(message.sub))\n                    return \"sub: string expected\";\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                if (!$util.isString(message.email))\n                    return \"email: string expected\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (!$util.isInteger(message.iat) && !(message.iat && $util.isInteger(message.iat.low) && $util.isInteger(message.iat.high)))\n                    return \"iat: integer|Long expected\";\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (!$util.isInteger(message.exp) && !(message.exp && $util.isInteger(message.exp.low) && $util.isInteger(message.exp.high)))\n                    return \"exp: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a UserAuthClaimsProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {tokens.UserAuthClaimsProto} UserAuthClaimsProto\n         */\n        UserAuthClaimsProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.tokens.UserAuthClaimsProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".tokens.UserAuthClaimsProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.tokens.UserAuthClaimsProto();\n            if (object.typ != null)\n                if (typeof object.typ !== \"string\" || object.typ.length)\n                    message.typ = $String(object.typ);\n            if (object.sub != null)\n                if (typeof object.sub !== \"string\" || object.sub.length)\n                    message.sub = $String(object.sub);\n            if (object.email != null)\n                if (typeof object.email !== \"string\" || object.email.length)\n                    message.email = $String(object.email);\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            if (object.iat != null)\n                if (typeof object.iat === \"object\" ? object.iat.low || object.iat.high : $Number(object.iat) !== 0)\n                    if ($util.Long)\n                        message.iat = $util.Long.fromValue(object.iat, false);\n                    else if (typeof object.iat === \"string\")\n                        message.iat = $parseInt(object.iat, 10);\n                    else if (typeof object.iat === \"number\")\n                        message.iat = object.iat;\n                    else if (typeof object.iat === \"object\")\n                        message.iat = new $util.LongBits(object.iat.low >>> 0, object.iat.high >>> 0).toNumber();\n            if (object.exp != null)\n                if (typeof object.exp === \"object\" ? object.exp.low || object.exp.high : $Number(object.exp) !== 0)\n                    if ($util.Long)\n                        message.exp = $util.Long.fromValue(object.exp, false);\n                    else if (typeof object.exp === \"string\")\n                        message.exp = $parseInt(object.exp, 10);\n                    else if (typeof object.exp === \"number\")\n                        message.exp = object.exp;\n                    else if (typeof object.exp === \"object\")\n                        message.exp = new $util.LongBits(object.exp.low >>> 0, object.exp.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a UserAuthClaimsProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {tokens.UserAuthClaimsProto} message UserAuthClaimsProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        UserAuthClaimsProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.typ = \"\";\n                object.sub = \"\";\n                object.email = \"\";\n                object.name = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.iat = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.iat = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.exp = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.exp = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.typ != null && $Object.hasOwnProperty.call(message, \"typ\"))\n                object.typ = message.typ;\n            if (message.sub != null && $Object.hasOwnProperty.call(message, \"sub\"))\n                object.sub = message.sub;\n            if (message.email != null && $Object.hasOwnProperty.call(message, \"email\"))\n                object.email = message.email;\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            if (message.iat != null && $Object.hasOwnProperty.call(message, \"iat\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.iat = typeof message.iat === \"number\" ? $BigInt(message.iat) : $util.Long.fromBits(message.iat.low >>> 0, message.iat.high >>> 0, false).toBigInt();\n                else if (typeof message.iat === \"number\")\n                    object.iat = options.longs === $String ? $String(message.iat) : message.iat;\n                else\n                    object.iat = options.longs === $String ? $util.Long.prototype.toString.call(message.iat) : options.longs === $Number ? new $util.LongBits(message.iat.low >>> 0, message.iat.high >>> 0).toNumber() : message.iat;\n            if (message.exp != null && $Object.hasOwnProperty.call(message, \"exp\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.exp = typeof message.exp === \"number\" ? $BigInt(message.exp) : $util.Long.fromBits(message.exp.low >>> 0, message.exp.high >>> 0, false).toBigInt();\n                else if (typeof message.exp === \"number\")\n                    object.exp = options.longs === $String ? $String(message.exp) : message.exp;\n                else\n                    object.exp = options.longs === $String ? $util.Long.prototype.toString.call(message.exp) : options.longs === $Number ? new $util.LongBits(message.exp.low >>> 0, message.exp.high >>> 0).toNumber() : message.exp;\n            return object;\n        };\n\n        /**\n         * Converts this UserAuthClaimsProto to JSON.\n         * @function toJSON\n         * @memberof tokens.UserAuthClaimsProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        UserAuthClaimsProto.prototype.toJSON = function() {\n            return UserAuthClaimsProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for UserAuthClaimsProto\n         * @function getTypeUrl\n         * @memberof tokens.UserAuthClaimsProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        UserAuthClaimsProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/tokens.UserAuthClaimsProto\";\n        };\n\n        return UserAuthClaimsProto;\n    })();\n\n    return tokens;\n})();\n\nexport const devices = $root.devices = (() => {\n\n    /**\n     * Namespace devices.\n     * @exports devices\n     * @namespace\n     */\n    const devices = {};\n\n    devices.DeviceProtoRow = (function() {\n\n        /**\n         * Properties of a DeviceProtoRow.\n         * @typedef {Object} devices.DeviceProtoRow.$Properties\n         * @property {string|null} [id] DeviceProtoRow id\n         * @property {number|Long|null} [tenantId] DeviceProtoRow tenantId\n         * @property {string|null} [channelName] DeviceProtoRow channelName\n         * @property {string|null} [label] DeviceProtoRow label\n         * @property {number|Long|null} [createdAtUnixMs] DeviceProtoRow createdAtUnixMs\n         * @property {number|Long|null} [lastUsedUnixMs] DeviceProtoRow lastUsedUnixMs\n         * @property {number|Long|null} [expiresAtUnixMs] DeviceProtoRow expiresAtUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceProtoRow.\n         * @memberof devices\n         * @interface IDeviceProtoRow\n         * @augments devices.DeviceProtoRow.$Properties\n         * @deprecated Use devices.DeviceProtoRow.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceProtoRow.\n         * @typedef {devices.DeviceProtoRow.$Properties} devices.DeviceProtoRow.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceProtoRow.\n         * @memberof devices\n         * @classdesc Represents a DeviceProtoRow.\n         * @constructor\n         * @param {devices.DeviceProtoRow.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceProtoRow = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceProtoRow id.\n         * @member {string} id\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.id = \"\";\n\n        /**\n         * DeviceProtoRow tenantId.\n         * @member {number|Long} tenantId\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceProtoRow channelName.\n         * @member {string} channelName\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.channelName = \"\";\n\n        /**\n         * DeviceProtoRow label.\n         * @member {string} label\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.label = \"\";\n\n        /**\n         * DeviceProtoRow createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceProtoRow lastUsedUnixMs.\n         * @member {number|Long} lastUsedUnixMs\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.lastUsedUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceProtoRow expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         */\n        DeviceProtoRow.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceProtoRow instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceProtoRow} DeviceProtoRow instance\n         * @type {{\n         *   (properties: devices.DeviceProtoRow.$Shape): devices.DeviceProtoRow & devices.DeviceProtoRow.$Shape;\n         *   (properties?: devices.DeviceProtoRow.$Properties): devices.DeviceProtoRow;\n         * }}\n         */\n        DeviceProtoRow.create = function(properties) {\n            return new DeviceProtoRow(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceProtoRow message. Does not implicitly {@link devices.DeviceProtoRow.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow.$Properties} message DeviceProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceProtoRow.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\") && message.id !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.id);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 2, wireType 0 =*/16).int64(message.tenantId);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 3, wireType 2 =*/26).string(message.channelName);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.label);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.createdAtUnixMs);\n            if (message.lastUsedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUsedUnixMs\") && (typeof message.lastUsedUnixMs === \"object\" ? message.lastUsedUnixMs.low || message.lastUsedUnixMs.high : message.lastUsedUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.lastUsedUnixMs);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.expiresAtUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceProtoRow message, length delimited. Does not implicitly {@link devices.DeviceProtoRow.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow.$Properties} message DeviceProtoRow message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceProtoRow.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceProtoRow message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceProtoRow & devices.DeviceProtoRow.$Shape} DeviceProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceProtoRow.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceProtoRow();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.id = value;\n                        else\n                            delete message.id;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.lastUsedUnixMs = value;\n                        else\n                            delete message.lastUsedUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceProtoRow message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceProtoRow & devices.DeviceProtoRow.$Shape} DeviceProtoRow\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceProtoRow.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceProtoRow message.\n         * @function verify\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceProtoRow.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                if (!$util.isString(message.id))\n                    return \"id: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.lastUsedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUsedUnixMs\"))\n                if (!$util.isInteger(message.lastUsedUnixMs) && !(message.lastUsedUnixMs && $util.isInteger(message.lastUsedUnixMs.low) && $util.isInteger(message.lastUsedUnixMs.high)))\n                    return \"lastUsedUnixMs: integer|Long expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceProtoRow message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceProtoRow} DeviceProtoRow\n         */\n        DeviceProtoRow.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceProtoRow)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceProtoRow: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceProtoRow();\n            if (object.id != null)\n                if (typeof object.id !== \"string\" || object.id.length)\n                    message.id = $String(object.id);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.lastUsedUnixMs != null)\n                if (typeof object.lastUsedUnixMs === \"object\" ? object.lastUsedUnixMs.low || object.lastUsedUnixMs.high : $Number(object.lastUsedUnixMs) !== 0)\n                    if ($util.Long)\n                        message.lastUsedUnixMs = $util.Long.fromValue(object.lastUsedUnixMs, false);\n                    else if (typeof object.lastUsedUnixMs === \"string\")\n                        message.lastUsedUnixMs = $parseInt(object.lastUsedUnixMs, 10);\n                    else if (typeof object.lastUsedUnixMs === \"number\")\n                        message.lastUsedUnixMs = object.lastUsedUnixMs;\n                    else if (typeof object.lastUsedUnixMs === \"object\")\n                        message.lastUsedUnixMs = new $util.LongBits(object.lastUsedUnixMs.low >>> 0, object.lastUsedUnixMs.high >>> 0).toNumber();\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceProtoRow message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {devices.DeviceProtoRow} message DeviceProtoRow\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceProtoRow.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.id = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.channelName = \"\";\n                object.label = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.lastUsedUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.lastUsedUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.id != null && $Object.hasOwnProperty.call(message, \"id\"))\n                object.id = message.id;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.lastUsedUnixMs != null && $Object.hasOwnProperty.call(message, \"lastUsedUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.lastUsedUnixMs = typeof message.lastUsedUnixMs === \"number\" ? $BigInt(message.lastUsedUnixMs) : $util.Long.fromBits(message.lastUsedUnixMs.low >>> 0, message.lastUsedUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.lastUsedUnixMs === \"number\")\n                    object.lastUsedUnixMs = options.longs === $String ? $String(message.lastUsedUnixMs) : message.lastUsedUnixMs;\n                else\n                    object.lastUsedUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.lastUsedUnixMs) : options.longs === $Number ? new $util.LongBits(message.lastUsedUnixMs.low >>> 0, message.lastUsedUnixMs.high >>> 0).toNumber() : message.lastUsedUnixMs;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceProtoRow to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceProtoRow\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceProtoRow.prototype.toJSON = function() {\n            return DeviceProtoRow.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceProtoRow\n         * @function getTypeUrl\n         * @memberof devices.DeviceProtoRow\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceProtoRow.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceProtoRow\";\n        };\n\n        return DeviceProtoRow;\n    })();\n\n    devices.DevicesProto = (function() {\n\n        /**\n         * Properties of a DevicesProto.\n         * @typedef {Object} devices.DevicesProto.$Properties\n         * @property {number|null} [schemaMinorVersion] DevicesProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] DevicesProto lastModifiedByCommit\n         * @property {Array.<devices.DeviceProtoRow.$Properties>|null} [devices] DevicesProto devices\n         * @property {Object.<string,number|Long>|null} [consumedEnrollmentTokens] DevicesProto consumedEnrollmentTokens\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DevicesProto.\n         * @memberof devices\n         * @interface IDevicesProto\n         * @augments devices.DevicesProto.$Properties\n         * @deprecated Use devices.DevicesProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DevicesProto.\n         * @typedef {devices.DevicesProto.$Properties} devices.DevicesProto.$Shape\n         */\n\n        /**\n         * Constructs a new DevicesProto.\n         * @memberof devices\n         * @classdesc Represents a DevicesProto.\n         * @constructor\n         * @param {devices.DevicesProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DevicesProto = function (properties) {\n            this.devices = [];\n            this.consumedEnrollmentTokens = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DevicesProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * DevicesProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * DevicesProto devices.\n         * @member {Array.<devices.DeviceProtoRow.$Properties>} devices\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.devices = $util.emptyArray;\n\n        /**\n         * DevicesProto consumedEnrollmentTokens.\n         * @member {Object.<string,number|Long>} consumedEnrollmentTokens\n         * @memberof devices.DevicesProto\n         * @instance\n         */\n        DevicesProto.prototype.consumedEnrollmentTokens = $util.emptyObject;\n\n        /**\n         * Creates a new DevicesProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DevicesProto} DevicesProto instance\n         * @type {{\n         *   (properties: devices.DevicesProto.$Shape): devices.DevicesProto & devices.DevicesProto.$Shape;\n         *   (properties?: devices.DevicesProto.$Properties): devices.DevicesProto;\n         * }}\n         */\n        DevicesProto.create = function(properties) {\n            return new DevicesProto(properties);\n        };\n\n        /**\n         * Encodes the specified DevicesProto message. Does not implicitly {@link devices.DevicesProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto.$Properties} message DevicesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DevicesProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.devices != null && message.devices.length)\n                for (let i = 0; i < message.devices.length; ++i)\n                    $root.devices.DeviceProtoRow.encode(message.devices[i], writer.uint32(/* id 3, wireType 2 =*/26).fork(), _depth + 1).ldelim();\n            if (message.consumedEnrollmentTokens != null && $Object.hasOwnProperty.call(message, \"consumedEnrollmentTokens\"))\n                for (let keys = $Object.keys(message.consumedEnrollmentTokens), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 4, wireType 2 =*/34).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 0 =*/16).int64(message.consumedEnrollmentTokens[keys[i]]).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DevicesProto message, length delimited. Does not implicitly {@link devices.DevicesProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto.$Properties} message DevicesProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DevicesProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DevicesProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DevicesProto & devices.DevicesProto.$Shape} DevicesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DevicesProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DevicesProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.devices && message.devices.length))\n                            message.devices = [];\n                        message.devices.push($root.devices.DeviceProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.consumedEnrollmentTokens === $util.emptyObject)\n                            message.consumedEnrollmentTokens = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = \"\";\n                        value = $util.Long ? $util.Long.fromNumber(0, false) : 0;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 2)\n                                    break;\n                                key = reader.stringVerify();\n                                continue;\n                            case 2:\n                                if (wireType !== 0)\n                                    break;\n                                value = reader.int64();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        if (key === \"__proto__\")\n                            $util.makeProp(message.consumedEnrollmentTokens, key);\n                        message.consumedEnrollmentTokens[key] = value;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DevicesProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DevicesProto & devices.DevicesProto.$Shape} DevicesProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DevicesProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DevicesProto message.\n         * @function verify\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DevicesProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.devices != null && $Object.hasOwnProperty.call(message, \"devices\")) {\n                if (!$Array.isArray(message.devices))\n                    return \"devices: array expected\";\n                for (let i = 0; i < message.devices.length; ++i) {\n                    let error = $root.devices.DeviceProtoRow.verify(message.devices[i], _depth + 1);\n                    if (error)\n                        return \"devices.\" + error;\n                }\n            }\n            if (message.consumedEnrollmentTokens != null && $Object.hasOwnProperty.call(message, \"consumedEnrollmentTokens\")) {\n                if (!$util.isObject(message.consumedEnrollmentTokens))\n                    return \"consumedEnrollmentTokens: object expected\";\n                let key = $Object.keys(message.consumedEnrollmentTokens);\n                for (let i = 0; i < key.length; ++i)\n                    if (!$util.isInteger(message.consumedEnrollmentTokens[key[i]]) && !(message.consumedEnrollmentTokens[key[i]] && $util.isInteger(message.consumedEnrollmentTokens[key[i]].low) && $util.isInteger(message.consumedEnrollmentTokens[key[i]].high)))\n                        return \"consumedEnrollmentTokens: integer|Long{k:string} expected\";\n            }\n            return null;\n        };\n\n        /**\n         * Creates a DevicesProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DevicesProto} DevicesProto\n         */\n        DevicesProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DevicesProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DevicesProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DevicesProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.devices) {\n                if (!$Array.isArray(object.devices))\n                    throw $TypeError(\".devices.DevicesProto.devices: array expected\");\n                message.devices = $Array(object.devices.length);\n                for (let i = 0; i < object.devices.length; ++i) {\n                    if (!$util.isObject(object.devices[i]))\n                        throw $TypeError(\".devices.DevicesProto.devices: object expected\");\n                    message.devices[i] = $root.devices.DeviceProtoRow.fromObject(object.devices[i], _depth + 1);\n                }\n            }\n            if (object.consumedEnrollmentTokens) {\n                if (!$util.isObject(object.consumedEnrollmentTokens))\n                    throw $TypeError(\".devices.DevicesProto.consumedEnrollmentTokens: object expected\");\n                message.consumedEnrollmentTokens = {};\n                for (let keys = $Object.keys(object.consumedEnrollmentTokens), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.consumedEnrollmentTokens, keys[i]);\n                    if ($util.Long)\n                        message.consumedEnrollmentTokens[keys[i]] = $util.Long.fromValue(object.consumedEnrollmentTokens[keys[i]], false);\n                    else if (typeof object.consumedEnrollmentTokens[keys[i]] === \"string\")\n                        message.consumedEnrollmentTokens[keys[i]] = $parseInt(object.consumedEnrollmentTokens[keys[i]], 10);\n                    else if (typeof object.consumedEnrollmentTokens[keys[i]] === \"number\")\n                        message.consumedEnrollmentTokens[keys[i]] = object.consumedEnrollmentTokens[keys[i]];\n                    else if (typeof object.consumedEnrollmentTokens[keys[i]] === \"object\")\n                        message.consumedEnrollmentTokens[keys[i]] = new $util.LongBits(object.consumedEnrollmentTokens[keys[i]].low >>> 0, object.consumedEnrollmentTokens[keys[i]].high >>> 0).toNumber();\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DevicesProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {devices.DevicesProto} message DevicesProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DevicesProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.devices = [];\n            if (options.objects || options.defaults)\n                object.consumedEnrollmentTokens = {};\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.devices && message.devices.length) {\n                object.devices = $Array(message.devices.length);\n                for (let j = 0; j < message.devices.length; ++j)\n                    object.devices[j] = $root.devices.DeviceProtoRow.toObject(message.devices[j], options, _depth + 1);\n            }\n            let keys2;\n            if (message.consumedEnrollmentTokens && (keys2 = $Object.keys(message.consumedEnrollmentTokens)).length) {\n                object.consumedEnrollmentTokens = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.consumedEnrollmentTokens, keys2[j]);\n                    if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                        object.consumedEnrollmentTokens[keys2[j]] = typeof message.consumedEnrollmentTokens[keys2[j]] === \"number\" ? $BigInt(message.consumedEnrollmentTokens[keys2[j]]) : $util.Long.fromBits(message.consumedEnrollmentTokens[keys2[j]].low >>> 0, message.consumedEnrollmentTokens[keys2[j]].high >>> 0, false).toBigInt();\n                    else if (typeof message.consumedEnrollmentTokens[keys2[j]] === \"number\")\n                        object.consumedEnrollmentTokens[keys2[j]] = options.longs === $String ? $String(message.consumedEnrollmentTokens[keys2[j]]) : message.consumedEnrollmentTokens[keys2[j]];\n                    else\n                        object.consumedEnrollmentTokens[keys2[j]] = options.longs === $String ? $util.Long.prototype.toString.call(message.consumedEnrollmentTokens[keys2[j]]) : options.longs === $Number ? new $util.LongBits(message.consumedEnrollmentTokens[keys2[j]].low >>> 0, message.consumedEnrollmentTokens[keys2[j]].high >>> 0).toNumber() : message.consumedEnrollmentTokens[keys2[j]];\n                }\n            }\n            return object;\n        };\n\n        /**\n         * Converts this DevicesProto to JSON.\n         * @function toJSON\n         * @memberof devices.DevicesProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DevicesProto.prototype.toJSON = function() {\n            return DevicesProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DevicesProto\n         * @function getTypeUrl\n         * @memberof devices.DevicesProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DevicesProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DevicesProto\";\n        };\n\n        return DevicesProto;\n    })();\n\n    devices.CreateDeviceEnrollmentLinkRequestProto = (function() {\n\n        /**\n         * Properties of a CreateDeviceEnrollmentLinkRequestProto.\n         * @typedef {Object} devices.CreateDeviceEnrollmentLinkRequestProto.$Properties\n         * @property {string|null} [channelName] CreateDeviceEnrollmentLinkRequestProto channelName\n         * @property {string|null} [label] CreateDeviceEnrollmentLinkRequestProto label\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a CreateDeviceEnrollmentLinkRequestProto.\n         * @memberof devices\n         * @interface ICreateDeviceEnrollmentLinkRequestProto\n         * @augments devices.CreateDeviceEnrollmentLinkRequestProto.$Properties\n         * @deprecated Use devices.CreateDeviceEnrollmentLinkRequestProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a CreateDeviceEnrollmentLinkRequestProto.\n         * @typedef {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties} devices.CreateDeviceEnrollmentLinkRequestProto.$Shape\n         */\n\n        /**\n         * Constructs a new CreateDeviceEnrollmentLinkRequestProto.\n         * @memberof devices\n         * @classdesc Represents a CreateDeviceEnrollmentLinkRequestProto.\n         * @constructor\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const CreateDeviceEnrollmentLinkRequestProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * CreateDeviceEnrollmentLinkRequestProto channelName.\n         * @member {string} channelName\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @instance\n         */\n        CreateDeviceEnrollmentLinkRequestProto.prototype.channelName = \"\";\n\n        /**\n         * CreateDeviceEnrollmentLinkRequestProto label.\n         * @member {string} label\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @instance\n         */\n        CreateDeviceEnrollmentLinkRequestProto.prototype.label = \"\";\n\n        /**\n         * Creates a new CreateDeviceEnrollmentLinkRequestProto instance using the specified properties.\n         * @function create\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties=} [properties] Properties to set\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto} CreateDeviceEnrollmentLinkRequestProto instance\n         * @type {{\n         *   (properties: devices.CreateDeviceEnrollmentLinkRequestProto.$Shape): devices.CreateDeviceEnrollmentLinkRequestProto & devices.CreateDeviceEnrollmentLinkRequestProto.$Shape;\n         *   (properties?: devices.CreateDeviceEnrollmentLinkRequestProto.$Properties): devices.CreateDeviceEnrollmentLinkRequestProto;\n         * }}\n         */\n        CreateDeviceEnrollmentLinkRequestProto.create = function(properties) {\n            return new CreateDeviceEnrollmentLinkRequestProto(properties);\n        };\n\n        /**\n         * Encodes the specified CreateDeviceEnrollmentLinkRequestProto message. Does not implicitly {@link devices.CreateDeviceEnrollmentLinkRequestProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties} message CreateDeviceEnrollmentLinkRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        CreateDeviceEnrollmentLinkRequestProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.channelName);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.label);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified CreateDeviceEnrollmentLinkRequestProto message, length delimited. Does not implicitly {@link devices.CreateDeviceEnrollmentLinkRequestProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto.$Properties} message CreateDeviceEnrollmentLinkRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        CreateDeviceEnrollmentLinkRequestProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a CreateDeviceEnrollmentLinkRequestProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto & devices.CreateDeviceEnrollmentLinkRequestProto.$Shape} CreateDeviceEnrollmentLinkRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        CreateDeviceEnrollmentLinkRequestProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.CreateDeviceEnrollmentLinkRequestProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a CreateDeviceEnrollmentLinkRequestProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto & devices.CreateDeviceEnrollmentLinkRequestProto.$Shape} CreateDeviceEnrollmentLinkRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        CreateDeviceEnrollmentLinkRequestProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a CreateDeviceEnrollmentLinkRequestProto message.\n         * @function verify\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        CreateDeviceEnrollmentLinkRequestProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates a CreateDeviceEnrollmentLinkRequestProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.CreateDeviceEnrollmentLinkRequestProto} CreateDeviceEnrollmentLinkRequestProto\n         */\n        CreateDeviceEnrollmentLinkRequestProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.CreateDeviceEnrollmentLinkRequestProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.CreateDeviceEnrollmentLinkRequestProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.CreateDeviceEnrollmentLinkRequestProto();\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a CreateDeviceEnrollmentLinkRequestProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {devices.CreateDeviceEnrollmentLinkRequestProto} message CreateDeviceEnrollmentLinkRequestProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        CreateDeviceEnrollmentLinkRequestProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.channelName = \"\";\n                object.label = \"\";\n            }\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            return object;\n        };\n\n        /**\n         * Converts this CreateDeviceEnrollmentLinkRequestProto to JSON.\n         * @function toJSON\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        CreateDeviceEnrollmentLinkRequestProto.prototype.toJSON = function() {\n            return CreateDeviceEnrollmentLinkRequestProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for CreateDeviceEnrollmentLinkRequestProto\n         * @function getTypeUrl\n         * @memberof devices.CreateDeviceEnrollmentLinkRequestProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        CreateDeviceEnrollmentLinkRequestProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.CreateDeviceEnrollmentLinkRequestProto\";\n        };\n\n        return CreateDeviceEnrollmentLinkRequestProto;\n    })();\n\n    devices.DeviceEnrollmentLinkProto = (function() {\n\n        /**\n         * Properties of a DeviceEnrollmentLinkProto.\n         * @typedef {Object} devices.DeviceEnrollmentLinkProto.$Properties\n         * @property {string|null} [enrollmentToken] DeviceEnrollmentLinkProto enrollmentToken\n         * @property {string|null} [enrollmentUrl] DeviceEnrollmentLinkProto enrollmentUrl\n         * @property {number|Long|null} [expiresInSeconds] DeviceEnrollmentLinkProto expiresInSeconds\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceEnrollmentLinkProto.\n         * @memberof devices\n         * @interface IDeviceEnrollmentLinkProto\n         * @augments devices.DeviceEnrollmentLinkProto.$Properties\n         * @deprecated Use devices.DeviceEnrollmentLinkProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceEnrollmentLinkProto.\n         * @typedef {devices.DeviceEnrollmentLinkProto.$Properties} devices.DeviceEnrollmentLinkProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceEnrollmentLinkProto.\n         * @memberof devices\n         * @classdesc Represents a DeviceEnrollmentLinkProto.\n         * @constructor\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceEnrollmentLinkProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceEnrollmentLinkProto enrollmentToken.\n         * @member {string} enrollmentToken\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         */\n        DeviceEnrollmentLinkProto.prototype.enrollmentToken = \"\";\n\n        /**\n         * DeviceEnrollmentLinkProto enrollmentUrl.\n         * @member {string} enrollmentUrl\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         */\n        DeviceEnrollmentLinkProto.prototype.enrollmentUrl = \"\";\n\n        /**\n         * DeviceEnrollmentLinkProto expiresInSeconds.\n         * @member {number|Long} expiresInSeconds\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         */\n        DeviceEnrollmentLinkProto.prototype.expiresInSeconds = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceEnrollmentLinkProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceEnrollmentLinkProto} DeviceEnrollmentLinkProto instance\n         * @type {{\n         *   (properties: devices.DeviceEnrollmentLinkProto.$Shape): devices.DeviceEnrollmentLinkProto & devices.DeviceEnrollmentLinkProto.$Shape;\n         *   (properties?: devices.DeviceEnrollmentLinkProto.$Properties): devices.DeviceEnrollmentLinkProto;\n         * }}\n         */\n        DeviceEnrollmentLinkProto.create = function(properties) {\n            return new DeviceEnrollmentLinkProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentLinkProto message. Does not implicitly {@link devices.DeviceEnrollmentLinkProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties} message DeviceEnrollmentLinkProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentLinkProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\") && message.enrollmentToken !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.enrollmentToken);\n            if (message.enrollmentUrl != null && $Object.hasOwnProperty.call(message, \"enrollmentUrl\") && message.enrollmentUrl !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.enrollmentUrl);\n            if (message.expiresInSeconds != null && $Object.hasOwnProperty.call(message, \"expiresInSeconds\") && (typeof message.expiresInSeconds === \"object\" ? message.expiresInSeconds.low || message.expiresInSeconds.high : message.expiresInSeconds !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.expiresInSeconds);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentLinkProto message, length delimited. Does not implicitly {@link devices.DeviceEnrollmentLinkProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto.$Properties} message DeviceEnrollmentLinkProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentLinkProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentLinkProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceEnrollmentLinkProto & devices.DeviceEnrollmentLinkProto.$Shape} DeviceEnrollmentLinkProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentLinkProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceEnrollmentLinkProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.enrollmentToken = value;\n                        else\n                            delete message.enrollmentToken;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.enrollmentUrl = value;\n                        else\n                            delete message.enrollmentUrl;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresInSeconds = value;\n                        else\n                            delete message.expiresInSeconds;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentLinkProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceEnrollmentLinkProto & devices.DeviceEnrollmentLinkProto.$Shape} DeviceEnrollmentLinkProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentLinkProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceEnrollmentLinkProto message.\n         * @function verify\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceEnrollmentLinkProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                if (!$util.isString(message.enrollmentToken))\n                    return \"enrollmentToken: string expected\";\n            if (message.enrollmentUrl != null && $Object.hasOwnProperty.call(message, \"enrollmentUrl\"))\n                if (!$util.isString(message.enrollmentUrl))\n                    return \"enrollmentUrl: string expected\";\n            if (message.expiresInSeconds != null && $Object.hasOwnProperty.call(message, \"expiresInSeconds\"))\n                if (!$util.isInteger(message.expiresInSeconds) && !(message.expiresInSeconds && $util.isInteger(message.expiresInSeconds.low) && $util.isInteger(message.expiresInSeconds.high)))\n                    return \"expiresInSeconds: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceEnrollmentLinkProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceEnrollmentLinkProto} DeviceEnrollmentLinkProto\n         */\n        DeviceEnrollmentLinkProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceEnrollmentLinkProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceEnrollmentLinkProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceEnrollmentLinkProto();\n            if (object.enrollmentToken != null)\n                if (typeof object.enrollmentToken !== \"string\" || object.enrollmentToken.length)\n                    message.enrollmentToken = $String(object.enrollmentToken);\n            if (object.enrollmentUrl != null)\n                if (typeof object.enrollmentUrl !== \"string\" || object.enrollmentUrl.length)\n                    message.enrollmentUrl = $String(object.enrollmentUrl);\n            if (object.expiresInSeconds != null)\n                if (typeof object.expiresInSeconds === \"object\" ? object.expiresInSeconds.low || object.expiresInSeconds.high : $Number(object.expiresInSeconds) !== 0)\n                    if ($util.Long)\n                        message.expiresInSeconds = $util.Long.fromValue(object.expiresInSeconds, false);\n                    else if (typeof object.expiresInSeconds === \"string\")\n                        message.expiresInSeconds = $parseInt(object.expiresInSeconds, 10);\n                    else if (typeof object.expiresInSeconds === \"number\")\n                        message.expiresInSeconds = object.expiresInSeconds;\n                    else if (typeof object.expiresInSeconds === \"object\")\n                        message.expiresInSeconds = new $util.LongBits(object.expiresInSeconds.low >>> 0, object.expiresInSeconds.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceEnrollmentLinkProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {devices.DeviceEnrollmentLinkProto} message DeviceEnrollmentLinkProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceEnrollmentLinkProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.enrollmentToken = \"\";\n                object.enrollmentUrl = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresInSeconds = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresInSeconds = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                object.enrollmentToken = message.enrollmentToken;\n            if (message.enrollmentUrl != null && $Object.hasOwnProperty.call(message, \"enrollmentUrl\"))\n                object.enrollmentUrl = message.enrollmentUrl;\n            if (message.expiresInSeconds != null && $Object.hasOwnProperty.call(message, \"expiresInSeconds\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresInSeconds = typeof message.expiresInSeconds === \"number\" ? $BigInt(message.expiresInSeconds) : $util.Long.fromBits(message.expiresInSeconds.low >>> 0, message.expiresInSeconds.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresInSeconds === \"number\")\n                    object.expiresInSeconds = options.longs === $String ? $String(message.expiresInSeconds) : message.expiresInSeconds;\n                else\n                    object.expiresInSeconds = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresInSeconds) : options.longs === $Number ? new $util.LongBits(message.expiresInSeconds.low >>> 0, message.expiresInSeconds.high >>> 0).toNumber() : message.expiresInSeconds;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceEnrollmentLinkProto to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceEnrollmentLinkProto.prototype.toJSON = function() {\n            return DeviceEnrollmentLinkProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceEnrollmentLinkProto\n         * @function getTypeUrl\n         * @memberof devices.DeviceEnrollmentLinkProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceEnrollmentLinkProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceEnrollmentLinkProto\";\n        };\n\n        return DeviceEnrollmentLinkProto;\n    })();\n\n    devices.EnrollDeviceRequestProto = (function() {\n\n        /**\n         * Properties of an EnrollDeviceRequestProto.\n         * @typedef {Object} devices.EnrollDeviceRequestProto.$Properties\n         * @property {string|null} [enrollmentToken] EnrollDeviceRequestProto enrollmentToken\n         * @property {string|null} [label] EnrollDeviceRequestProto label\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EnrollDeviceRequestProto.\n         * @memberof devices\n         * @interface IEnrollDeviceRequestProto\n         * @augments devices.EnrollDeviceRequestProto.$Properties\n         * @deprecated Use devices.EnrollDeviceRequestProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EnrollDeviceRequestProto.\n         * @typedef {devices.EnrollDeviceRequestProto.$Properties} devices.EnrollDeviceRequestProto.$Shape\n         */\n\n        /**\n         * Constructs a new EnrollDeviceRequestProto.\n         * @memberof devices\n         * @classdesc Represents an EnrollDeviceRequestProto.\n         * @constructor\n         * @param {devices.EnrollDeviceRequestProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EnrollDeviceRequestProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EnrollDeviceRequestProto enrollmentToken.\n         * @member {string} enrollmentToken\n         * @memberof devices.EnrollDeviceRequestProto\n         * @instance\n         */\n        EnrollDeviceRequestProto.prototype.enrollmentToken = \"\";\n\n        /**\n         * EnrollDeviceRequestProto label.\n         * @member {string} label\n         * @memberof devices.EnrollDeviceRequestProto\n         * @instance\n         */\n        EnrollDeviceRequestProto.prototype.label = \"\";\n\n        /**\n         * Creates a new EnrollDeviceRequestProto instance using the specified properties.\n         * @function create\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto.$Properties=} [properties] Properties to set\n         * @returns {devices.EnrollDeviceRequestProto} EnrollDeviceRequestProto instance\n         * @type {{\n         *   (properties: devices.EnrollDeviceRequestProto.$Shape): devices.EnrollDeviceRequestProto & devices.EnrollDeviceRequestProto.$Shape;\n         *   (properties?: devices.EnrollDeviceRequestProto.$Properties): devices.EnrollDeviceRequestProto;\n         * }}\n         */\n        EnrollDeviceRequestProto.create = function(properties) {\n            return new EnrollDeviceRequestProto(properties);\n        };\n\n        /**\n         * Encodes the specified EnrollDeviceRequestProto message. Does not implicitly {@link devices.EnrollDeviceRequestProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto.$Properties} message EnrollDeviceRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EnrollDeviceRequestProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\") && message.enrollmentToken !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.enrollmentToken);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.label);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EnrollDeviceRequestProto message, length delimited. Does not implicitly {@link devices.EnrollDeviceRequestProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto.$Properties} message EnrollDeviceRequestProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EnrollDeviceRequestProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EnrollDeviceRequestProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.EnrollDeviceRequestProto & devices.EnrollDeviceRequestProto.$Shape} EnrollDeviceRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EnrollDeviceRequestProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.EnrollDeviceRequestProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.enrollmentToken = value;\n                        else\n                            delete message.enrollmentToken;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EnrollDeviceRequestProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.EnrollDeviceRequestProto & devices.EnrollDeviceRequestProto.$Shape} EnrollDeviceRequestProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EnrollDeviceRequestProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EnrollDeviceRequestProto message.\n         * @function verify\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EnrollDeviceRequestProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                if (!$util.isString(message.enrollmentToken))\n                    return \"enrollmentToken: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates an EnrollDeviceRequestProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.EnrollDeviceRequestProto} EnrollDeviceRequestProto\n         */\n        EnrollDeviceRequestProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.EnrollDeviceRequestProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.EnrollDeviceRequestProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.EnrollDeviceRequestProto();\n            if (object.enrollmentToken != null)\n                if (typeof object.enrollmentToken !== \"string\" || object.enrollmentToken.length)\n                    message.enrollmentToken = $String(object.enrollmentToken);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EnrollDeviceRequestProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {devices.EnrollDeviceRequestProto} message EnrollDeviceRequestProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EnrollDeviceRequestProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.enrollmentToken = \"\";\n                object.label = \"\";\n            }\n            if (message.enrollmentToken != null && $Object.hasOwnProperty.call(message, \"enrollmentToken\"))\n                object.enrollmentToken = message.enrollmentToken;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            return object;\n        };\n\n        /**\n         * Converts this EnrollDeviceRequestProto to JSON.\n         * @function toJSON\n         * @memberof devices.EnrollDeviceRequestProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EnrollDeviceRequestProto.prototype.toJSON = function() {\n            return EnrollDeviceRequestProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EnrollDeviceRequestProto\n         * @function getTypeUrl\n         * @memberof devices.EnrollDeviceRequestProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EnrollDeviceRequestProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.EnrollDeviceRequestProto\";\n        };\n\n        return EnrollDeviceRequestProto;\n    })();\n\n    devices.DeviceEnrollmentResultProto = (function() {\n\n        /**\n         * Properties of a DeviceEnrollmentResultProto.\n         * @typedef {Object} devices.DeviceEnrollmentResultProto.$Properties\n         * @property {string|null} [deviceToken] DeviceEnrollmentResultProto deviceToken\n         * @property {string|null} [deviceId] DeviceEnrollmentResultProto deviceId\n         * @property {number|Long|null} [tenantId] DeviceEnrollmentResultProto tenantId\n         * @property {string|null} [tenantName] DeviceEnrollmentResultProto tenantName\n         * @property {string|null} [channelName] DeviceEnrollmentResultProto channelName\n         * @property {string|null} [label] DeviceEnrollmentResultProto label\n         * @property {number|Long|null} [expiresAtUnixMs] DeviceEnrollmentResultProto expiresAtUnixMs\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceEnrollmentResultProto.\n         * @memberof devices\n         * @interface IDeviceEnrollmentResultProto\n         * @augments devices.DeviceEnrollmentResultProto.$Properties\n         * @deprecated Use devices.DeviceEnrollmentResultProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceEnrollmentResultProto.\n         * @typedef {devices.DeviceEnrollmentResultProto.$Properties} devices.DeviceEnrollmentResultProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceEnrollmentResultProto.\n         * @memberof devices\n         * @classdesc Represents a DeviceEnrollmentResultProto.\n         * @constructor\n         * @param {devices.DeviceEnrollmentResultProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceEnrollmentResultProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceEnrollmentResultProto deviceToken.\n         * @member {string} deviceToken\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.deviceToken = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto deviceId.\n         * @member {string} deviceId\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.deviceId = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * DeviceEnrollmentResultProto tenantName.\n         * @member {string} tenantName\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.tenantName = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto channelName.\n         * @member {string} channelName\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.channelName = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto label.\n         * @member {string} label\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.label = \"\";\n\n        /**\n         * DeviceEnrollmentResultProto expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         */\n        DeviceEnrollmentResultProto.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * Creates a new DeviceEnrollmentResultProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceEnrollmentResultProto} DeviceEnrollmentResultProto instance\n         * @type {{\n         *   (properties: devices.DeviceEnrollmentResultProto.$Shape): devices.DeviceEnrollmentResultProto & devices.DeviceEnrollmentResultProto.$Shape;\n         *   (properties?: devices.DeviceEnrollmentResultProto.$Properties): devices.DeviceEnrollmentResultProto;\n         * }}\n         */\n        DeviceEnrollmentResultProto.create = function(properties) {\n            return new DeviceEnrollmentResultProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentResultProto message. Does not implicitly {@link devices.DeviceEnrollmentResultProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto.$Properties} message DeviceEnrollmentResultProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentResultProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.deviceToken != null && $Object.hasOwnProperty.call(message, \"deviceToken\") && message.deviceToken !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.deviceToken);\n            if (message.deviceId != null && $Object.hasOwnProperty.call(message, \"deviceId\") && message.deviceId !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.deviceId);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\") && message.tenantName !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.tenantName);\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\") && message.channelName !== \"\")\n                writer.uint32(/* id 5, wireType 2 =*/42).string(message.channelName);\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\") && message.label !== \"\")\n                writer.uint32(/* id 6, wireType 2 =*/50).string(message.label);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.expiresAtUnixMs);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceEnrollmentResultProto message, length delimited. Does not implicitly {@link devices.DeviceEnrollmentResultProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto.$Properties} message DeviceEnrollmentResultProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceEnrollmentResultProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentResultProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceEnrollmentResultProto & devices.DeviceEnrollmentResultProto.$Shape} DeviceEnrollmentResultProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentResultProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceEnrollmentResultProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.deviceToken = value;\n                        else\n                            delete message.deviceToken;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.deviceId = value;\n                        else\n                            delete message.deviceId;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.tenantName = value;\n                        else\n                            delete message.tenantName;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.channelName = value;\n                        else\n                            delete message.channelName;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.label = value;\n                        else\n                            delete message.label;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceEnrollmentResultProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceEnrollmentResultProto & devices.DeviceEnrollmentResultProto.$Shape} DeviceEnrollmentResultProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceEnrollmentResultProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceEnrollmentResultProto message.\n         * @function verify\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceEnrollmentResultProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.deviceToken != null && $Object.hasOwnProperty.call(message, \"deviceToken\"))\n                if (!$util.isString(message.deviceToken))\n                    return \"deviceToken: string expected\";\n            if (message.deviceId != null && $Object.hasOwnProperty.call(message, \"deviceId\"))\n                if (!$util.isString(message.deviceId))\n                    return \"deviceId: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                if (!$util.isString(message.tenantName))\n                    return \"tenantName: string expected\";\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                if (!$util.isString(message.channelName))\n                    return \"channelName: string expected\";\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                if (!$util.isString(message.label))\n                    return \"label: string expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            return null;\n        };\n\n        /**\n         * Creates a DeviceEnrollmentResultProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceEnrollmentResultProto} DeviceEnrollmentResultProto\n         */\n        DeviceEnrollmentResultProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceEnrollmentResultProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceEnrollmentResultProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceEnrollmentResultProto();\n            if (object.deviceToken != null)\n                if (typeof object.deviceToken !== \"string\" || object.deviceToken.length)\n                    message.deviceToken = $String(object.deviceToken);\n            if (object.deviceId != null)\n                if (typeof object.deviceId !== \"string\" || object.deviceId.length)\n                    message.deviceId = $String(object.deviceId);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.tenantName != null)\n                if (typeof object.tenantName !== \"string\" || object.tenantName.length)\n                    message.tenantName = $String(object.tenantName);\n            if (object.channelName != null)\n                if (typeof object.channelName !== \"string\" || object.channelName.length)\n                    message.channelName = $String(object.channelName);\n            if (object.label != null)\n                if (typeof object.label !== \"string\" || object.label.length)\n                    message.label = $String(object.label);\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceEnrollmentResultProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {devices.DeviceEnrollmentResultProto} message DeviceEnrollmentResultProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceEnrollmentResultProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults) {\n                object.deviceToken = \"\";\n                object.deviceId = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.tenantName = \"\";\n                object.channelName = \"\";\n                object.label = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.deviceToken != null && $Object.hasOwnProperty.call(message, \"deviceToken\"))\n                object.deviceToken = message.deviceToken;\n            if (message.deviceId != null && $Object.hasOwnProperty.call(message, \"deviceId\"))\n                object.deviceId = message.deviceId;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.tenantName != null && $Object.hasOwnProperty.call(message, \"tenantName\"))\n                object.tenantName = message.tenantName;\n            if (message.channelName != null && $Object.hasOwnProperty.call(message, \"channelName\"))\n                object.channelName = message.channelName;\n            if (message.label != null && $Object.hasOwnProperty.call(message, \"label\"))\n                object.label = message.label;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            return object;\n        };\n\n        /**\n         * Converts this DeviceEnrollmentResultProto to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceEnrollmentResultProto.prototype.toJSON = function() {\n            return DeviceEnrollmentResultProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceEnrollmentResultProto\n         * @function getTypeUrl\n         * @memberof devices.DeviceEnrollmentResultProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceEnrollmentResultProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceEnrollmentResultProto\";\n        };\n\n        return DeviceEnrollmentResultProto;\n    })();\n\n    devices.DeviceListProto = (function() {\n\n        /**\n         * Properties of a DeviceListProto.\n         * @typedef {Object} devices.DeviceListProto.$Properties\n         * @property {Array.<devices.DeviceProtoRow.$Properties>|null} [devices] DeviceListProto devices\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of a DeviceListProto.\n         * @memberof devices\n         * @interface IDeviceListProto\n         * @augments devices.DeviceListProto.$Properties\n         * @deprecated Use devices.DeviceListProto.$Properties instead.\n         */\n\n        /**\n         * Shape of a DeviceListProto.\n         * @typedef {devices.DeviceListProto.$Properties} devices.DeviceListProto.$Shape\n         */\n\n        /**\n         * Constructs a new DeviceListProto.\n         * @memberof devices\n         * @classdesc Represents a DeviceListProto.\n         * @constructor\n         * @param {devices.DeviceListProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const DeviceListProto = function (properties) {\n            this.devices = [];\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * DeviceListProto devices.\n         * @member {Array.<devices.DeviceProtoRow.$Properties>} devices\n         * @memberof devices.DeviceListProto\n         * @instance\n         */\n        DeviceListProto.prototype.devices = $util.emptyArray;\n\n        /**\n         * Creates a new DeviceListProto instance using the specified properties.\n         * @function create\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto.$Properties=} [properties] Properties to set\n         * @returns {devices.DeviceListProto} DeviceListProto instance\n         * @type {{\n         *   (properties: devices.DeviceListProto.$Shape): devices.DeviceListProto & devices.DeviceListProto.$Shape;\n         *   (properties?: devices.DeviceListProto.$Properties): devices.DeviceListProto;\n         * }}\n         */\n        DeviceListProto.create = function(properties) {\n            return new DeviceListProto(properties);\n        };\n\n        /**\n         * Encodes the specified DeviceListProto message. Does not implicitly {@link devices.DeviceListProto.verify|verify} messages.\n         * @function encode\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto.$Properties} message DeviceListProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceListProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.devices != null && message.devices.length)\n                for (let i = 0; i < message.devices.length; ++i)\n                    $root.devices.DeviceProtoRow.encode(message.devices[i], writer.uint32(/* id 1, wireType 2 =*/10).fork(), _depth + 1).ldelim();\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified DeviceListProto message, length delimited. Does not implicitly {@link devices.DeviceListProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto.$Properties} message DeviceListProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        DeviceListProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes a DeviceListProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {devices.DeviceListProto & devices.DeviceListProto.$Shape} DeviceListProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceListProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.devices.DeviceListProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.devices && message.devices.length))\n                            message.devices = [];\n                        message.devices.push($root.devices.DeviceProtoRow.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes a DeviceListProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {devices.DeviceListProto & devices.DeviceListProto.$Shape} DeviceListProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        DeviceListProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies a DeviceListProto message.\n         * @function verify\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        DeviceListProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.devices != null && $Object.hasOwnProperty.call(message, \"devices\")) {\n                if (!$Array.isArray(message.devices))\n                    return \"devices: array expected\";\n                for (let i = 0; i < message.devices.length; ++i) {\n                    let error = $root.devices.DeviceProtoRow.verify(message.devices[i], _depth + 1);\n                    if (error)\n                        return \"devices.\" + error;\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates a DeviceListProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {devices.DeviceListProto} DeviceListProto\n         */\n        DeviceListProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.devices.DeviceListProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".devices.DeviceListProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.devices.DeviceListProto();\n            if (object.devices) {\n                if (!$Array.isArray(object.devices))\n                    throw $TypeError(\".devices.DeviceListProto.devices: array expected\");\n                message.devices = $Array(object.devices.length);\n                for (let i = 0; i < object.devices.length; ++i) {\n                    if (!$util.isObject(object.devices[i]))\n                        throw $TypeError(\".devices.DeviceListProto.devices: object expected\");\n                    message.devices[i] = $root.devices.DeviceProtoRow.fromObject(object.devices[i], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from a DeviceListProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {devices.DeviceListProto} message DeviceListProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        DeviceListProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.devices = [];\n            if (message.devices && message.devices.length) {\n                object.devices = $Array(message.devices.length);\n                for (let j = 0; j < message.devices.length; ++j)\n                    object.devices[j] = $root.devices.DeviceProtoRow.toObject(message.devices[j], options, _depth + 1);\n            }\n            return object;\n        };\n\n        /**\n         * Converts this DeviceListProto to JSON.\n         * @function toJSON\n         * @memberof devices.DeviceListProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        DeviceListProto.prototype.toJSON = function() {\n            return DeviceListProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for DeviceListProto\n         * @function getTypeUrl\n         * @memberof devices.DeviceListProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        DeviceListProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/devices.DeviceListProto\";\n        };\n\n        return DeviceListProto;\n    })();\n\n    return devices;\n})();\n\nexport const entitlement = $root.entitlement = (() => {\n\n    /**\n     * Namespace entitlement.\n     * @exports entitlement\n     * @namespace\n     */\n    const entitlement = {};\n\n    /**\n     * EntitlementTransactionType enum.\n     * @name entitlement.EntitlementTransactionType\n     * @enum {number}\n     * @property {number} ENTITLEMENT_TRANSACTION_TYPE_REPLACING=0 ENTITLEMENT_TRANSACTION_TYPE_REPLACING value\n     * @property {number} ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING=1 ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING value\n     * @property {number} ENTITLEMENT_TRANSACTION_TYPE_LEASE=2 ENTITLEMENT_TRANSACTION_TYPE_LEASE value\n     */\n    entitlement.EntitlementTransactionType = (function() {\n        const valuesById = $Object.create(null), values = $Object.create(valuesById);\n        values[valuesById[0] = \"ENTITLEMENT_TRANSACTION_TYPE_REPLACING\"] = 0;\n        values[valuesById[1] = \"ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING\"] = 1;\n        values[valuesById[2] = \"ENTITLEMENT_TRANSACTION_TYPE_LEASE\"] = 2;\n        return values;\n    })();\n\n    entitlement.EntitlementDimensionProto = (function() {\n\n        /**\n         * Properties of an EntitlementDimensionProto.\n         * @typedef {Object} entitlement.EntitlementDimensionProto.$Properties\n         * @property {string|null} [name] EntitlementDimensionProto name\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EntitlementDimensionProto.\n         * @memberof entitlement\n         * @interface IEntitlementDimensionProto\n         * @augments entitlement.EntitlementDimensionProto.$Properties\n         * @deprecated Use entitlement.EntitlementDimensionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EntitlementDimensionProto.\n         * @typedef {entitlement.EntitlementDimensionProto.$Properties} entitlement.EntitlementDimensionProto.$Shape\n         */\n\n        /**\n         * Constructs a new EntitlementDimensionProto.\n         * @memberof entitlement\n         * @classdesc Represents an EntitlementDimensionProto.\n         * @constructor\n         * @param {entitlement.EntitlementDimensionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EntitlementDimensionProto = function (properties) {\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EntitlementDimensionProto name.\n         * @member {string} name\n         * @memberof entitlement.EntitlementDimensionProto\n         * @instance\n         */\n        EntitlementDimensionProto.prototype.name = \"\";\n\n        /**\n         * Creates a new EntitlementDimensionProto instance using the specified properties.\n         * @function create\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto.$Properties=} [properties] Properties to set\n         * @returns {entitlement.EntitlementDimensionProto} EntitlementDimensionProto instance\n         * @type {{\n         *   (properties: entitlement.EntitlementDimensionProto.$Shape): entitlement.EntitlementDimensionProto & entitlement.EntitlementDimensionProto.$Shape;\n         *   (properties?: entitlement.EntitlementDimensionProto.$Properties): entitlement.EntitlementDimensionProto;\n         * }}\n         */\n        EntitlementDimensionProto.create = function(properties) {\n            return new EntitlementDimensionProto(properties);\n        };\n\n        /**\n         * Encodes the specified EntitlementDimensionProto message. Does not implicitly {@link entitlement.EntitlementDimensionProto.verify|verify} messages.\n         * @function encode\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto.$Properties} message EntitlementDimensionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementDimensionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\") && message.name !== \"\")\n                writer.uint32(/* id 1, wireType 2 =*/10).string(message.name);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EntitlementDimensionProto message, length delimited. Does not implicitly {@link entitlement.EntitlementDimensionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto.$Properties} message EntitlementDimensionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementDimensionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EntitlementDimensionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {entitlement.EntitlementDimensionProto & entitlement.EntitlementDimensionProto.$Shape} EntitlementDimensionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementDimensionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.entitlement.EntitlementDimensionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.name = value;\n                        else\n                            delete message.name;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EntitlementDimensionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {entitlement.EntitlementDimensionProto & entitlement.EntitlementDimensionProto.$Shape} EntitlementDimensionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementDimensionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EntitlementDimensionProto message.\n         * @function verify\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EntitlementDimensionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                if (!$util.isString(message.name))\n                    return \"name: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates an EntitlementDimensionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {entitlement.EntitlementDimensionProto} EntitlementDimensionProto\n         */\n        EntitlementDimensionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.entitlement.EntitlementDimensionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".entitlement.EntitlementDimensionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.entitlement.EntitlementDimensionProto();\n            if (object.name != null)\n                if (typeof object.name !== \"string\" || object.name.length)\n                    message.name = $String(object.name);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EntitlementDimensionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {entitlement.EntitlementDimensionProto} message EntitlementDimensionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EntitlementDimensionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.defaults)\n                object.name = \"\";\n            if (message.name != null && $Object.hasOwnProperty.call(message, \"name\"))\n                object.name = message.name;\n            return object;\n        };\n\n        /**\n         * Converts this EntitlementDimensionProto to JSON.\n         * @function toJSON\n         * @memberof entitlement.EntitlementDimensionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EntitlementDimensionProto.prototype.toJSON = function() {\n            return EntitlementDimensionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EntitlementDimensionProto\n         * @function getTypeUrl\n         * @memberof entitlement.EntitlementDimensionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EntitlementDimensionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/entitlement.EntitlementDimensionProto\";\n        };\n\n        return EntitlementDimensionProto;\n    })();\n\n    entitlement.EntitlementTransactionProto = (function() {\n\n        /**\n         * Properties of an EntitlementTransactionProto.\n         * @typedef {Object} entitlement.EntitlementTransactionProto.$Properties\n         * @property {number|Long|null} [transactionId] EntitlementTransactionProto transactionId\n         * @property {entitlement.EntitlementTransactionType|null} [transactionType] EntitlementTransactionProto transactionType\n         * @property {Object.<string,number|Long>|null} [dimensionValues] EntitlementTransactionProto dimensionValues\n         * @property {string|null} [description] EntitlementTransactionProto description\n         * @property {number|Long|null} [createdAtUnixMs] EntitlementTransactionProto createdAtUnixMs\n         * @property {number|Long|null} [effectiveAtUnixMs] EntitlementTransactionProto effectiveAtUnixMs\n         * @property {number|Long|null} [expiresAtUnixMs] EntitlementTransactionProto expiresAtUnixMs\n         * @property {string|null} [invoiceNumber] EntitlementTransactionProto invoiceNumber\n         * @property {number|Long|null} [billingTransactionId] EntitlementTransactionProto billingTransactionId\n         * @property {Object.<string,string>|null} [labels] EntitlementTransactionProto labels\n         * @property {string|null} [userId] EntitlementTransactionProto userId\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EntitlementTransactionProto.\n         * @memberof entitlement\n         * @interface IEntitlementTransactionProto\n         * @augments entitlement.EntitlementTransactionProto.$Properties\n         * @deprecated Use entitlement.EntitlementTransactionProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EntitlementTransactionProto.\n         * @typedef {entitlement.EntitlementTransactionProto.$Properties} entitlement.EntitlementTransactionProto.$Shape\n         */\n\n        /**\n         * Constructs a new EntitlementTransactionProto.\n         * @memberof entitlement\n         * @classdesc Represents an EntitlementTransactionProto.\n         * @constructor\n         * @param {entitlement.EntitlementTransactionProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EntitlementTransactionProto = function (properties) {\n            this.dimensionValues = {};\n            this.labels = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EntitlementTransactionProto transactionId.\n         * @member {number|Long} transactionId\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.transactionId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto transactionType.\n         * @member {entitlement.EntitlementTransactionType} transactionType\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.transactionType = 0;\n\n        /**\n         * EntitlementTransactionProto dimensionValues.\n         * @member {Object.<string,number|Long>} dimensionValues\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.dimensionValues = $util.emptyObject;\n\n        /**\n         * EntitlementTransactionProto description.\n         * @member {string} description\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.description = \"\";\n\n        /**\n         * EntitlementTransactionProto createdAtUnixMs.\n         * @member {number|Long} createdAtUnixMs\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.createdAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto effectiveAtUnixMs.\n         * @member {number|Long} effectiveAtUnixMs\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.effectiveAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto expiresAtUnixMs.\n         * @member {number|Long} expiresAtUnixMs\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.expiresAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto invoiceNumber.\n         * @member {string} invoiceNumber\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.invoiceNumber = \"\";\n\n        /**\n         * EntitlementTransactionProto billingTransactionId.\n         * @member {number|Long} billingTransactionId\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.billingTransactionId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementTransactionProto labels.\n         * @member {Object.<string,string>} labels\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.labels = $util.emptyObject;\n\n        /**\n         * EntitlementTransactionProto userId.\n         * @member {string} userId\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         */\n        EntitlementTransactionProto.prototype.userId = \"\";\n\n        /**\n         * Creates a new EntitlementTransactionProto instance using the specified properties.\n         * @function create\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto.$Properties=} [properties] Properties to set\n         * @returns {entitlement.EntitlementTransactionProto} EntitlementTransactionProto instance\n         * @type {{\n         *   (properties: entitlement.EntitlementTransactionProto.$Shape): entitlement.EntitlementTransactionProto & entitlement.EntitlementTransactionProto.$Shape;\n         *   (properties?: entitlement.EntitlementTransactionProto.$Properties): entitlement.EntitlementTransactionProto;\n         * }}\n         */\n        EntitlementTransactionProto.create = function(properties) {\n            return new EntitlementTransactionProto(properties);\n        };\n\n        /**\n         * Encodes the specified EntitlementTransactionProto message. Does not implicitly {@link entitlement.EntitlementTransactionProto.verify|verify} messages.\n         * @function encode\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto.$Properties} message EntitlementTransactionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementTransactionProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.transactionId != null && $Object.hasOwnProperty.call(message, \"transactionId\") && (typeof message.transactionId === \"object\" ? message.transactionId.low || message.transactionId.high : message.transactionId !== 0))\n                writer.uint32(/* id 1, wireType 0 =*/8).int64(message.transactionId);\n            if (message.transactionType != null && $Object.hasOwnProperty.call(message, \"transactionType\") && message.transactionType !== 0)\n                writer.uint32(/* id 2, wireType 0 =*/16).int32(message.transactionType);\n            if (message.dimensionValues != null && $Object.hasOwnProperty.call(message, \"dimensionValues\"))\n                for (let keys = $Object.keys(message.dimensionValues), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 3, wireType 2 =*/26).fork().uint32(/* id 1, wireType 0 =*/8).int32(keys[i]).uint32(/* id 2, wireType 0 =*/16).int64(message.dimensionValues[keys[i]]).ldelim();\n            if (message.description != null && $Object.hasOwnProperty.call(message, \"description\") && message.description !== \"\")\n                writer.uint32(/* id 4, wireType 2 =*/34).string(message.description);\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\") && (typeof message.createdAtUnixMs === \"object\" ? message.createdAtUnixMs.low || message.createdAtUnixMs.high : message.createdAtUnixMs !== 0))\n                writer.uint32(/* id 5, wireType 0 =*/40).int64(message.createdAtUnixMs);\n            if (message.effectiveAtUnixMs != null && $Object.hasOwnProperty.call(message, \"effectiveAtUnixMs\") && (typeof message.effectiveAtUnixMs === \"object\" ? message.effectiveAtUnixMs.low || message.effectiveAtUnixMs.high : message.effectiveAtUnixMs !== 0))\n                writer.uint32(/* id 6, wireType 0 =*/48).int64(message.effectiveAtUnixMs);\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\") && (typeof message.expiresAtUnixMs === \"object\" ? message.expiresAtUnixMs.low || message.expiresAtUnixMs.high : message.expiresAtUnixMs !== 0))\n                writer.uint32(/* id 7, wireType 0 =*/56).int64(message.expiresAtUnixMs);\n            if (message.invoiceNumber != null && $Object.hasOwnProperty.call(message, \"invoiceNumber\") && message.invoiceNumber !== \"\")\n                writer.uint32(/* id 8, wireType 2 =*/66).string(message.invoiceNumber);\n            if (message.billingTransactionId != null && $Object.hasOwnProperty.call(message, \"billingTransactionId\") && (typeof message.billingTransactionId === \"object\" ? message.billingTransactionId.low || message.billingTransactionId.high : message.billingTransactionId !== 0))\n                writer.uint32(/* id 9, wireType 0 =*/72).int64(message.billingTransactionId);\n            if (message.labels != null && $Object.hasOwnProperty.call(message, \"labels\"))\n                for (let keys = $Object.keys(message.labels), i = 0; i < keys.length; ++i)\n                    writer.uint32(/* id 10, wireType 2 =*/82).fork().uint32(/* id 1, wireType 2 =*/10).string(keys[i]).uint32(/* id 2, wireType 2 =*/18).string(message.labels[keys[i]]).ldelim();\n            if (message.userId != null && $Object.hasOwnProperty.call(message, \"userId\") && message.userId !== \"\")\n                writer.uint32(/* id 11, wireType 2 =*/90).string(message.userId);\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EntitlementTransactionProto message, length delimited. Does not implicitly {@link entitlement.EntitlementTransactionProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto.$Properties} message EntitlementTransactionProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementTransactionProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EntitlementTransactionProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {entitlement.EntitlementTransactionProto & entitlement.EntitlementTransactionProto.$Shape} EntitlementTransactionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementTransactionProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.entitlement.EntitlementTransactionProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.transactionId = value;\n                        else\n                            delete message.transactionId;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.transactionType = value;\n                        else\n                            delete message.transactionType;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.dimensionValues === $util.emptyObject)\n                            message.dimensionValues = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = 0;\n                        value = $util.Long ? $util.Long.fromNumber(0, false) : 0;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 0)\n                                    break;\n                                key = reader.int32();\n                                continue;\n                            case 2:\n                                if (wireType !== 0)\n                                    break;\n                                value = reader.int64();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        message.dimensionValues[key] = value;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.description = value;\n                        else\n                            delete message.description;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.createdAtUnixMs = value;\n                        else\n                            delete message.createdAtUnixMs;\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.effectiveAtUnixMs = value;\n                        else\n                            delete message.effectiveAtUnixMs;\n                        continue;\n                    }\n                case 7: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.expiresAtUnixMs = value;\n                        else\n                            delete message.expiresAtUnixMs;\n                        continue;\n                    }\n                case 8: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.invoiceNumber = value;\n                        else\n                            delete message.invoiceNumber;\n                        continue;\n                    }\n                case 9: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.billingTransactionId = value;\n                        else\n                            delete message.billingTransactionId;\n                        continue;\n                    }\n                case 10: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.labels === $util.emptyObject)\n                            message.labels = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = \"\";\n                        value = \"\";\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 2)\n                                    break;\n                                key = reader.stringVerify();\n                                continue;\n                            case 2:\n                                if (wireType !== 2)\n                                    break;\n                                value = reader.stringVerify();\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        if (key === \"__proto__\")\n                            $util.makeProp(message.labels, key);\n                        message.labels[key] = value;\n                        continue;\n                    }\n                case 11: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.userId = value;\n                        else\n                            delete message.userId;\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EntitlementTransactionProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {entitlement.EntitlementTransactionProto & entitlement.EntitlementTransactionProto.$Shape} EntitlementTransactionProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementTransactionProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EntitlementTransactionProto message.\n         * @function verify\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EntitlementTransactionProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.transactionId != null && $Object.hasOwnProperty.call(message, \"transactionId\"))\n                if (!$util.isInteger(message.transactionId) && !(message.transactionId && $util.isInteger(message.transactionId.low) && $util.isInteger(message.transactionId.high)))\n                    return \"transactionId: integer|Long expected\";\n            if (message.transactionType != null && $Object.hasOwnProperty.call(message, \"transactionType\"))\n                if (typeof message.transactionType !== \"number\" || (message.transactionType | 0) !== message.transactionType)\n                    return \"transactionType: enum value expected\";\n            if (message.dimensionValues != null && $Object.hasOwnProperty.call(message, \"dimensionValues\")) {\n                if (!$util.isObject(message.dimensionValues))\n                    return \"dimensionValues: object expected\";\n                let key = $Object.keys(message.dimensionValues);\n                for (let i = 0; i < key.length; ++i) {\n                    if (!$util.key32Re.test(key[i]))\n                        return \"dimensionValues: integer key{k:int32} expected\";\n                    if (!$util.isInteger(message.dimensionValues[key[i]]) && !(message.dimensionValues[key[i]] && $util.isInteger(message.dimensionValues[key[i]].low) && $util.isInteger(message.dimensionValues[key[i]].high)))\n                        return \"dimensionValues: integer|Long{k:int32} expected\";\n                }\n            }\n            if (message.description != null && $Object.hasOwnProperty.call(message, \"description\"))\n                if (!$util.isString(message.description))\n                    return \"description: string expected\";\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (!$util.isInteger(message.createdAtUnixMs) && !(message.createdAtUnixMs && $util.isInteger(message.createdAtUnixMs.low) && $util.isInteger(message.createdAtUnixMs.high)))\n                    return \"createdAtUnixMs: integer|Long expected\";\n            if (message.effectiveAtUnixMs != null && $Object.hasOwnProperty.call(message, \"effectiveAtUnixMs\"))\n                if (!$util.isInteger(message.effectiveAtUnixMs) && !(message.effectiveAtUnixMs && $util.isInteger(message.effectiveAtUnixMs.low) && $util.isInteger(message.effectiveAtUnixMs.high)))\n                    return \"effectiveAtUnixMs: integer|Long expected\";\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (!$util.isInteger(message.expiresAtUnixMs) && !(message.expiresAtUnixMs && $util.isInteger(message.expiresAtUnixMs.low) && $util.isInteger(message.expiresAtUnixMs.high)))\n                    return \"expiresAtUnixMs: integer|Long expected\";\n            if (message.invoiceNumber != null && $Object.hasOwnProperty.call(message, \"invoiceNumber\"))\n                if (!$util.isString(message.invoiceNumber))\n                    return \"invoiceNumber: string expected\";\n            if (message.billingTransactionId != null && $Object.hasOwnProperty.call(message, \"billingTransactionId\"))\n                if (!$util.isInteger(message.billingTransactionId) && !(message.billingTransactionId && $util.isInteger(message.billingTransactionId.low) && $util.isInteger(message.billingTransactionId.high)))\n                    return \"billingTransactionId: integer|Long expected\";\n            if (message.labels != null && $Object.hasOwnProperty.call(message, \"labels\")) {\n                if (!$util.isObject(message.labels))\n                    return \"labels: object expected\";\n                let key = $Object.keys(message.labels);\n                for (let i = 0; i < key.length; ++i)\n                    if (!$util.isString(message.labels[key[i]]))\n                        return \"labels: string{k:string} expected\";\n            }\n            if (message.userId != null && $Object.hasOwnProperty.call(message, \"userId\"))\n                if (!$util.isString(message.userId))\n                    return \"userId: string expected\";\n            return null;\n        };\n\n        /**\n         * Creates an EntitlementTransactionProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {entitlement.EntitlementTransactionProto} EntitlementTransactionProto\n         */\n        EntitlementTransactionProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.entitlement.EntitlementTransactionProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".entitlement.EntitlementTransactionProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.entitlement.EntitlementTransactionProto();\n            if (object.transactionId != null)\n                if (typeof object.transactionId === \"object\" ? object.transactionId.low || object.transactionId.high : $Number(object.transactionId) !== 0)\n                    if ($util.Long)\n                        message.transactionId = $util.Long.fromValue(object.transactionId, false);\n                    else if (typeof object.transactionId === \"string\")\n                        message.transactionId = $parseInt(object.transactionId, 10);\n                    else if (typeof object.transactionId === \"number\")\n                        message.transactionId = object.transactionId;\n                    else if (typeof object.transactionId === \"object\")\n                        message.transactionId = new $util.LongBits(object.transactionId.low >>> 0, object.transactionId.high >>> 0).toNumber();\n            if (object.transactionType !== 0 && (typeof object.transactionType !== \"string\" || $root.entitlement.EntitlementTransactionType[object.transactionType] !== 0))\n                switch (object.transactionType) {\n                case \"ENTITLEMENT_TRANSACTION_TYPE_REPLACING\":\n                case 0:\n                    message.transactionType = 0;\n                    break;\n                case \"ENTITLEMENT_TRANSACTION_TYPE_INCREMENTING\":\n                case 1:\n                    message.transactionType = 1;\n                    break;\n                case \"ENTITLEMENT_TRANSACTION_TYPE_LEASE\":\n                case 2:\n                    message.transactionType = 2;\n                    break;\n                default:\n                    if (typeof object.transactionType === \"number\" && (object.transactionType | 0) === object.transactionType)\n                        message.transactionType = object.transactionType;\n                }\n            if (object.dimensionValues) {\n                if (!$util.isObject(object.dimensionValues))\n                    throw $TypeError(\".entitlement.EntitlementTransactionProto.dimensionValues: object expected\");\n                message.dimensionValues = {};\n                for (let keys = $Object.keys(object.dimensionValues), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.dimensionValues, keys[i]);\n                    if ($util.Long)\n                        message.dimensionValues[keys[i]] = $util.Long.fromValue(object.dimensionValues[keys[i]], false);\n                    else if (typeof object.dimensionValues[keys[i]] === \"string\")\n                        message.dimensionValues[keys[i]] = $parseInt(object.dimensionValues[keys[i]], 10);\n                    else if (typeof object.dimensionValues[keys[i]] === \"number\")\n                        message.dimensionValues[keys[i]] = object.dimensionValues[keys[i]];\n                    else if (typeof object.dimensionValues[keys[i]] === \"object\")\n                        message.dimensionValues[keys[i]] = new $util.LongBits(object.dimensionValues[keys[i]].low >>> 0, object.dimensionValues[keys[i]].high >>> 0).toNumber();\n                }\n            }\n            if (object.description != null)\n                if (typeof object.description !== \"string\" || object.description.length)\n                    message.description = $String(object.description);\n            if (object.createdAtUnixMs != null)\n                if (typeof object.createdAtUnixMs === \"object\" ? object.createdAtUnixMs.low || object.createdAtUnixMs.high : $Number(object.createdAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.createdAtUnixMs = $util.Long.fromValue(object.createdAtUnixMs, false);\n                    else if (typeof object.createdAtUnixMs === \"string\")\n                        message.createdAtUnixMs = $parseInt(object.createdAtUnixMs, 10);\n                    else if (typeof object.createdAtUnixMs === \"number\")\n                        message.createdAtUnixMs = object.createdAtUnixMs;\n                    else if (typeof object.createdAtUnixMs === \"object\")\n                        message.createdAtUnixMs = new $util.LongBits(object.createdAtUnixMs.low >>> 0, object.createdAtUnixMs.high >>> 0).toNumber();\n            if (object.effectiveAtUnixMs != null)\n                if (typeof object.effectiveAtUnixMs === \"object\" ? object.effectiveAtUnixMs.low || object.effectiveAtUnixMs.high : $Number(object.effectiveAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.effectiveAtUnixMs = $util.Long.fromValue(object.effectiveAtUnixMs, false);\n                    else if (typeof object.effectiveAtUnixMs === \"string\")\n                        message.effectiveAtUnixMs = $parseInt(object.effectiveAtUnixMs, 10);\n                    else if (typeof object.effectiveAtUnixMs === \"number\")\n                        message.effectiveAtUnixMs = object.effectiveAtUnixMs;\n                    else if (typeof object.effectiveAtUnixMs === \"object\")\n                        message.effectiveAtUnixMs = new $util.LongBits(object.effectiveAtUnixMs.low >>> 0, object.effectiveAtUnixMs.high >>> 0).toNumber();\n            if (object.expiresAtUnixMs != null)\n                if (typeof object.expiresAtUnixMs === \"object\" ? object.expiresAtUnixMs.low || object.expiresAtUnixMs.high : $Number(object.expiresAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.expiresAtUnixMs = $util.Long.fromValue(object.expiresAtUnixMs, false);\n                    else if (typeof object.expiresAtUnixMs === \"string\")\n                        message.expiresAtUnixMs = $parseInt(object.expiresAtUnixMs, 10);\n                    else if (typeof object.expiresAtUnixMs === \"number\")\n                        message.expiresAtUnixMs = object.expiresAtUnixMs;\n                    else if (typeof object.expiresAtUnixMs === \"object\")\n                        message.expiresAtUnixMs = new $util.LongBits(object.expiresAtUnixMs.low >>> 0, object.expiresAtUnixMs.high >>> 0).toNumber();\n            if (object.invoiceNumber != null)\n                if (typeof object.invoiceNumber !== \"string\" || object.invoiceNumber.length)\n                    message.invoiceNumber = $String(object.invoiceNumber);\n            if (object.billingTransactionId != null)\n                if (typeof object.billingTransactionId === \"object\" ? object.billingTransactionId.low || object.billingTransactionId.high : $Number(object.billingTransactionId) !== 0)\n                    if ($util.Long)\n                        message.billingTransactionId = $util.Long.fromValue(object.billingTransactionId, false);\n                    else if (typeof object.billingTransactionId === \"string\")\n                        message.billingTransactionId = $parseInt(object.billingTransactionId, 10);\n                    else if (typeof object.billingTransactionId === \"number\")\n                        message.billingTransactionId = object.billingTransactionId;\n                    else if (typeof object.billingTransactionId === \"object\")\n                        message.billingTransactionId = new $util.LongBits(object.billingTransactionId.low >>> 0, object.billingTransactionId.high >>> 0).toNumber();\n            if (object.labels) {\n                if (!$util.isObject(object.labels))\n                    throw $TypeError(\".entitlement.EntitlementTransactionProto.labels: object expected\");\n                message.labels = {};\n                for (let keys = $Object.keys(object.labels), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.labels, keys[i]);\n                    message.labels[keys[i]] = $String(object.labels[keys[i]]);\n                }\n            }\n            if (object.userId != null)\n                if (typeof object.userId !== \"string\" || object.userId.length)\n                    message.userId = $String(object.userId);\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EntitlementTransactionProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {entitlement.EntitlementTransactionProto} message EntitlementTransactionProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EntitlementTransactionProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.objects || options.defaults) {\n                object.dimensionValues = {};\n                object.labels = {};\n            }\n            if (options.defaults) {\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.transactionId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.transactionId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.transactionType = options.enums === $String ? \"ENTITLEMENT_TRANSACTION_TYPE_REPLACING\" : 0;\n                object.description = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.createdAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.createdAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.effectiveAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.effectiveAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.expiresAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.expiresAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.invoiceNumber = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.billingTransactionId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.billingTransactionId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                object.userId = \"\";\n            }\n            if (message.transactionId != null && $Object.hasOwnProperty.call(message, \"transactionId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.transactionId = typeof message.transactionId === \"number\" ? $BigInt(message.transactionId) : $util.Long.fromBits(message.transactionId.low >>> 0, message.transactionId.high >>> 0, false).toBigInt();\n                else if (typeof message.transactionId === \"number\")\n                    object.transactionId = options.longs === $String ? $String(message.transactionId) : message.transactionId;\n                else\n                    object.transactionId = options.longs === $String ? $util.Long.prototype.toString.call(message.transactionId) : options.longs === $Number ? new $util.LongBits(message.transactionId.low >>> 0, message.transactionId.high >>> 0).toNumber() : message.transactionId;\n            if (message.transactionType != null && $Object.hasOwnProperty.call(message, \"transactionType\"))\n                object.transactionType = options.enums === $String ? $root.entitlement.EntitlementTransactionType[message.transactionType] === $undefined ? message.transactionType : $root.entitlement.EntitlementTransactionType[message.transactionType] : message.transactionType;\n            let keys2;\n            if (message.dimensionValues && (keys2 = $Object.keys(message.dimensionValues)).length) {\n                object.dimensionValues = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.dimensionValues, keys2[j]);\n                    if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                        object.dimensionValues[keys2[j]] = typeof message.dimensionValues[keys2[j]] === \"number\" ? $BigInt(message.dimensionValues[keys2[j]]) : $util.Long.fromBits(message.dimensionValues[keys2[j]].low >>> 0, message.dimensionValues[keys2[j]].high >>> 0, false).toBigInt();\n                    else if (typeof message.dimensionValues[keys2[j]] === \"number\")\n                        object.dimensionValues[keys2[j]] = options.longs === $String ? $String(message.dimensionValues[keys2[j]]) : message.dimensionValues[keys2[j]];\n                    else\n                        object.dimensionValues[keys2[j]] = options.longs === $String ? $util.Long.prototype.toString.call(message.dimensionValues[keys2[j]]) : options.longs === $Number ? new $util.LongBits(message.dimensionValues[keys2[j]].low >>> 0, message.dimensionValues[keys2[j]].high >>> 0).toNumber() : message.dimensionValues[keys2[j]];\n                }\n            }\n            if (message.description != null && $Object.hasOwnProperty.call(message, \"description\"))\n                object.description = message.description;\n            if (message.createdAtUnixMs != null && $Object.hasOwnProperty.call(message, \"createdAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.createdAtUnixMs = typeof message.createdAtUnixMs === \"number\" ? $BigInt(message.createdAtUnixMs) : $util.Long.fromBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.createdAtUnixMs === \"number\")\n                    object.createdAtUnixMs = options.longs === $String ? $String(message.createdAtUnixMs) : message.createdAtUnixMs;\n                else\n                    object.createdAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.createdAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.createdAtUnixMs.low >>> 0, message.createdAtUnixMs.high >>> 0).toNumber() : message.createdAtUnixMs;\n            if (message.effectiveAtUnixMs != null && $Object.hasOwnProperty.call(message, \"effectiveAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.effectiveAtUnixMs = typeof message.effectiveAtUnixMs === \"number\" ? $BigInt(message.effectiveAtUnixMs) : $util.Long.fromBits(message.effectiveAtUnixMs.low >>> 0, message.effectiveAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.effectiveAtUnixMs === \"number\")\n                    object.effectiveAtUnixMs = options.longs === $String ? $String(message.effectiveAtUnixMs) : message.effectiveAtUnixMs;\n                else\n                    object.effectiveAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.effectiveAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.effectiveAtUnixMs.low >>> 0, message.effectiveAtUnixMs.high >>> 0).toNumber() : message.effectiveAtUnixMs;\n            if (message.expiresAtUnixMs != null && $Object.hasOwnProperty.call(message, \"expiresAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.expiresAtUnixMs = typeof message.expiresAtUnixMs === \"number\" ? $BigInt(message.expiresAtUnixMs) : $util.Long.fromBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.expiresAtUnixMs === \"number\")\n                    object.expiresAtUnixMs = options.longs === $String ? $String(message.expiresAtUnixMs) : message.expiresAtUnixMs;\n                else\n                    object.expiresAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.expiresAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.expiresAtUnixMs.low >>> 0, message.expiresAtUnixMs.high >>> 0).toNumber() : message.expiresAtUnixMs;\n            if (message.invoiceNumber != null && $Object.hasOwnProperty.call(message, \"invoiceNumber\"))\n                object.invoiceNumber = message.invoiceNumber;\n            if (message.billingTransactionId != null && $Object.hasOwnProperty.call(message, \"billingTransactionId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.billingTransactionId = typeof message.billingTransactionId === \"number\" ? $BigInt(message.billingTransactionId) : $util.Long.fromBits(message.billingTransactionId.low >>> 0, message.billingTransactionId.high >>> 0, false).toBigInt();\n                else if (typeof message.billingTransactionId === \"number\")\n                    object.billingTransactionId = options.longs === $String ? $String(message.billingTransactionId) : message.billingTransactionId;\n                else\n                    object.billingTransactionId = options.longs === $String ? $util.Long.prototype.toString.call(message.billingTransactionId) : options.longs === $Number ? new $util.LongBits(message.billingTransactionId.low >>> 0, message.billingTransactionId.high >>> 0).toNumber() : message.billingTransactionId;\n            if (message.labels && (keys2 = $Object.keys(message.labels)).length) {\n                object.labels = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.labels, keys2[j]);\n                    object.labels[keys2[j]] = message.labels[keys2[j]];\n                }\n            }\n            if (message.userId != null && $Object.hasOwnProperty.call(message, \"userId\"))\n                object.userId = message.userId;\n            return object;\n        };\n\n        /**\n         * Converts this EntitlementTransactionProto to JSON.\n         * @function toJSON\n         * @memberof entitlement.EntitlementTransactionProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EntitlementTransactionProto.prototype.toJSON = function() {\n            return EntitlementTransactionProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EntitlementTransactionProto\n         * @function getTypeUrl\n         * @memberof entitlement.EntitlementTransactionProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EntitlementTransactionProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/entitlement.EntitlementTransactionProto\";\n        };\n\n        return EntitlementTransactionProto;\n    })();\n\n    entitlement.EntitlementProto = (function() {\n\n        /**\n         * Properties of an EntitlementProto.\n         * @typedef {Object} entitlement.EntitlementProto.$Properties\n         * @property {number|null} [schemaMinorVersion] EntitlementProto schemaMinorVersion\n         * @property {string|null} [lastModifiedByCommit] EntitlementProto lastModifiedByCommit\n         * @property {number|Long|null} [tenantId] EntitlementProto tenantId\n         * @property {number|Long|null} [updatedAtUnixMs] EntitlementProto updatedAtUnixMs\n         * @property {Array.<entitlement.EntitlementTransactionProto.$Properties>|null} [transactions] EntitlementProto transactions\n         * @property {Object.<string,entitlement.EntitlementDimensionProto.$Properties>|null} [dimensions] EntitlementProto dimensions\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n\n        /**\n         * Properties of an EntitlementProto.\n         * @memberof entitlement\n         * @interface IEntitlementProto\n         * @augments entitlement.EntitlementProto.$Properties\n         * @deprecated Use entitlement.EntitlementProto.$Properties instead.\n         */\n\n        /**\n         * Shape of an EntitlementProto.\n         * @typedef {entitlement.EntitlementProto.$Properties} entitlement.EntitlementProto.$Shape\n         */\n\n        /**\n         * Constructs a new EntitlementProto.\n         * @memberof entitlement\n         * @classdesc Represents an EntitlementProto.\n         * @constructor\n         * @param {entitlement.EntitlementProto.$Properties=} [properties] Properties to set\n         * @property {Array.<Uint8Array>} [$unknowns] Unknown fields preserved while decoding when enabled\n         */\n        const EntitlementProto = function (properties) {\n            this.transactions = [];\n            this.dimensions = {};\n            if (properties)\n                for (let keys = $Object.keys(properties), i = 0; i < keys.length; ++i)\n                    if (properties[keys[i]] != null && keys[i] !== \"__proto__\")\n                        this[keys[i]] = properties[keys[i]];\n        };\n\n        /**\n         * EntitlementProto schemaMinorVersion.\n         * @member {number} schemaMinorVersion\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.schemaMinorVersion = 0;\n\n        /**\n         * EntitlementProto lastModifiedByCommit.\n         * @member {string} lastModifiedByCommit\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.lastModifiedByCommit = \"\";\n\n        /**\n         * EntitlementProto tenantId.\n         * @member {number|Long} tenantId\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.tenantId = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementProto updatedAtUnixMs.\n         * @member {number|Long} updatedAtUnixMs\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.updatedAtUnixMs = $util.Long ? $util.Long.fromBits(0,0,false) : 0;\n\n        /**\n         * EntitlementProto transactions.\n         * @member {Array.<entitlement.EntitlementTransactionProto.$Properties>} transactions\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.transactions = $util.emptyArray;\n\n        /**\n         * EntitlementProto dimensions.\n         * @member {Object.<string,entitlement.EntitlementDimensionProto.$Properties>} dimensions\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         */\n        EntitlementProto.prototype.dimensions = $util.emptyObject;\n\n        /**\n         * Creates a new EntitlementProto instance using the specified properties.\n         * @function create\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto.$Properties=} [properties] Properties to set\n         * @returns {entitlement.EntitlementProto} EntitlementProto instance\n         * @type {{\n         *   (properties: entitlement.EntitlementProto.$Shape): entitlement.EntitlementProto & entitlement.EntitlementProto.$Shape;\n         *   (properties?: entitlement.EntitlementProto.$Properties): entitlement.EntitlementProto;\n         * }}\n         */\n        EntitlementProto.create = function(properties) {\n            return new EntitlementProto(properties);\n        };\n\n        /**\n         * Encodes the specified EntitlementProto message. Does not implicitly {@link entitlement.EntitlementProto.verify|verify} messages.\n         * @function encode\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto.$Properties} message EntitlementProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementProto.encode = function (message, writer, _depth) {\n            if (!writer)\n                writer = $Writer.create();\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\") && message.schemaMinorVersion !== 0)\n                writer.uint32(/* id 1, wireType 0 =*/8).int32(message.schemaMinorVersion);\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\") && message.lastModifiedByCommit !== \"\")\n                writer.uint32(/* id 2, wireType 2 =*/18).string(message.lastModifiedByCommit);\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\") && (typeof message.tenantId === \"object\" ? message.tenantId.low || message.tenantId.high : message.tenantId !== 0))\n                writer.uint32(/* id 3, wireType 0 =*/24).int64(message.tenantId);\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\") && (typeof message.updatedAtUnixMs === \"object\" ? message.updatedAtUnixMs.low || message.updatedAtUnixMs.high : message.updatedAtUnixMs !== 0))\n                writer.uint32(/* id 4, wireType 0 =*/32).int64(message.updatedAtUnixMs);\n            if (message.transactions != null && message.transactions.length)\n                for (let i = 0; i < message.transactions.length; ++i)\n                    $root.entitlement.EntitlementTransactionProto.encode(message.transactions[i], writer.uint32(/* id 5, wireType 2 =*/42).fork(), _depth + 1).ldelim();\n            if (message.dimensions != null && $Object.hasOwnProperty.call(message, \"dimensions\"))\n                for (let keys = $Object.keys(message.dimensions), i = 0; i < keys.length; ++i) {\n                    writer.uint32(/* id 6, wireType 2 =*/50).fork().uint32(/* id 1, wireType 0 =*/8).int32(keys[i]);\n                    $root.entitlement.EntitlementDimensionProto.encode(message.dimensions[keys[i]], writer.uint32(/* id 2, wireType 2 =*/18).fork(), _depth + 1).ldelim().ldelim();\n                }\n            if (message.$unknowns != null && $Object.hasOwnProperty.call(message, \"$unknowns\"))\n                for (let i = 0; i < message.$unknowns.length; ++i)\n                    writer.raw(message.$unknowns[i]);\n            return writer;\n        };\n\n        /**\n         * Encodes the specified EntitlementProto message, length delimited. Does not implicitly {@link entitlement.EntitlementProto.verify|verify} messages.\n         * @function encodeDelimited\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto.$Properties} message EntitlementProto message or plain object to encode\n         * @param {$protobuf.Writer} [writer] Writer to encode to\n         * @returns {$protobuf.Writer} Writer\n         */\n        EntitlementProto.encodeDelimited = function(message, writer) {\n            return this.encode(message, (writer || $Writer.create()).fork()).ldelim();\n        };\n\n        /**\n         * Decodes an EntitlementProto message from the specified reader or buffer.\n         * @function decode\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @param {number} [length] Message length if known beforehand\n         * @returns {entitlement.EntitlementProto & entitlement.EntitlementProto.$Shape} EntitlementProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementProto.decode = function (reader, length, _end, _depth, _target) {\n            if (!(reader instanceof $Reader))\n                reader = $Reader.create(reader);\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $Reader.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let end, message, key, value;\n            if (length === $undefined)\n                end = reader.len;\n            else {\n                end = reader.pos + length;\n                if (end > reader.len)\n                    throw $RangeError(\"index out of range\");\n                length = reader.len;\n                reader.len = end;\n            }\n            message = _target || new $root.entitlement.EntitlementProto();\n            while (reader.pos < end) {\n                let start = reader.pos;\n                let tag = reader.tag();\n                if (tag === _end) {\n                    _end = $undefined;\n                    break;\n                }\n                let wireType = tag & 7;\n                switch (tag >>>= 3) {\n                case 1: {\n                        if (wireType !== 0)\n                            break;\n                        if (value = reader.int32())\n                            message.schemaMinorVersion = value;\n                        else\n                            delete message.schemaMinorVersion;\n                        continue;\n                    }\n                case 2: {\n                        if (wireType !== 2)\n                            break;\n                        if ((value = reader.stringVerify()).length)\n                            message.lastModifiedByCommit = value;\n                        else\n                            delete message.lastModifiedByCommit;\n                        continue;\n                    }\n                case 3: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.tenantId = value;\n                        else\n                            delete message.tenantId;\n                        continue;\n                    }\n                case 4: {\n                        if (wireType !== 0)\n                            break;\n                        if (typeof (value = reader.int64()) === \"object\" ? value.low || value.high : value !== 0)\n                            message.updatedAtUnixMs = value;\n                        else\n                            delete message.updatedAtUnixMs;\n                        continue;\n                    }\n                case 5: {\n                        if (wireType !== 2)\n                            break;\n                        if (!(message.transactions && message.transactions.length))\n                            message.transactions = [];\n                        message.transactions.push($root.entitlement.EntitlementTransactionProto.decode(reader, reader.uint32(), $undefined, _depth + 1));\n                        continue;\n                    }\n                case 6: {\n                        if (wireType !== 2)\n                            break;\n                        if (message.dimensions === $util.emptyObject)\n                            message.dimensions = {};\n                        let end2 = reader.uint32() + reader.pos;\n                        if (end2 > reader.len)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end2;\n                        key = 0;\n                        value = null;\n                        while (reader.pos < end2) {\n                            let tag2 = reader.tag();\n                            wireType = tag2 & 7;\n                            switch (tag2 >>>= 3) {\n                            case 1:\n                                if (wireType !== 0)\n                                    break;\n                                key = reader.int32();\n                                continue;\n                            case 2:\n                                if (wireType !== 2)\n                                    break;\n                                value = $root.entitlement.EntitlementDimensionProto.decode(reader, reader.uint32(), $undefined, _depth + 1, value);\n                                continue;\n                            }\n                            reader.skipType(wireType, _depth, tag2);\n                        }\n                        if (reader.pos !== end2)\n                            throw $RangeError(\"index out of range\");\n                        reader.len = end;\n                        message.dimensions[key] = value || new $root.entitlement.EntitlementDimensionProto();\n                        continue;\n                    }\n                }\n                reader.skipType(wireType, _depth, tag);\n                if (!reader.discardUnknown) {\n                    $util.makeProp(message, \"$unknowns\", false);\n                    (message.$unknowns || (message.$unknowns = [])).push(reader.raw(start, reader.pos));\n                }\n            }\n            if (length !== $undefined) {\n                if (reader.pos !== end)\n                    throw $RangeError(\"index out of range\");\n                reader.len = length;\n            }\n            if (_end !== $undefined)\n                throw $Error(\"missing end group\");\n            return message;\n        };\n\n        /**\n         * Decodes an EntitlementProto message from the specified reader or buffer, length delimited.\n         * @function decodeDelimited\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n         * @returns {entitlement.EntitlementProto & entitlement.EntitlementProto.$Shape} EntitlementProto\n         * @throws {Error} If the payload is not a reader or valid buffer\n         * @throws {$protobuf.util.ProtocolError} If required fields are missing\n         */\n        EntitlementProto.decodeDelimited = function(reader) {\n            if (!(reader instanceof $Reader))\n                reader = new $Reader(reader);\n            return this.decode(reader, reader.uint32());\n        };\n\n        /**\n         * Verifies an EntitlementProto message.\n         * @function verify\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {Object.<string,*>} message Plain object to verify\n         * @returns {string|null} `null` if valid, otherwise the reason why it is not\n         */\n        EntitlementProto.verify = function (message, _depth) {\n            if (typeof message !== \"object\" || message === null)\n                return \"object expected\";\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                return \"max depth exceeded\";\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                if (!$util.isInteger(message.schemaMinorVersion))\n                    return \"schemaMinorVersion: integer expected\";\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                if (!$util.isString(message.lastModifiedByCommit))\n                    return \"lastModifiedByCommit: string expected\";\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (!$util.isInteger(message.tenantId) && !(message.tenantId && $util.isInteger(message.tenantId.low) && $util.isInteger(message.tenantId.high)))\n                    return \"tenantId: integer|Long expected\";\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (!$util.isInteger(message.updatedAtUnixMs) && !(message.updatedAtUnixMs && $util.isInteger(message.updatedAtUnixMs.low) && $util.isInteger(message.updatedAtUnixMs.high)))\n                    return \"updatedAtUnixMs: integer|Long expected\";\n            if (message.transactions != null && $Object.hasOwnProperty.call(message, \"transactions\")) {\n                if (!$Array.isArray(message.transactions))\n                    return \"transactions: array expected\";\n                for (let i = 0; i < message.transactions.length; ++i) {\n                    let error = $root.entitlement.EntitlementTransactionProto.verify(message.transactions[i], _depth + 1);\n                    if (error)\n                        return \"transactions.\" + error;\n                }\n            }\n            if (message.dimensions != null && $Object.hasOwnProperty.call(message, \"dimensions\")) {\n                if (!$util.isObject(message.dimensions))\n                    return \"dimensions: object expected\";\n                let key = $Object.keys(message.dimensions);\n                for (let i = 0; i < key.length; ++i) {\n                    if (!$util.key32Re.test(key[i]))\n                        return \"dimensions: integer key{k:int32} expected\";\n                    {\n                        let error = $root.entitlement.EntitlementDimensionProto.verify(message.dimensions[key[i]], _depth + 1);\n                        if (error)\n                            return \"dimensions.\" + error;\n                    }\n                }\n            }\n            return null;\n        };\n\n        /**\n         * Creates an EntitlementProto message from a plain object. Also converts values to their respective internal types.\n         * @function fromObject\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {Object.<string,*>} object Plain object\n         * @returns {entitlement.EntitlementProto} EntitlementProto\n         */\n        EntitlementProto.fromObject = function (object, _depth) {\n            if (object instanceof $root.entitlement.EntitlementProto)\n                return object;\n            if (!$util.isObject(object))\n                throw $TypeError(\".entitlement.EntitlementProto: object expected\");\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let message = new $root.entitlement.EntitlementProto();\n            if (object.schemaMinorVersion != null)\n                if ($Number(object.schemaMinorVersion) !== 0)\n                    message.schemaMinorVersion = object.schemaMinorVersion | 0;\n            if (object.lastModifiedByCommit != null)\n                if (typeof object.lastModifiedByCommit !== \"string\" || object.lastModifiedByCommit.length)\n                    message.lastModifiedByCommit = $String(object.lastModifiedByCommit);\n            if (object.tenantId != null)\n                if (typeof object.tenantId === \"object\" ? object.tenantId.low || object.tenantId.high : $Number(object.tenantId) !== 0)\n                    if ($util.Long)\n                        message.tenantId = $util.Long.fromValue(object.tenantId, false);\n                    else if (typeof object.tenantId === \"string\")\n                        message.tenantId = $parseInt(object.tenantId, 10);\n                    else if (typeof object.tenantId === \"number\")\n                        message.tenantId = object.tenantId;\n                    else if (typeof object.tenantId === \"object\")\n                        message.tenantId = new $util.LongBits(object.tenantId.low >>> 0, object.tenantId.high >>> 0).toNumber();\n            if (object.updatedAtUnixMs != null)\n                if (typeof object.updatedAtUnixMs === \"object\" ? object.updatedAtUnixMs.low || object.updatedAtUnixMs.high : $Number(object.updatedAtUnixMs) !== 0)\n                    if ($util.Long)\n                        message.updatedAtUnixMs = $util.Long.fromValue(object.updatedAtUnixMs, false);\n                    else if (typeof object.updatedAtUnixMs === \"string\")\n                        message.updatedAtUnixMs = $parseInt(object.updatedAtUnixMs, 10);\n                    else if (typeof object.updatedAtUnixMs === \"number\")\n                        message.updatedAtUnixMs = object.updatedAtUnixMs;\n                    else if (typeof object.updatedAtUnixMs === \"object\")\n                        message.updatedAtUnixMs = new $util.LongBits(object.updatedAtUnixMs.low >>> 0, object.updatedAtUnixMs.high >>> 0).toNumber();\n            if (object.transactions) {\n                if (!$Array.isArray(object.transactions))\n                    throw $TypeError(\".entitlement.EntitlementProto.transactions: array expected\");\n                message.transactions = $Array(object.transactions.length);\n                for (let i = 0; i < object.transactions.length; ++i) {\n                    if (!$util.isObject(object.transactions[i]))\n                        throw $TypeError(\".entitlement.EntitlementProto.transactions: object expected\");\n                    message.transactions[i] = $root.entitlement.EntitlementTransactionProto.fromObject(object.transactions[i], _depth + 1);\n                }\n            }\n            if (object.dimensions) {\n                if (!$util.isObject(object.dimensions))\n                    throw $TypeError(\".entitlement.EntitlementProto.dimensions: object expected\");\n                message.dimensions = {};\n                for (let keys = $Object.keys(object.dimensions), i = 0; i < keys.length; ++i) {\n                    if (keys[i] === \"__proto__\")\n                        $util.makeProp(message.dimensions, keys[i]);\n                    if (!$util.isObject(object.dimensions[keys[i]]))\n                        throw $TypeError(\".entitlement.EntitlementProto.dimensions: object expected\");\n                    message.dimensions[keys[i]] = $root.entitlement.EntitlementDimensionProto.fromObject(object.dimensions[keys[i]], _depth + 1);\n                }\n            }\n            return message;\n        };\n\n        /**\n         * Creates a plain object from an EntitlementProto message. Also converts values to other types if specified.\n         * @function toObject\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {entitlement.EntitlementProto} message EntitlementProto\n         * @param {$protobuf.IConversionOptions} [options] Conversion options\n         * @returns {Object.<string,*>} Plain object\n         */\n        EntitlementProto.toObject = function (message, options, _depth) {\n            if (!options)\n                options = {};\n            if (_depth === $undefined)\n                _depth = 0;\n            if (_depth > $util.recursionLimit)\n                throw $Error(\"max depth exceeded\");\n            let object = {};\n            if (options.arrays || options.defaults)\n                object.transactions = [];\n            if (options.objects || options.defaults)\n                object.dimensions = {};\n            if (options.defaults) {\n                object.schemaMinorVersion = 0;\n                object.lastModifiedByCommit = \"\";\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.tenantId = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.tenantId = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n                if ($util.Long) {\n                    let long = new $util.Long(0, 0, false);\n                    object.updatedAtUnixMs = options.longs === $String ? long.toString() : options.longs === $Number ? long.toNumber() : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? long.toBigInt() : long;\n                } else\n                    object.updatedAtUnixMs = options.longs === $String ? \"0\" : typeof $BigInt !== \"undefined\" && options.longs === $BigInt ? $BigInt(\"0\") : 0;\n            }\n            if (message.schemaMinorVersion != null && $Object.hasOwnProperty.call(message, \"schemaMinorVersion\"))\n                object.schemaMinorVersion = message.schemaMinorVersion;\n            if (message.lastModifiedByCommit != null && $Object.hasOwnProperty.call(message, \"lastModifiedByCommit\"))\n                object.lastModifiedByCommit = message.lastModifiedByCommit;\n            if (message.tenantId != null && $Object.hasOwnProperty.call(message, \"tenantId\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.tenantId = typeof message.tenantId === \"number\" ? $BigInt(message.tenantId) : $util.Long.fromBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0, false).toBigInt();\n                else if (typeof message.tenantId === \"number\")\n                    object.tenantId = options.longs === $String ? $String(message.tenantId) : message.tenantId;\n                else\n                    object.tenantId = options.longs === $String ? $util.Long.prototype.toString.call(message.tenantId) : options.longs === $Number ? new $util.LongBits(message.tenantId.low >>> 0, message.tenantId.high >>> 0).toNumber() : message.tenantId;\n            if (message.updatedAtUnixMs != null && $Object.hasOwnProperty.call(message, \"updatedAtUnixMs\"))\n                if (typeof $BigInt !== \"undefined\" && options.longs === $BigInt)\n                    object.updatedAtUnixMs = typeof message.updatedAtUnixMs === \"number\" ? $BigInt(message.updatedAtUnixMs) : $util.Long.fromBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0, false).toBigInt();\n                else if (typeof message.updatedAtUnixMs === \"number\")\n                    object.updatedAtUnixMs = options.longs === $String ? $String(message.updatedAtUnixMs) : message.updatedAtUnixMs;\n                else\n                    object.updatedAtUnixMs = options.longs === $String ? $util.Long.prototype.toString.call(message.updatedAtUnixMs) : options.longs === $Number ? new $util.LongBits(message.updatedAtUnixMs.low >>> 0, message.updatedAtUnixMs.high >>> 0).toNumber() : message.updatedAtUnixMs;\n            if (message.transactions && message.transactions.length) {\n                object.transactions = $Array(message.transactions.length);\n                for (let j = 0; j < message.transactions.length; ++j)\n                    object.transactions[j] = $root.entitlement.EntitlementTransactionProto.toObject(message.transactions[j], options, _depth + 1);\n            }\n            let keys2;\n            if (message.dimensions && (keys2 = $Object.keys(message.dimensions)).length) {\n                object.dimensions = {};\n                for (let j = 0; j < keys2.length; ++j) {\n                    if (keys2[j] === \"__proto__\")\n                        $util.makeProp(object.dimensions, keys2[j]);\n                    object.dimensions[keys2[j]] = $root.entitlement.EntitlementDimensionProto.toObject(message.dimensions[keys2[j]], options, _depth + 1);\n                }\n            }\n            return object;\n        };\n\n        /**\n         * Converts this EntitlementProto to JSON.\n         * @function toJSON\n         * @memberof entitlement.EntitlementProto\n         * @instance\n         * @returns {Object.<string,*>} JSON object\n         */\n        EntitlementProto.prototype.toJSON = function() {\n            return EntitlementProto.toObject(this, $protobuf.util.toJSONOptions);\n        };\n\n        /**\n         * Gets the type url for EntitlementProto\n         * @function getTypeUrl\n         * @memberof entitlement.EntitlementProto\n         * @static\n         * @param {string} [prefix] Custom type url prefix, defaults to `\"type.googleapis.com\"`\n         * @returns {string} The type url\n         */\n        EntitlementProto.getTypeUrl = function(prefix) {\n            if (prefix === $undefined)\n                prefix = \"type.googleapis.com\";\n            return prefix + \"/entitlement.EntitlementProto\";\n        };\n\n        return EntitlementProto;\n    })();\n\n    return entitlement;\n})();\n\nexport {\n  $root as default\n};\n","/**\n * Common string constants for DOM events, CSS state classes, attributes,\n * display values, and keyboard keys to eliminate magic strings across the frontend.\n */\n\n// DOM Event Names\nexport const EVENT_CLICK = 'click';\nexport const EVENT_CHANGE = 'change';\nexport const EVENT_INPUT = 'input';\nexport const EVENT_KEYDOWN = 'keydown';\nexport const EVENT_SUBMIT = 'submit';\nexport const EVENT_RESIZE = 'resize';\nexport const EVENT_SCROLL = 'scroll';\nexport const EVENT_FOCUS = 'focus';\nexport const EVENT_BEFOREUNLOAD = 'beforeunload';\nexport const EVENT_PAGEHIDE = 'pagehide';\nexport const EVENT_VISIBILITYCHANGE = 'visibilitychange';\nexport const EVENT_DOM_CONTENT_LOADED = 'DOMContentLoaded';\nexport const EVENT_DEVICECHANGE = 'devicechange';\nexport const EVENT_MESSAGE = 'message';\nexport const EVENT_OPEN = 'open';\nexport const EVENT_CLOSE = 'close';\nexport const EVENT_ERROR = 'error';\nexport const EVENT_TOUCHSTART = 'touchstart';\nexport const EVENT_MOUSEENTER = 'mouseenter';\nexport const EVENT_HASHCHANGE = 'hashchange';\nexport const EVENT_RELEASE = 'release';\n\n// CSS State Classes\nexport const CLASS_OPEN = 'open';\nexport const CLASS_HIDDEN = 'hidden';\nexport const CLASS_ACTIVE = 'active';\nexport const CLASS_MENU_DISABLED = 'menu-disabled';\nexport const CLASS_DANGER = 'danger';\nexport const CLASS_EXPIRED = 'expired';\nexport const CLASS_CLOSING = 'closing';\n\n\n// Common Attributes & Values\nexport const ATTR_PAGE = 'data-page';\nexport const ATTR_SRC = 'src';\nexport const ATTR_ARIA_EXPANDED = 'aria-expanded';\n\nexport const VALUE_TRUE = 'true';\nexport const VALUE_FALSE = 'false';\n\n// Keyboard Keys\nexport const KEY_ESCAPE = 'Escape';\nexport const KEY_ENTER = 'Enter';\nexport const KEY_ARROW_UP = 'ArrowUp';\nexport const KEY_ARROW_DOWN = 'ArrowDown';\n\n// HTTP Methods\nexport const HTTP_POST = 'POST';\nexport const HTTP_PUT = 'PUT';\nexport const HTTP_DELETE = 'DELETE';\n\n// URL Query Parameter Names\nexport const PARAM_TOKEN = 'token';\nexport const PARAM_LANG = 'lang';\nexport const PARAM_CHANNEL = 'channel';\nexport const PARAM_DEVICE_ENROLL = 'device_enroll';\nexport const PARAM_AUTH_ERROR = 'auth_error';\nexport const PARAM_LOGIN_NONCE = 'login_nonce';\n\n// Local Storage Keys\nexport const STORAGE_AUTH_TOKEN = 'fluentchurch_token';\nexport const STORAGE_DEVICE_TOKEN = 'fluentchurch_device_token';\nexport const STORAGE_DEVICE_INFO = 'fluentchurch_device_info';\n// Session storage (per tab): nonce bound to a login started in this tab (login CSRF protection)\nexport const SESSION_STORAGE_LOGIN_NONCE = 'fluentchurch_login_nonce';\nexport const STORAGE_LAST_TENANT_ID = 'last_selected_tenant_id';\nexport const STORAGE_THEME_PREFERENCE = 'rtc_theme_preference';\nexport const STORAGE_BROADCAST_LANGUAGE = 'fluentchurch_broadcast_language';\nexport const STORAGE_BROADCAST_LANGUAGE_HINTS = 'fluentchurch_broadcast_language_hints';\nexport const STORAGE_GATE_THRESHOLD = 'fluentchurch_gate_threshold';\nexport const STORAGE_GATE_ATTACK = 'fluentchurch_gate_attack';\nexport const STORAGE_GATE_HOLD = 'fluentchurch_gate_hold';\nexport const STORAGE_AUDIO_DEVICE_ID = 'fluentchurch_audio_device_id';\nexport const STORAGE_VIEWER_LANGUAGE = 'fluentchurch_viewer_language';\n\n// WebSocket Subprotocols\nexport const WS_SUBPROTOCOL_TOKEN = 'token';\n","import { STORAGE_AUTH_TOKEN, STORAGE_DEVICE_TOKEN } from './core/strings';\n\n// API configuration supporting cross-domain frontend and API hosting\n\nfunction requireDomain(name: 'APP_DOMAIN' | 'API_DOMAIN' | 'BROADCAST_DOMAIN'): string {\n  const windowVal = typeof window !== 'undefined' && (window as any)[`__${name}__`];\n  if (windowVal) return windowVal;\n\n  if (typeof window !== 'undefined' && (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1')) {\n    if (name === 'APP_DOMAIN' || name === 'API_DOMAIN') {\n      return window.location.host;\n    }\n  }\n\n  const val = (import.meta.env as any)?.[name];\n  if (!val) throw new Error(`FATAL: Missing required domain: ${name}`);\n  return val;\n}\n\nexport const getAppDomain = () => requireDomain('APP_DOMAIN');\nexport const getApiDomain = () => requireDomain('API_DOMAIN');\nexport const getBroadcastDomain = () => requireDomain('BROADCAST_DOMAIN');\n\nexport const getApiBaseUrl = () => {\n  const isHttp = typeof window !== 'undefined' && window.location?.protocol === 'http:';\n  return `${isHttp ? 'http:' : 'https:'}//${getApiDomain()}`;\n};\nexport const getWorkerUrl = () => {\n  const isHttp = typeof window !== 'undefined' && window.location?.protocol === 'http:';\n  return `${isHttp ? 'http:' : 'https:'}//${getBroadcastDomain()}`;\n};\n\nexport function resolveWorkerWsBase(rawBase?: string): string {\n  const base = (rawBase || getWorkerUrl()).replace(/\\/+$/, '');\n  const isHttps = typeof window !== 'undefined' && window.location?.protocol === 'https:';\n  return base.replace(/^http:/i, isHttps ? 'wss:' : 'ws:').replace(/^https:/i, 'wss:');\n}\n\n/**\n * Builds a fully qualified Worker WebSocket URL for a given endpoint and channel name.\n * e.g. wss://broadcast.fluent.church/ws/listen/Sanctuary?lang=es\n * or wss://broadcast.fluent.church/ws/broadcast/Sanctuary?token=...\n */\nexport function buildWorkerWsUrl(\n  endpoint: 'listen' | 'broadcast',\n  channelName: string,\n  queryParams: Record<string, string | undefined> = {},\n  rawBase?: string\n): string {\n  const wsBase = resolveWorkerWsBase(rawBase);\n  const cleanChannel = channelName.trim().replace(/^@+/, '');\n  const searchParams = new URLSearchParams();\n\n  for (const [key, val] of Object.entries(queryParams)) {\n    if (val !== undefined && val !== null) {\n      searchParams.set(key, val);\n    }\n  }\n\n  const queryStr = searchParams.toString();\n  const querySuffix = queryStr ? `?${queryStr}` : '';\n  return `${wsBase}/ws/${endpoint}/${encodeURIComponent(cleanChannel)}${querySuffix}`;\n}\n\nexport function apiUrl(path: string): string {\n  const base = getApiBaseUrl().replace(/\\/+$/, '');\n  const cleanPath = path.startsWith('/') ? path : `/${path}`;\n  return `${base}${cleanPath}`;\n}\n\nexport function getAuthToken(): string | null {\n  return localStorage.getItem(STORAGE_AUTH_TOKEN);\n}\n\nexport function setAuthToken(token: string | null): void {\n  if (token) {\n    localStorage.setItem(STORAGE_AUTH_TOKEN, token);\n  } else {\n    localStorage.removeItem(STORAGE_AUTH_TOKEN);\n  }\n}\n\nexport function getDeviceToken(): string | null {\n  return localStorage.getItem(STORAGE_DEVICE_TOKEN);\n}\n\nexport function setDeviceToken(token: string | null): void {\n  if (token) {\n    localStorage.setItem(STORAGE_DEVICE_TOKEN, token);\n  } else {\n    localStorage.removeItem(STORAGE_DEVICE_TOKEN);\n  }\n}\n\nlet onUnauthorizedCallback: (() => void) | null = null;\n\nexport function setOnUnauthorized(cb: (() => void) | null): void {\n  onUnauthorizedCallback = cb;\n}\n\nlet detectedContinent: string | null = null;\n\nexport function getClientContinent(): string | null {\n  return detectedContinent;\n}\n\nexport function setClientContinent(continent: string | null): void {\n  if (continent) {\n    detectedContinent = continent.trim();\n  }\n}\n\nexport async function fetchWithAuth(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n  const pathOrUrl = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;\n  const isAbsolute = pathOrUrl.startsWith('http://') || pathOrUrl.startsWith('https://');\n  const fullUrl = isAbsolute ? pathOrUrl : apiUrl(pathOrUrl);\n  const headers = new Headers(init?.headers || {});\n  const token = getAuthToken() || getDeviceToken();\n  const apiBase = getApiBaseUrl();\n  let isApi = !isAbsolute;\n  if (isAbsolute && apiBase) {\n    try {\n      const fullOrigin = new URL(fullUrl).origin;\n      const apiOrigin = new URL(apiBase, typeof window !== 'undefined' ? window.location.origin : 'http://localhost').origin;\n      isApi = fullOrigin === apiOrigin;\n    } catch {\n      isApi = false;\n    }\n  }\n  if (isApi && token && !headers.has('Authorization')) {\n    headers.set('Authorization', `Bearer ${token}`);\n  }\n  const resp = await fetch(fullUrl, { ...init, headers });\n  const continent = resp.headers.get('cf-ipcontinent');\n  if (continent) {\n    setClientContinent(continent);\n  }\n  const renewed = resp.headers.get('X-Renewed-Token');\n  if (renewed && getAuthToken()) {\n    setAuthToken(renewed);\n  }\n  if (isApi && resp.status === 401) {\n    if (getAuthToken()) {\n      setAuthToken(null);\n      if (onUnauthorizedCallback) {\n        onUnauthorizedCallback();\n      }\n    } else if (!getDeviceToken()) {\n      if (onUnauthorizedCallback) {\n        onUnauthorizedCallback();\n      }\n    }\n  }\n  return resp;\n}\n\n\n\n","/**\n * HTML Escaping utility to prevent Cross-Site Scripting (XSS).\n */\nexport function escapeHtml(text: any): string {\n  if (text === null || text === undefined) return '';\n  return String(text)\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/\"/g, '&quot;')\n    .replace(/'/g, '&#039;');\n}\n","{\n  \"common\": {\n    \"appName\": \"Fluent Church\",\n    \"liveCaptions\": \"Live Captions\",\n    \"studio\": \"Console\",\n    \"fohConsole\": \"Console\",\n    \"channel\": \"Channel\",\n    \"venue\": \"Account\",\n    \"account\": \"Account\",\n    \"organization\": \"Account\",\n    \"close\": \"Close\",\n    \"cancel\": \"Cancel\",\n    \"save\": \"Save\",\n    \"delete\": \"Delete\",\n    \"copy\": \"Copy\",\n    \"copied\": \"Copied!\",\n    \"loading\": \"Loading...\",\n    \"error\": \"Error\"\n  },\n  \"auth\": {\n    \"logIn\": \"Log in\",\n    \"signInTitle\": \"Console Sign In\",\n    \"loginTitle\": \"Console Sign In\",\n    \"signInDesc\": \"Sign in with your account to access the audio console and broadcast live captions.\",\n    \"loginDesc\": \"Sign in with your account to access the audio console and broadcast live captions.\",\n    \"continueWith\": \"Continue with {name}\",\n    \"noProviders\": \"Authentication providers are not yet configured. Please check your deployment settings.\",\n    \"sessionExpired\": \"Your session has expired. Please sign in again.\",\n    \"audienceNotice\": \"Audience member? You don't need to sign in. Scan the QR code or visit {homeLink}.\"\n  },\n  \"landing\": {\n    \"meta\": {\n      \"title\": \"fluent.church — Live Captions &amp; Sermon Translation\",\n      \"description\": \"Real-time live captioning and multilingual sermon translation for churches. Stream live captions straight to congregation mobile devices without special hardware.\",\n      \"appDescription\": \"Real-time live speech-to-text transcription and multilingual translation software for churches, broadcasting captions directly to attendee mobile devices via QR code.\",\n      \"priceDescription\": \"Pre-paid usage-based pricing starting at $1 per broadcast hour with zero recurring subscriptions.\"\n    },\n    \"nav\": {\n      \"brandAlt\": \"fluent.church\",\n      \"logIn\": \"Log In\",\n      \"getStarted\": \"Get Started\"\n    },\n    \"hero\": {\n      \"title\": \"Spoken audio to live text.\",\n      \"subtitle\": \"In any language, straight to mobile screens.\",\n      \"description\": \"fluent.church makes spoken audio available in real time as text in any language on your congregation&#39;s mobile devices&mdash;enabling anyone who cannot understand the spoken word, whether due to impaired hearing or language barriers.\",\n      \"ctaPrimary\": \"Get Started\",\n      \"ctaSecondary\": \"See How It Works\"\n    },\n    \"whatItDoes\": {\n      \"title\": \"Include Everyone in the Message.\"\n    },\n    \"pricing\": {\n      \"title\": \"$1/hour. Prepaid. Zero commitments.\",\n      \"subtitle\": \"Fair, usage-based pricing with zero hidden recurring fees.\",\n      \"badge\": \"Pre-Paid Flexibility\",\n      \"startingAt\": \"Starting at\",\n      \"price\": \"$1\",\n      \"perUnit\": \"/ broadcast hour\",\n      \"tagline\": \"Sign up for a free trial. When you are ready, continue with pre-paid hours without surprise subscriptions or auto-renewals.\",\n      \"cta\": \"Get started\",\n      \"feature1Title\": \"No audience, no charge\",\n      \"feature1Desc\": \"We do not charge you if there are no visitors connected to your broadcast.\",\n      \"feature2Title\": \"Free periods of silence\",\n      \"feature2Desc\": \"We do not charge you for silent pauses or intervals between speakers.\",\n      \"feature3Title\": \"No recurring traps\",\n      \"feature3Desc\": \"Pre-paid credit balances that stay yours, with zero forced monthly retainers.\"\n    },\n    \"howItWorks\": {\n      \"title\": \"How It Works\",\n      \"subtitle\": \"Route your live audio through fluent.church for instant, multi-language delivery on mobile devices.\",\n      \"step1Title\": \"Spoken audio capture\",\n      \"step1Desc\": \"Audio from your existing sound equipment is sent to fluent.church running on a browser.\",\n      \"step2Title\": \"Live processing\",\n      \"step2Desc\": \"fluent.church transcribes the audio to text, and translates it.\",\n      \"step3Title\": \"Broadcasting\",\n      \"step3Desc\": \"The transcription is delivered right onto the audience's screens where it is displayed in their chosen language.\"\n    },\n    \"getStarted\": {\n      \"title\": \"Get Started\",\n      \"subtitle\": \"Follow this simple onboarding checklist to get set up.\",\n      \"prereqHeading\": \"What You'll Need\",\n      \"prereq1Title\": \"An audio source\",\n      \"prereq1Desc\": \"A microphone, or a mixing console that can output audio with spoken word.\",\n      \"prereq2Title\": \"A broadcast device\",\n      \"prereq2Desc\": \"A tablet, phone or computer with an Internet connection and a browser. The broadcast device has to be connected to your audio source.\",\n      \"prereq3Title\": \"A Google or Microsoft account\",\n      \"prereq3Desc\": \"To create a fluent.church account, you will need to log in with a Google or Microsoft account.\",\n      \"actionHeading\": \"What You Need to Do\",\n      \"action1Title\": \"Sign up\",\n      \"action1Desc\": \"At first login, an account will be created with 4 hours of broadcast time to use with your congregation over the coming 30 days.\",\n      \"action1Cta\": \"Sign Up &amp; get free trial\",\n      \"action2Title\": \"Start broadcast\",\n      \"action2Desc\": \"Instruct your audio engineer to turn on the broadcast every time.\",\n      \"action3Title\": \"Spread the word\",\n      \"action3Desc\": \"Let your audience know you are transcribing. Print QR codes or URLs at the entrance, on your website, in your newsletter and on the pre-service screens.\"\n    },\n    \"faq\": {\n      \"title\": \"Frequently Asked Questions\",\n      \"subtitle\": \"Everything you need to know about live captioning and multilingual translation.\",\n      \"items\": [\n        {\n          \"question\": \"Do congregation members need to download an app or register?\",\n          \"answer\": \"No. Attendees simply scan a QR code with their mobile phone or visit fluent.church/@yourname. There is no app to install, no account to create, and no personal data collected from your audience.\"\n        },\n        {\n          \"question\": \"Can we use our own church website address (custom domain)?\",\n          \"answer\": \"Yes. In addition to your default address at fluent.church/@yourname, you can connect your own subdomain (such as captions.yourchurch.org) via a simple DNS CNAME record at no extra cost. SSL certificates are provisioned automatically.\"\n        },\n        {\n          \"question\": \"How does this compare to hearing loop or Auracast systems?\",\n          \"answer\": \"Traditional induction loops and Auracast are of great help for those with hearing aids. Those who cannot benefit from hearing aids, or those who do not understand the spoken language, are not helped by these systems. fluent.church is a supplement to, not a replacement of, hearing loops or Auracast, streaming live text directly to the smartphones attendees already carry.\"\n        },\n        {\n          \"question\": \"How does usage-based pricing work?\",\n          \"answer\": \"fluent.church pricing starts at $1 per broadcast hour using pre-paid hours. You are only charged when you broadcast to active listeners; periods of silence and broadcasts without connected attendees are free. There are no monthly subscription fees, commitments, or auto-renewals. Pre-paid hours expire 1 year after purchase, but are extended if additional purchases are made.\"\n        },\n        {\n          \"question\": \"Which languages are supported?\",\n          \"answer\": \"fluent.church supports real-time transcription across more than 60 spoken languages, and instant translation into 100 languages simultaneously. Each attendee can independently choose their preferred language on their personal screen.\"\n        },\n        {\n          \"question\": \"What hardware or sound equipment is required?\",\n          \"answer\": \"A laptop, tablet, or phone with an internet connection and a web broswer (Firefox, Chrome or Safari) will work. While you can capture directly from your device's microphone, you will get much better results with an audio feed from your sound system. Best results are achieved if you connect an aux or subgroup feed from your mixing console via a simple USB audio interface or XLR-to-USB adapter. Because the broadcast automatically pauses (no charge) during silence, muting the microphone during periods of non-speech saves your broadcast hours.\"\n        },\n        {\n          \"question\": \"How fast is the transcription?\",\n          \"answer\": \"The live text is broadcast with a latency of usually only a few words. Translation has a slight delay as we translate once there is a complete sentence.\"\n        }\n      ]\n    },\n    \"about\": {\n      \"title\": \"About fluent.church\",\n      \"p1\": \"fluent.church is a service built on a vision to make God known to everyone regardless of hearing impairment, origin, ethnicity, or mother tongue, at an affordable price.\",\n      \"p2\": \"I originally built this system while serving as a church audio technician. A friend with severe hearing loss was consistently struggling to understand the spoken word during services, and our standard induction loop just wasn't enough. I thought that if TVs could have live captions, so could the church.\",\n      \"p3\": \"Today, fluent.church is operated on the sidelines. My goal is to run this as a sustainable, affordable service. By keeping operations lean—which means a 24/7 support desk is not available—I can provide this tool to churches at a low, straightforward price point. It is built to simply work, so you can focus on the service.\",\n      \"signoff\": \"— Kristofer Tingdahl<br>Tingdahl IT Management AB\"\n    },\n    \"footer\": {\n      \"terms\": \"Terms of Service\",\n      \"privacy\": \"Privacy Policy\",\n      \"support\": \"Support &amp; Documentation\"\n    }\n  },\n  \"studio\": {\n    \"connecting\": \"Connecting to console...\",\n    \"welcome\": \"Welcome, {name}!\",\n    \"createOrgTitle\": \"Create Your Account\",\n    \"createOrgDesc\": \"To start broadcasting live captions, create your church account and your first channel.\",\n    \"setupDesc\": \"To start broadcasting live captions, create your church account and your first channel.\",\n    \"orgNameLabel\": \"Account / Church Name\",\n    \"orgNamePlaceholder\": \"e.g. Grace Fellowship, City Church, St. Mary's\",\n    \"firstChannelLabel\": \"First Channel Name (Globally Unique)\",\n    \"firstChannelPlaceholder\": \"\",\n    \"suggestions\": \"Suggestions\",\n    \"channelHelp\": \"Audiences will view live captions for this channel at /@channel-name\",\n    \"createOrgBtn\": \"Create Account & Open Console\",\n    \"creatingOrg\": \"Setting up account...\",\n    \"invalidChannelError\": \"Channel name must be between 6 and 20 characters (letters, numbers, underscores, and single hyphens).\",\n    \"channelsQuota\": \"({count}/{max} channels active)\",\n    \"membersQuota\": \"({count}/{max} members)\",\n    \"channelLimitReached\": \"Maximum limit of {max} channels reached for this account. Delete an existing channel or contact support to increase your quota.\",\n    \"addChannelModalTitle\": \"Create New Channel\",\n    \"channelNameLabel\": \"Channel Name (Globally Unique)\",\n    \"addChannelModalPlaceholder\": \"dallas-faith-church\",\n    \"createChannelBtn\": \"Create Channel\",\n    \"addChannelBtn\": \"+ Channel\",\n    \"addChannelOption\": \"+ Channel...\",\n    \"newVenueOption\": \"+ New Account...\",\n    \"newAccountOption\": \"+ New Account...\",\n    \"inviteMemberBtn\": \"+ Invite Team\",\n    \"audienceLinkBtn\": \"Audience Link\",\n    \"audienceLinkCopied\": \"Audience Link copied to clipboard:\\n{url}\",\n    \"inviteModalTitle\": \"Invite Team Member\",\n    \"emailLabel\": \"User Email\",\n    \"roleLabel\": \"Access Role\",\n    \"roleBroadcaster\": \"Broadcaster (Can stream captions)\",\n    \"roleAdmin\": \"Administrator (Can manage channels and users)\",\n    \"sendInviteBtn\": \"Add Member\",\n    \"sendingInvite\": \"Adding...\",\n    \"inviteSuccess\": \"{email} added to team\",\n    \"deleteChannel\": \"Delete Channel\",\n    \"deleteChannelConfirm\": \"Are you sure you want to delete channel \\\"@{channel}\\\"? Audiences tuned in will be disconnected.\",\n    \"switchOrg\": \"Switch Account\",\n    \"signOut\": \"Sign Out\",\n    \"audienceUrl\": \"Audience URL:\",\n    \"qrCode\": \"Audience QR Code\"\n  },\n  \"broadcaster\": {\n    \"fohConsole\": \"Console\",\n    \"audienceStatus\": \"Audience: {count}\",\n    \"audienceOffline\": \"Audience: 0\",\n    \"broadcastStatus\": \"Broadcast: {status}\",\n    \"transcribingStatus\": \"Transcribing: {status}\",\n    \"startBroadcast\": \"Start Broadcast\",\n    \"stopBroadcast\": \"Stop Broadcast\",\n    \"btnStop\": \"Stop\",\n    \"btnPause\": \"Pause\",\n    \"btnBroadcast\": \"Broadcast\",\n    \"starting\": \"Starting...\",\n    \"stopping\": \"Stopping...\",\n    \"audioInputTitle\": \"Audio input & Gate\",\n    \"audioInputSource\": \"Audio Input Source (AUX / USB)\",\n    \"spokenLanguage\": \"Spoken Language\",\n    \"defaultMic\": \"Default System Microphone\",\n    \"inputLevel\": \"Input Level\",\n    \"gateThreshold\": \"Gate Threshold\",\n    \"attackTime\": \"Attack Time\",\n    \"holdTime\": \"Hold Time\",\n    \"gateOpen\": \"GATE OPEN (Streaming Audio)\",\n    \"gateClosed\": \"GATE CLOSED (Audio Suppressed)\",\n    \"gatePaused\": \"PAUSED (NO AUDIENCE)\",\n    \"gateStopped\": \"BROADCAST STOPPED\",\n    \"broadcastStoppedMsg\": \"Broadcast has stopped\",\n    \"testModeTitle\": \"Force transcription\",\n    \"testModeDesc\": \"Force sending audio regardless of mute and number of subscribers.\",\n    \"liveMonitorTitle\": \"Live Caption Preview Monitor\",\n    \"liveMonitorPlaceholder\": \"Transcripts will appear here once speech is detected...\",\n    \"audienceAccess\": \"Audience Access\",\n    \"audienceAccessDesc\": \"Project this QR code or share the URL with attendees.\",\n    \"navWarningTitle\": \"Broadcast is Currently Live!\",\n    \"navWarningDesc\": \"You are currently streaming audio and live captions on {channel}. Navigating away will immediately stop the broadcast, close the audio gate, and disconnect all listeners.\",\n    \"stayOnPage\": \"Keep Broadcasting\",\n    \"leavePage\": \"Stop Broadcast & Leave\"\n  },\n  \"listener\": {\n    \"channel\": \"Channel: {channel}\",\n    \"connecting\": \"Connecting\",\n    \"live\": \"Live\",\n    \"paused\": \"Paused\",\n    \"disconnected\": \"Disconnected\",\n    \"smallerFont\": \"Smaller Font\",\n    \"largerFont\": \"Larger Font\",\n    \"theme\": \"Theme\",\n    \"resumeScroll\": \"Resume Live Scroll\",\n    \"waitingForCaptions\": \"Waiting for speaker to begin...\",\n    \"originalLanguage\": \"Original Language\",\n    \"originalAudio\": \"Original Language\"\n  }\n}","import defaultTranslations from './locales/us-en.json';\n\nexport type TranslationParams = Record<string, string | number>;\nexport type LocaleChangeCallback = (locale: string) => void;\n\nexport interface SupportedLocale {\n  code: string;\n  label: string;\n}\n\nexport const STORAGE_KEY_LOCALE = 'fc_ui_locale';\nexport const DEFAULT_LOCALE = 'en';\n\n// Registered locale dictionaries\nconst localeDictionaries: Map<string, Record<string, any>> = new Map([\n  ['en', defaultTranslations],\n  ['us-en', defaultTranslations],\n]);\n\n// Available locale definitions for UI selectors\nconst supportedLocales: Map<string, SupportedLocale> = new Map([\n  ['en', { code: 'en', label: 'English' }],\n  ['sv', { code: 'sv', label: 'Svenska' }],\n]);\n\nlet activeLocale = DEFAULT_LOCALE;\nconst listeners = new Set<LocaleChangeCallback>();\n\n/**\n * Register a locale dictionary at runtime or build time.\n */\nexport function registerLocale(code: string, dict: Record<string, any>, label?: string): void {\n  const norm = code.toLowerCase();\n  localeDictionaries.set(norm, dict);\n  if (label && !supportedLocales.has(norm)) {\n    supportedLocales.set(norm, { code: norm, label });\n  }\n}\n\n/**\n * Returns list of supported locales with labels for UI dropdowns.\n */\nexport function getSupportedLocales(): SupportedLocale[] {\n  return Array.from(supportedLocales.values());\n}\n\n/**\n * Returns current active locale code (e.g. 'en', 'sv').\n */\nexport function getLocale(): string {\n  return activeLocale;\n}\n\n/**\n * Sets active UI locale, updates <html lang=\"...\">, persists in localStorage, and notifies listeners.\n */\nexport function setLocale(code: string): void {\n  const norm = (code || DEFAULT_LOCALE).toLowerCase();\n  const target = localeDictionaries.has(norm) ? norm : DEFAULT_LOCALE;\n  if (target === activeLocale) return;\n\n  activeLocale = target;\n  try {\n    localStorage.setItem(STORAGE_KEY_LOCALE, activeLocale);\n  } catch {\n    // ignore storage restrictions\n  }\n\n  if (typeof document !== 'undefined' && document.documentElement) {\n    document.documentElement.lang = activeLocale;\n  }\n\n  listeners.forEach((fn) => {\n    try {\n      fn(activeLocale);\n    } catch (err) {\n      console.error('[i18n] Error in locale change callback:', err);\n    }\n  });\n\n  // Re-translate current DOM when locale changes\n  translateDOM();\n}\n\n/**\n * Subscribe to locale change events. Returns an unsubscribe function.\n */\nexport function onLocaleChange(callback: LocaleChangeCallback): () => void {\n  listeners.add(callback);\n  return () => listeners.delete(callback);\n}\n\n/**\n * Initialize i18n subsystem: detects preferred language from localStorage or navigator.\n */\nexport function initI18n(extraLocales?: Record<string, Record<string, any>>): void {\n  if (extraLocales) {\n    for (const [code, dict] of Object.entries(extraLocales)) {\n      registerLocale(code, dict);\n    }\n  }\n\n  let savedLocale: string | null = null;\n  try {\n    savedLocale = localStorage.getItem(STORAGE_KEY_LOCALE);\n  } catch {\n    // ignore\n  }\n\n  if (savedLocale && localeDictionaries.has(savedLocale.toLowerCase())) {\n    activeLocale = savedLocale.toLowerCase();\n  } else if (typeof navigator !== 'undefined' && navigator.language) {\n    const navLang = navigator.language.toLowerCase();\n    const shortLang = navLang.split('-')[0];\n    if (localeDictionaries.has(navLang)) {\n      activeLocale = navLang;\n    } else if (localeDictionaries.has(shortLang)) {\n      activeLocale = shortLang;\n    }\n  }\n\n  if (typeof document !== 'undefined' && document.documentElement) {\n    document.documentElement.lang = activeLocale;\n  }\n\n  translateDOM();\n}\n\nfunction resolveKey(dict: any, key: string): string | null {\n  const parts = key.split('.');\n  let val: any = dict;\n  for (const part of parts) {\n    if (val && typeof val === 'object' && part in val) {\n      val = val[part];\n    } else {\n      return null;\n    }\n  }\n  return typeof val === 'string' ? val : null;\n}\n\n/**\n * Translates a key using active locale, falling back to English default translations, then to key itself.\n */\nexport function t(key: string, params?: TranslationParams): string {\n  // 1. Try active locale dictionary\n  const activeDict = localeDictionaries.get(activeLocale);\n  let val = activeDict ? resolveKey(activeDict, key) : null;\n\n  // 2. Fall back to default English translations\n  if (val === null && activeLocale !== DEFAULT_LOCALE) {\n    val = resolveKey(defaultTranslations, key);\n  }\n\n  // 3. Fall back to the key itself\n  if (val === null) {\n    return key;\n  }\n\n  // 4. Parameter substitution {name}\n  if (params) {\n    return Object.entries(params).reduce((str, [k, v]) => {\n      return str.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), String(v));\n    }, val);\n  }\n\n  return val;\n}\n\n/**\n * Scans DOM elements for data-i18n-* attributes and updates textContent, placeholder, title, or aria-label safely.\n */\nexport function translateDOM(root?: HTMLElement | Document): void {\n  const scope = root || (typeof document !== 'undefined' ? document : null);\n  if (!scope) return;\n\n  // [data-i18n] -> textContent\n  scope.querySelectorAll<HTMLElement>('[data-i18n]').forEach((el) => {\n    const key = el.getAttribute('data-i18n');\n    if (key) {\n      const translated = t(key);\n      if (translated && translated !== key) {\n        el.textContent = translated;\n      }\n    }\n  });\n\n  // [data-i18n-placeholder] -> placeholder\n  scope.querySelectorAll<HTMLInputElement | HTMLTextAreaElement>('[data-i18n-placeholder]').forEach((el) => {\n    const key = el.getAttribute('data-i18n-placeholder');\n    if (key) {\n      const translated = t(key);\n      if (translated && translated !== key) {\n        el.placeholder = translated;\n      }\n    }\n  });\n\n  // [data-i18n-title] -> title\n  scope.querySelectorAll<HTMLElement>('[data-i18n-title]').forEach((el) => {\n    const key = el.getAttribute('data-i18n-title');\n    if (key) {\n      const translated = t(key);\n      if (translated && translated !== key) {\n        el.title = translated;\n      }\n    }\n  });\n\n  // [data-i18n-aria-label] -> aria-label\n  scope.querySelectorAll<HTMLElement>('[data-i18n-aria-label]').forEach((el) => {\n    const key = el.getAttribute('data-i18n-aria-label');\n    if (key) {\n      const translated = t(key);\n      if (translated && translated !== key) {\n        el.setAttribute('aria-label', translated);\n      }\n    }\n  });\n}\n","import { EVENT_CHANGE, STORAGE_THEME_PREFERENCE } from './core/strings';\n\nexport type AppTheme = 'dark' | 'light' | 'high-contrast';\n\nconst THEME_STORAGE_KEY = STORAGE_THEME_PREFERENCE;\ntype ThemeChangeListener = (theme: AppTheme) => void;\nconst listeners: ThemeChangeListener[] = [];\n\n/**\n * Returns the effective theme based on system preference and user override.\n * Default is 'dark'.\n */\nexport function getSystemPreferredTheme(): AppTheme {\n  if (typeof window !== 'undefined' && window.matchMedia) {\n    if (window.matchMedia('(prefers-color-scheme: light)').matches) {\n      return 'light';\n    }\n  }\n  return 'dark';\n}\n\nexport function getCurrentTheme(): AppTheme {\n  const saved = localStorage.getItem(THEME_STORAGE_KEY);\n  if (saved === 'dark' || saved === 'light' || saved === 'high-contrast') {\n    return saved;\n  }\n  return getSystemPreferredTheme();\n}\n\nexport function applyTheme(theme: AppTheme): void {\n  document.documentElement.setAttribute('data-theme', theme);\n  document.body.setAttribute('data-theme', theme);\n\n  // Update color-scheme meta for mobile browser chrome\n  let metaTheme = document.querySelector('meta[name=\"color-scheme\"]') as HTMLMetaElement;\n  if (!metaTheme) {\n    metaTheme = document.createElement('meta');\n    metaTheme.name = 'color-scheme';\n    document.head.appendChild(metaTheme);\n  }\n  metaTheme.content = theme === 'light' ? 'light' : 'dark';\n\n  listeners.forEach((cb) => cb(theme));\n}\n\nexport function setTheme(theme: AppTheme): void {\n  localStorage.setItem(THEME_STORAGE_KEY, theme);\n  applyTheme(theme);\n}\n\nexport function toggleTheme(): AppTheme {\n  const current = getCurrentTheme();\n  let next: AppTheme = 'dark';\n  if (current === 'dark') {\n    next = 'light';\n  } else if (current === 'light') {\n    next = 'high-contrast';\n  } else {\n    next = 'dark';\n  }\n  setTheme(next);\n  return next;\n}\n\nexport function onThemeChange(cb: ThemeChangeListener): () => void {\n  listeners.push(cb);\n  return () => {\n    const idx = listeners.indexOf(cb);\n    if (idx !== -1) listeners.splice(idx, 1);\n  };\n}\n\n/**\n * Initializes theme system:\n * 1. Checks localStorage override, or follows desktop prefers-color-scheme.\n * 2. Defaults to 'dark'.\n * 3. Listens for OS system theme changes.\n */\nexport function initTheme(): AppTheme {\n  const initial = getCurrentTheme();\n  applyTheme(initial);\n\n  if (typeof window !== 'undefined' && window.matchMedia) {\n    const mediaQuery = window.matchMedia('(prefers-color-scheme: light)');\n    const handleSystemChange = (e: MediaQueryListEvent) => {\n      const manualOverride = localStorage.getItem(THEME_STORAGE_KEY);\n      // If user hasn't explicitly set a preference, follow desktop theme\n      if (!manualOverride) {\n        applyTheme(e.matches ? 'light' : 'dark');\n      }\n    };\n\n    if (mediaQuery.addEventListener) {\n      mediaQuery.addEventListener(EVENT_CHANGE, handleSystemChange);\n    } else if ((mediaQuery as any).addListener) {\n      (mediaQuery as any).addListener(handleSystemChange);\n    }\n  }\n\n  return initial;\n}\n","/**\n * Browser Compatibility Checker\n * Verifies that the client browser meets modern standards (such as Zstandard compression)\n * and displays an actionable notice if an outdated browser is detected.\n */\n\nexport function isZstdSupported(): boolean {\n  const ua = navigator.userAgent;\n\n  // Check for Microsoft Edge (Chromium based)\n  const edgeMatch = ua.match(/Edg\\/(\\d+)/);\n  if (edgeMatch) {\n    return parseInt(edgeMatch[1], 10) >= 123;\n  }\n\n  // Check for Google Chrome / Chromium based browsers (Opera, Brave, Vivaldi, etc.)\n  const chromeMatch = ua.match(/Chrome\\/(\\d+)/);\n  if (chromeMatch) {\n    return parseInt(chromeMatch[1], 10) >= 123;\n  }\n\n  // Check for Mozilla Firefox\n  const firefoxMatch = ua.match(/Firefox\\/(\\d+)/);\n  if (firefoxMatch) {\n    return parseInt(firefoxMatch[1], 10) >= 126;\n  }\n\n  // Check for Apple Safari (desktop and iOS)\n  const safariVersionMatch = ua.match(/Version\\/(\\d+)/);\n  if (safariVersionMatch && ua.includes('Safari')) {\n    return parseInt(safariVersionMatch[1], 10) >= 18;\n  }\n  const iosMatch = ua.match(/OS (\\d+)_/);\n  if (iosMatch) {\n    return parseInt(iosMatch[1], 10) >= 18;\n  }\n\n  // Allow unknown / automated environments (e.g. headless tests)\n  return true;\n}\n\n/**\n * Generic browser compatibility check.\n * Evaluates core browser capabilities and returns whether the browser is supported.\n */\nexport function checkBrowserCompatibility(): boolean {\n  if (!isZstdSupported()) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Checks compatibility and renders a prominent notice banner if unsupported.\n * Returns true if compatible, false if incompatible.\n */\nexport function enforceBrowserCompatibility(): boolean {\n  if (checkBrowserCompatibility()) {\n    return true;\n  }\n\n  if (document.getElementById('browser-compat-banner')) {\n    return false;\n  }\n\n  const banner = document.createElement('div');\n  banner.id = 'browser-compat-banner';\n  banner.className = 'browser-compat-banner';\n  banner.setAttribute('role', 'alert');\n  banner.innerHTML = `\n    <div class=\"browser-compat-content\">\n      <div class=\"browser-compat-title\">\n        <svg class=\"browser-compat-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n          <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n          <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n        </svg>\n        <span>Your browser is not supported, please use one of these:</span>\n      </div>\n      <ul class=\"browser-compat-list\">\n        <li><strong>Google Chrome</strong> (version 123+)</li>\n        <li><strong>Mozilla Firefox</strong> (version 126+)</li>\n        <li><strong>Apple Safari</strong> (version 18+, iOS 18+)</li>\n        <li><strong>Microsoft Edge</strong> (version 123+)</li>\n      </ul>\n      <button class=\"browser-compat-dismiss\" id=\"browser-compat-dismiss-btn\" aria-label=\"Dismiss warning\">&times;</button>\n    </div>\n  `;\n\n  document.body.prepend(banner);\n\n  const dismissBtn = document.getElementById('browser-compat-dismiss-btn');\n  if (dismissBtn) {\n    dismissBtn.addEventListener('click', () => {\n      banner.remove();\n    });\n  }\n\n  return false;\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],"mappings":"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"}