PK TRF^^index.js(function (global, factory) { if (typeof define === "function" && define.amd) { define(["exports"], factory); } else if (typeof exports !== "undefined") { factory(exports); } else { var mod = { exports: {} }; factory(mod.exports); global.unknown = mod.exports; } })(this, function (_exports) { "use strict"; Object.defineProperty(_exports, "__esModule", { value: true }); _exports.default = void 0; !function (global) { "use strict"; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; var inModule = typeof module === "object"; var runtime = global.regeneratorRuntime; if (runtime) { if (inModule) { module.exports = runtime; } return; } runtime = global.regeneratorRuntime = inModule ? module.exports || {} : {}; function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } runtime.wrap = wrap; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { prototype[method] = function (arg) { return this._invoke(method, arg); }; }); } runtime.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; runtime.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; if (!(toStringTagSymbol in genFun)) { genFun[toStringTagSymbol] = "GeneratorFunction"; } } genFun.prototype = Object.create(Gp); return genFun; }; runtime.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && typeof value === "object" && hasOwn.call(value, "__await")) { return Promise.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return Promise.resolve(value).then(function (unwrapped) { result.value = unwrapped; resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new Promise(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; runtime.AsyncIterator = AsyncIterator; runtime.async = function (innerFn, outerFn, self, tryLocsList) { var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); return runtime.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator.return) { context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); Gp[toStringTagSymbol] = "Generator"; Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } runtime.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } return { next: doneResult }; } runtime.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function (skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function () { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function (exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function (type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function (record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function (finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function (tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function (iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined; } return ContinueSentinel; } }; }(function () { return this || typeof self === "object" && self; }() || Function("return this")()); const disableBlocks = { debug: [], upload: [] }; const mustLoginBlocks = []; const triggerBlocksStatus = async (mode, app) => {}; class ExtImpl {} const extTranslationMap = { "zh": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "de": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "es": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "fr": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "id": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "ja": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "ja-jph": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "ko": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "pl": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "uk": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "zh-hant": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "nl": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "it": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "hr": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "ru": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "pt": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "fi": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "tr": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "tk": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }, "en": { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" } }; const codeSnippets = { arduinoc: {} }; const extGenerators = [{ lang: 'arduinoc', template: `// generated by mBlock5 for // codes make you happy //( include //) #include //( lib //) //({ this.$ALL_VARIABLES.length==0?'':this.$ALL_VARIABLES.map(v=>"float "+v+" = 0;").join('\\n') }//) //( declare //) void _delay(float seconds) { long endTime = millis() + seconds * 1000; while(millis() < endTime) _loop(); } //( void setup() { //( setup //) //( code //) } //) void _loop() { //( _loop //) } void loop() { _loop(); }`, splitor: { frame: { left: "//(", right: "//)" }, expression: { left: "/*{", right: "}*/" } }, reducers: [{ name: 'include', reduce: codes => { let codes1 = []; for (let code of codes) { let codeStr = ''; if (typeof code === 'string') { codeStr = code; } else if (typeof code === 'function') { codeStr = code(); } if (codes1.indexOf(codeStr) === -1) { codes1.push(codeStr); } } if (codes1.length === 0) { return undefined; } return codes1.map(code => { return '#include ' + code; }).join('\n') + '\n'; } }] }]; const extSources = { arduino: [] }; const extFacePanels = {}; const ExtHandler = { onLoad: function onLoad(app, target) { const that = this; if (!that.__workerSetupInstance) { that.__workerSetupInstance = that.workerSetup({ app }).then(() => { that.worker.remote.runExtension('onLoad', target.id); }); } }, onUnload: function onUnload(app) { this.__workerSetupInstance = null; this.worker.remote.runExtension('onUnload'); this.worker.dispose(); }, onConnect: function onConnect(app, device) { this.worker.remote.runExtension('onConnect', device.id); }, onDisconnect: function onDisconnect(app, device) { this.worker.remote.runExtension('onDisconnect', device.id); }, onStopAll: function onStopAll(app, device) { this.worker.remote.runExtension('onStopAll', device.id); }, beforeChangeUploadMode: function beforeChangeUploadMode(app, device) { return this.worker.remote.runExtension('beforeChangeUploadMode', device.id); }, beforeChangeDebugMode: function beforeChangeDebugMode(app, device) { return this.worker.remote.runExtension('beforeChangeDebugMode', device.id); }, afterChangeUploadMode: function afterChangeUploadMode(app, device) { this.worker.remote.runExtension('afterChangeUploadMode', device.id); }, afterChangeDebugMode: function afterChangeDebugMode(app, device) { this.worker.remote.runExtension('afterChangeDebugMode', device.id); }, onSelect: function onSelect(app, device) { if (!this.worker) { setTimeout(() => { this.onSelect(app, device); }, 200); return; } this.worker.remote.runExtension('onSelect', device.id); }, onUnselect: function onUnselect(app, device) { this.worker.remote.runExtension('onUnselect', device.id); }, beforeCodeUpload: function beforeCodeUpload(app, device) { this.worker.remote.runExtension('beforeCodeUpload', device.id); }, afterCodeUpload: function afterCodeUpload(app, device) { this.worker.remote.runExtension('afterCodeUpload', device.id); }, onRead: function onRead(app, device) { this.worker.remote.runExtension('onRead', device.id); }, beforeFirmwareUpdate: function beforeFirmwareUpdate(app, device) { this.worker.remote.runExtension('beforeFirmwareUpdate', device.id); }, afterFirmwareUpdate: function afterFirmwareUpdate(app, device) { this.worker.remote.runExtension('afterFirmwareUpdate', device.id); } }; class ExtVdrGroveBluetooth { constructor() { this.checkFirmwareInForce = typeof checkFirmwareInForce !== 'undefined' ? checkFirmwareInForce : false; const handlerProxyUrl = window.MbApi.getExtResPath('vdr_grove_bluetooth/handlerProxy.js', 'vdr_grove_bluetooth'); const that = this; that.workerSetup = async function (exports) { that.worker = await window.__web_worker_rpc.create(handlerProxyUrl, exports).then(worker => { worker.CONFIG.TIMEOUT = 42000; worker.CONFIG.HEARTBEAT = 4200; worker.onFail = () => { that.worker = null; that.workerSetup(exports); const app = exports.app; if (app) { app.workspace.resetEvents(); } }; return worker; }); }; this.funcs = { 'BLOCK_1653808801951': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1653808801951', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1653808802310': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1653808802310', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1653808802636': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1653808802636', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1653808803285': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1653808803285', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1653808802950': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1653808802950', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1653808803574': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1653808803574', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } } }; } getInfo() { return { "id": "vdr_grove_bluetooth", "targets": [{ "name": "arduino_mega2560", "options": { "upload": { "middlewares": [{ "name": "arduino", "params": { "sources": extSources.arduino } }] } } }, { "name": "arduino_uno", "options": { "upload": { "middlewares": [{ "name": "arduino", "params": { "sources": extSources.arduino } }] } } }], "codeTypes": ["arduinoc"], "version": "1.0.0", "platform": ["mblockpc"], "categories": [{ "name": "cate_ae1092b3", "colors": ["#05A6FF", "#0097EA", "#0086D0"], "menuIconURI": "", "blockIcon": { "type": "image", "width": 28, "height": 26, "src": window.MbApi.getExtResPath('vdr_grove_bluetooth/imgs/93e30a2f60634103947286788fb67b56.png', 'vdr_grove_bluetooth') }, "blocks": [{ "opcode": "BLOCK_1653808801951", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "pinsDigit": { "type": "fieldMenu", "defaultValue": "2", "menu": "BLOCK_1653808801951_PINSDIGIT" } }, "branchCount": 0, "codes": { "arduinoc": { "sections": { "declare": `SoftwareSerial BTSerial(/*{pinsDigit}*/,/*{pinsDigit}*/+1);`, "setup": `BTSerial.begin(9600);` } } }, "handler": this.funcs.BLOCK_1653808801951 }, { "opcode": "BLOCK_1653808802310", "blockType": "boolean", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `BTSerial.available()` } }, "handler": this.funcs.BLOCK_1653808802310 }, { "opcode": "BLOCK_1653808802636", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `BTSerial.read()` } }, "handler": this.funcs.BLOCK_1653808802636 }, { "opcode": "BLOCK_1653808803285", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "numberToSend": { "type": "number", "defaultValue": 1 } }, "branchCount": 0, "codes": { "arduinoc": { "code": `if (/*{numberToSend}*/!=0) BTSerial.print(/*{numberToSend}*/);\r` } }, "handler": this.funcs.BLOCK_1653808803285 }, { "opcode": "BLOCK_1653808802950", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `getBtString()`, "sections": { "declare": `String getBtString(){\r\n String command = \"\";\r\n while(BTSerial.available()) // While there is more to be read, keep reading.\r\n {\r\n delay(10); //Delay added to make things stable\r\n char c = BTSerial.read(); //Conduct a serial read\r\n command += c; //build the string.\r\n }\r\n return command;\r\n}` } } }, "handler": this.funcs.BLOCK_1653808802950 }, { "opcode": "BLOCK_1653808803574", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "txtToSend ": { "type": "string", "defaultValue": "A" }, "mode": { "type": "fieldMenu", "defaultValue": "0", "menu": "BLOCK_1653808803574_MODE" } }, "branchCount": 0, "codes": { "arduinoc": { "code": `BTsendText( /*{txtToSend}*/,/*{mode}*)`, "sections": { "declare": `BTsendText(String TxtToSend, int mode){\r\n switch (mode) {\r\n case 0:\r\n BTSerial.print(txtToSend);\r\n break;\r\n case 1:\r\n BTSerial.print(txtToSend);\r\n BTSerial.print(\",\");\r\n break;\r\n case 2:\r\n BTSerial.print(txtToSend);\r\n BTSerial.print(\"\\n\");\r\n break;\r\n }\r\n}` } } }, "handler": this.funcs.BLOCK_1653808803574 }], "menus": { "BLOCK_1653808801951_PINSDIGIT": [{ "text": "BLOCK_1653808801951_PINSDIGIT_0", "value": "2" }, { "text": "BLOCK_1653808801951_PINSDIGIT_1", "value": "3" }, { "text": "BLOCK_1653808801951_PINSDIGIT_2", "value": "4" }, { "text": "BLOCK_1653808801951_PINSDIGIT_3", "value": "5" }, { "text": "BLOCK_1653808801951_PINSDIGIT_4", "value": "6" }, { "text": "BLOCK_1653808801951_PINSDIGIT_5", "value": "7" }, { "text": "BLOCK_1653808801951_PINSDIGIT_6", "value": "8" }], "BLOCK_1653808803574_MODE": [{ "text": "BLOCK_1653808803574_MODE_0", "value": "0" }, { "text": "BLOCK_1653808803574_MODE_1", "value": "1" }, { "text": "BLOCK_1653808803574_MODE_2", "value": "2" }] } }], "generators": extGenerators, "translationMap": extTranslationMap, "snippets": codeSnippets, "generatorStartBlocks": [], "feature": ["worker"], "mustLoginBlocks": [], "disabledOffline": [], "disabledOnline": [] }; } getHandler() { if (typeof ExtHandler === 'object') { return ExtHandler; } else if (typeof ExtHandler === 'function') { return new ExtHandler(); } } } var _default = ExtVdrGroveBluetooth; _exports.default = _default; });PK T\44handlerProxy.js"use strict";function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}var gen=fn.apply(self,args);_next(void 0)})}}function _instanceof(left,right){return null!=right&&"undefined"!=typeof Symbol&&right[Symbol.hasInstance]?!!right[Symbol.hasInstance](left):left instanceof right}function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}self.rpc.CONFIG.TIMEOUT=42e3,self.rpc.CONFIG.HEARTBEAT=4200;var __context={app:self.rpc.remote.app,getDevice:function(deviceId){return new Proxy({},{get:function get(target,name){return"id"==name?deviceId:function(){for(var runDevice=__context.app.runDevice,_len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return runDevice.apply(void 0,[deviceId,name].concat(args))}}})}};!function(global){"use strict";function wrap(innerFn,outerFn,self,tryLocsList){var protoGenerator=outerFn&&_instanceof(outerFn.prototype,Generator)?outerFn:Generator,generator=Object.create(protoGenerator.prototype),context=new Context(tryLocsList||[]);return generator._invoke=makeInvokeMethod(innerFn,self,context),generator}function tryCatch(fn,obj,arg){try{return{type:"normal",arg:fn.call(obj,arg)}}catch(err){return{type:"throw",arg:err}}}function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}function defineIteratorMethods(prototype){["next","throw","return"].forEach(function(method){prototype[method]=function(arg){return this._invoke(method,arg)}})}function AsyncIterator(generator){function invoke(method,arg,resolve,reject){var record=tryCatch(generator[method],generator,arg);if("throw"===record.type)reject(record.arg);else{var result=record.arg,value=result.value;return value&&"object"===_typeof(value)&&hasOwn.call(value,"__await")?Promise.resolve(value.__await).then(function(value){invoke("next",value,resolve,reject)},function(err){invoke("throw",err,resolve,reject)}):Promise.resolve(value).then(function(unwrapped){result.value=unwrapped,resolve(result)},function(error){return invoke("throw",error,resolve,reject)})}}function enqueue(method,arg){function callInvokeWithMethodAndArg(){return new Promise(function(resolve,reject){invoke(method,arg,resolve,reject)})}return previousPromise=previousPromise?previousPromise.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}var previousPromise;this._invoke=enqueue}function makeInvokeMethod(innerFn,self,context){var state="suspendedStart";return function(method,arg){if(state==="executing")throw new Error("Generator is already running");if("completed"===state){if("throw"===method)throw arg;return doneResult()}for(context.method=method,context.arg=arg;;){var delegate=context.delegate;if(delegate){var delegateResult=maybeInvokeDelegate(delegate,context);if(delegateResult){if(delegateResult===ContinueSentinel)continue;return delegateResult}}if("next"===context.method)context.sent=context._sent=context.arg;else if("throw"===context.method){if("suspendedStart"===state)throw state="completed",context.arg;context.dispatchException(context.arg)}else"return"===context.method&&context.abrupt("return",context.arg);state="executing";var record=tryCatch(innerFn,self,context);if("normal"===record.type){if(state=context.done?"completed":"suspendedYield",record.arg===ContinueSentinel)continue;return{value:record.arg,done:context.done}}"throw"===record.type&&(state="completed",context.method="throw",context.arg=record.arg)}}}function maybeInvokeDelegate(delegate,context){var method=delegate.iterator[context.method];if(void 0===method){if(context.delegate=null,"throw"===context.method){if(delegate.iterator.return&&(context.method="return",context.arg=void 0,maybeInvokeDelegate(delegate,context),"throw"===context.method))return ContinueSentinel;context.method="throw",context.arg=new TypeError("The iterator does not provide a 'throw' method")}return ContinueSentinel}var record=tryCatch(method,delegate.iterator,context.arg);if("throw"===record.type)return context.method="throw",context.arg=record.arg,context.delegate=null,ContinueSentinel;var info=record.arg;if(!info)return context.method="throw",context.arg=new TypeError("iterator result is not an object"),context.delegate=null,ContinueSentinel;if(info.done)context[delegate.resultName]=info.value,context.next=delegate.nextLoc,"return"!==context.method&&(context.method="next",context.arg=void 0);else return info;return context.delegate=null,ContinueSentinel}function pushTryEntry(locs){var entry={tryLoc:locs[0]};1 in locs&&(entry.catchLoc=locs[1]),2 in locs&&(entry.finallyLoc=locs[2],entry.afterLoc=locs[3]),this.tryEntries.push(entry)}function resetTryEntry(entry){var record=entry.completion||{};record.type="normal",delete record.arg,entry.completion=record}function Context(tryLocsList){this.tryEntries=[{tryLoc:"root"}],tryLocsList.forEach(pushTryEntry,this),this.reset(!0)}function values(iterable){if(iterable){var iteratorMethod=iterable[iteratorSymbol];if(iteratorMethod)return iteratorMethod.call(iterable);if("function"==typeof iterable.next)return iterable;if(!isNaN(iterable.length)){var i=-1,next=function next(){for(;++i= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end") } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true) } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc) } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true) } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc) } } else { throw new Error("try statement without catch or finally") } } } }, abrupt: function(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel } return this.complete(record) }, complete: function(record, afterLoc) { if (record.type === "throw") { throw record.arg } if (record.type === "break" || record.type === "continue") { this.next = record.arg } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end" } else if (record.type === "normal" && afterLoc) { this.next = afterLoc } return ContinueSentinel }, finish: function(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel } } }, "catch": function(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry) } return thrown } } throw new Error("illegal catch attempt") }, delegateYield: function(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined } return ContinueSentinel } } }(function() { return this || typeof self === "object" && self }() || Function("return this")()); // enter your javascript code here const disableBlocks = { debug: [], upload: [] }; const mustLoginBlocks = []; const triggerBlocksStatus = async (mode, app) => {} class ExtVdrGroveBluetooth { constructor() { this.funcs = { 'BLOCK_1653808801951': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1653808801951', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1653808802310': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1653808802310', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1653808802636': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1653808802636', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1653808803285': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1653808803285', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1653808802950': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1653808802950', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1653808803574': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1653808803574', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } } }; } getInfo() { return { "id": "vdr_grove_bluetooth", "targets": [{ "name": "arduino_mega2560", "options": { "upload": { "middlewares": [{ "name": "arduino", "params": { "sources": extSources.arduino } }] } } }, { "name": "arduino_uno", "options": { "upload": { "middlewares": [{ "name": "arduino", "params": { "sources": extSources.arduino } }] } } } ], "codeTypes": [ "arduinoc" ], "version": "1.0.0", "platform": [ "mblockpc" ], "categories": cates(facepanels), "generators": extGenerators, "translationMap": extTranslationMap, "snippets": codeSnippets, "generatorStartBlocks": [], "feature": [ "worker" ], "mustLoginBlocks": [], "disabledOffline": [], "disabledOnline": [] }; } getHandler() { if (typeof extHandler === 'object') { return extHandler; } else if (typeof extHandler === 'function') { return new extHandler(); } } } export default ExtVdrGroveBluetooth;PK T"v&&src/snippets.jsexport default [ "arduinoc: {}" ];PK TI~src/generators.jsexport default [({ lang: 'arduinoc', template: `// generated by mBlock5 for // codes make you happy //( include //) #include //( lib //) //({ this.$ALL_VARIABLES.length==0?'':this.$ALL_VARIABLES.map(v=>"float "+v+" = 0;").join('\\n') }//) //( declare //) void _delay(float seconds) { long endTime = millis() + seconds * 1000; while(millis() < endTime) _loop(); } //( void setup() { //( setup //) //( code //) } //) void _loop() { //( _loop //) } void loop() { _loop(); }`, splitor: { frame: { left: "//(", right: "//)", }, expression: { left: "/*{", right: "}*/", } }, reducers: [{ name: 'include', reduce: (codes) => { let codes1 = [] for (let code of codes) { let codeStr = ''; if (typeof code === 'string') { codeStr = code; } else if (typeof code === 'function') { codeStr = code(); } if (codes1.indexOf(codeStr) === -1) { codes1.push(codeStr); } } if (codes1.length === 0) { return undefined; } return codes1.map(code => { return '#include ' + code; }).join('\n') + '\n' } }] })];PK T)src/arduinosources.jsexport default [];PK TEsrc/facepanels.jsexport default {};PK T_[[src/exthandler.jsconst ExtHandler = { // when extension is loaded onLoad(app, target) {}, // when extension is unloaded onUnload(app) { // TODO }, // when device is connected onConnect(app, device) { // TODO }, // when device is disconnected onDisconnect(app, device) { // TODO }, // when stop button is clicked onStopAll(app, device) { // TODO }, // before switch to upload mode beforeChangeUploadMode(app, device) { // TODO return true; }, // before switch to debug mode beforeChangeDebugMode(app, device) { // TODO return true; }, // after switched to upload mode afterChangeUploadMode(app, device) { // TODO return true; }, // after switched to debug mode afterChangeDebugMode(app, device) { // TODO return true; }, // when device is selected onSelect(app, device) { // TODO }, // when device is unselected onUnselect(app, device) { // TODO }, // before upload code beforeCodeUpload(app, device) { // TODO }, // after code uploaded afterCodeUpload(app, device) { // TODO }, // when receiving and reading byte onRead(app, device) { // TODO } } export default ExtHandler;PK TjVDDsrc/handlerProxy.jsself.rpc.CONFIG.TIMEOUT = 42000; self.rpc.CONFIG.HEARTBEAT = 4200; const __context = { app: self.rpc.remote.app, getDevice: function getDevice(deviceId) { return new Proxy({}, { get(target, name) { if (name == "id") { return deviceId; } return function (...args) { let runDevice = __context.app.runDevice; return runDevice(deviceId, name, ...args); }; } }); } }; !function (global) { "use strict"; var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; var inModule = typeof module === "object"; var runtime = global.regeneratorRuntime; if (runtime) { if (inModule) { module.exports = runtime; } return; } runtime = global.regeneratorRuntime = inModule ? module.exports || {} : {}; function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } runtime.wrap = wrap; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { prototype[method] = function (arg) { return this._invoke(method, arg); }; }); } runtime.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; runtime.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; if (!(toStringTagSymbol in genFun)) { genFun[toStringTagSymbol] = "GeneratorFunction"; } } genFun.prototype = Object.create(Gp); return genFun; }; runtime.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && typeof value === "object" && hasOwn.call(value, "__await")) { return Promise.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return Promise.resolve(value).then(function (unwrapped) { result.value = unwrapped; resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new Promise(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; runtime.AsyncIterator = AsyncIterator; runtime.async = function (innerFn, outerFn, self, tryLocsList) { var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); return runtime.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator.return) { context.method = "return"; context.arg = undefined; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); Gp[toStringTagSymbol] = "Generator"; Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } runtime.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined; next.done = true; return next; }; return next.next = next; } } return { next: doneResult }; } runtime.values = values; function doneResult() { return { value: undefined, done: true }; } Context.prototype = { constructor: Context, reset: function (skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined; } } } }, stop: function () { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function (exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function (type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function (record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function (finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function (tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function (iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined; } return ContinueSentinel; } }; }(function () { return this || typeof self === "object" && self; }() || Function("return this")()); const disableBlocks = { debug: [], upload: [] }; const mustLoginBlocks = []; const triggerBlocksStatus = async (mode, app) => {}; const blockHandlers = { 'BLOCK_1653808801951': { onRun: (args, app, device, block) => {} }, 'BLOCK_1653808802310': { onRun: (args, app, device, block) => {} }, 'BLOCK_1653808802636': { onRun: (args, app, device, block) => {} }, 'BLOCK_1653808803285': { onRun: (args, app, device, block) => {} }, 'BLOCK_1653808802950': { onRun: (args, app, device, block) => {} }, 'BLOCK_1653808803574': { onRun: (args, app, device, block) => {} } }; const ExtHandler = { onLoad(app, target) {}, onUnload(app) {}, onConnect(app, device) {}, onDisconnect(app, device) {}, onStopAll(app, device) {}, beforeChangeUploadMode(app, device) { return true; }, beforeChangeDebugMode(app, device) { return true; }, afterChangeUploadMode(app, device) { return true; }, afterChangeDebugMode(app, device) { return true; }, onSelect(app, device) {}, onUnselect(app, device) {}, beforeCodeUpload(app, device) {}, afterCodeUpload(app, device) {}, onRead(app, device) {} }; self.rpc.exports = { runBlock: function runBlock(opcode, method, deviceId, block, args) { var blockHandler = blockHandlers[opcode]; if (!blockHandler) { console.error('cannot find opcode of ' + opcode); return null; } var handle = blockHandler[method]; let app = __context.app; let device = __context.getDevice(deviceId); if (method === 'onRun') { return handle(args, app, device, block); } else { return handle(app, device, block); } }, runExtension: function runExtension(srcMethod, deviceId) { var method = ExtHandler[srcMethod]; if (!method) { console.error('method of ' + srcMethod + ' is no valid'); return null; } let app = __context.app; if (deviceId) { let device = __context.getDevice(deviceId); return method(app, device); } else { return method(app); } } };PK T src/cates/PK Tsrc/cates/cate_ae1092b3/PK TQ  src/cates/cate_ae1092b3/index.jsimport blocks from './blocks.js'; const cate_ae1092b3 = (facepanels) => ({ "name": "cate_ae1092b3", "colors": [ "#05A6FF", "#0097EA", "#0086D0" ], "menuIconURI": "", "blockIcon": { "type": "image", "width": 28, "height": 26, "src": window.MbApi.getExtResPath('vdr_grove_bluetooth/imgs/93e30a2f60634103947286788fb67b56.png', 'vdr_grove_bluetooth') }, "blocks": blocks(facepanels), "menus": { "BLOCK_1653808801951_PINSDIGIT": [{ "text": "BLOCK_1653808801951_PINSDIGIT_0", "value": "2" }, { "text": "BLOCK_1653808801951_PINSDIGIT_1", "value": "3" }, { "text": "BLOCK_1653808801951_PINSDIGIT_2", "value": "4" }, { "text": "BLOCK_1653808801951_PINSDIGIT_3", "value": "5" }, { "text": "BLOCK_1653808801951_PINSDIGIT_4", "value": "6" }, { "text": "BLOCK_1653808801951_PINSDIGIT_5", "value": "7" }, { "text": "BLOCK_1653808801951_PINSDIGIT_6", "value": "8" } ], "BLOCK_1653808803574_MODE": [{ "text": "BLOCK_1653808803574_MODE_0", "value": "0" }, { "text": "BLOCK_1653808803574_MODE_1", "value": "1" }, { "text": "BLOCK_1653808803574_MODE_2", "value": "2" } ] } }); export default cate_ae1092b3;PK T3ϐsrc/cates/index.jsimport cate_ae1092b3 from './cate_ae1092b3/index.js'; const cates = (facepanels) => ([ cate_ae1092b3(facepanels) ]); export default cates;PK T^!src/cates/cate_ae1092b3/blocks.jsconst blocks = (extFacePanels) => ([{ "opcode": "BLOCK_1653808801951", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "pinsDigit": { "type": "fieldMenu", "defaultValue": "2", "menu": "BLOCK_1653808801951_PINSDIGIT" } }, "branchCount": 0, "codes": { "arduinoc": { "sections": { "declare": `SoftwareSerial BTSerial(/*{pinsDigit}*/,/*{pinsDigit}*/+1);`, "setup": `BTSerial.begin(9600);` } } }, "handler": this.funcs.BLOCK_1653808801951 }, { "opcode": "BLOCK_1653808802310", "blockType": "boolean", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `BTSerial.available()` } }, "handler": this.funcs.BLOCK_1653808802310 }, { "opcode": "BLOCK_1653808802636", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `BTSerial.read()` } }, "handler": this.funcs.BLOCK_1653808802636 }, { "opcode": "BLOCK_1653808803285", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "numberToSend": { "type": "number", "defaultValue": 1 } }, "branchCount": 0, "codes": { "arduinoc": { "code": `if (/*{numberToSend}*/!=0) BTSerial.print(/*{numberToSend}*/);\r` } }, "handler": this.funcs.BLOCK_1653808803285 }, { "opcode": "BLOCK_1653808802950", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `getBtString()`, "sections": { "declare": `String getBtString(){\r\n String command = \"\";\r\n while(BTSerial.available()) // While there is more to be read, keep reading.\r\n {\r\n delay(10); //Delay added to make things stable\r\n char c = BTSerial.read(); //Conduct a serial read\r\n command += c; //build the string.\r\n }\r\n return command;\r\n}` } } }, "handler": this.funcs.BLOCK_1653808802950 }, { "opcode": "BLOCK_1653808803574", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "txtToSend ": { "type": "string", "defaultValue": "A" }, "mode": { "type": "fieldMenu", "defaultValue": "0", "menu": "BLOCK_1653808803574_MODE" } }, "branchCount": 0, "codes": { "arduinoc": { "code": `BTsendText( /*{txtToSend}*/,/*{mode}*)`, "sections": { "declare": `BTsendText(String TxtToSend, int mode){\r\n switch (mode) {\r\n case 0:\r\n BTSerial.print(txtToSend);\r\n break;\r\n case 1:\r\n BTSerial.print(txtToSend);\r\n BTSerial.print(\",\");\r\n break;\r\n case 2:\r\n BTSerial.print(txtToSend);\r\n BTSerial.print(\"\\n\");\r\n break;\r\n }\r\n}` } } }, "handler": this.funcs.BLOCK_1653808803574 } ]); export default blocks;PK T src/langs/PK TgXsrc/langs/zh.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/de.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/es.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/fr.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/id.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/ja.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/ja-jph.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/ko.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/pl.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/uk.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/zh-hant.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/nl.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/it.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/hr.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/ru.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/pt.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/fi.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/tr.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/tk.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK TgXsrc/langs/en.jsexport default { "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" };PK Tiisrc/langs/index.jsimport zh from './zh.js'; import de from './de.js'; import es from './es.js'; import fr from './fr.js'; import id from './id.js'; import ja from './ja.js'; import jaJph from './ja-jph.js'; import ko from './ko.js'; import pl from './pl.js'; import uk from './uk.js'; import zhHant from './zh-hant.js'; import nl from './nl.js'; import it from './it.js'; import hr from './hr.js'; import ru from './ru.js'; import pt from './pt.js'; import fi from './fi.js'; import tr from './tr.js'; import tk from './tk.js'; import en from './en.js'; const langs = { 'zh': zh, 'de': de, 'es': es, 'fr': fr, 'id': id, 'ja': ja, 'ja-jph': jaJph, 'ko': ko, 'pl': pl, 'uk': uk, 'zh-hant': zhHant, 'nl': nl, 'it': it, 'hr': hr, 'ru': ru, 'pt': pt, 'fi': fi, 'tr': tr, 'tk': tk, 'en': en }; export default langs;PK T kV manifest.json{ "id": "vdr_grove_bluetooth", "iconURL": "vdr_grove_bluetooth/imgs/ff8517fbc032423a941033668f3fb9a9.jpg", "coverURL": "./res/ff8517fbc032423a941033668f3fb9a9.jpg", "name": { "zh": "vdr grove Bluetooth", "de": "vdr grove Bluetooth", "es": "vdr grove Bluetooth", "fr": "vdr grove Bluetooth", "id": "vdr grove Bluetooth", "ja": "vdr grove Bluetooth", "ja-jph": "vdr grove Bluetooth", "ko": "vdr grove Bluetooth", "pl": "vdr grove Bluetooth", "uk": "vdr grove Bluetooth", "zh-hant": "vdr grove Bluetooth", "nl": "vdr grove Bluetooth", "it": "vdr grove Bluetooth", "hr": "vdr grove Bluetooth", "ru": "vdr grove Bluetooth", "pt": "vdr grove Bluetooth", "fi": "vdr grove Bluetooth", "tr": "vdr grove Bluetooth", "tk": "vdr grove Bluetooth", "en": "vdr grove Bluetooth" }, "description": { "zh": "", "de": "", "es": "", "fr": "", "id": "", "ja": "", "ja-jph": "", "ko": "", "pl": "", "uk": "", "zh-hant": "", "nl": "", "it": "", "hr": "", "ru": "", "pt": "", "fi": "", "tr": "", "tk": "", "en": "" }, "targets": [ "arduino_mega2560", "arduino_uno" ], "main": "vdr_grove_bluetooth/index.js", "codeTypes": [ "arduinoc" ], "device": false, "sortId": 999, "version": "1.0.0", "extApiVersion": [ "1.0.3" ], "platform": [ "mblockpc" ], "homepage": "", "feature": [ "worker" ] }PK T data.bak/PK Td[[[data.bak/ext.json{ "identify": "vdr_grove_bluetooth", "version": "1.0.0", "device": false, "template": "arduinoc", "cover": { "name": "Grove-Serial_Bluetooth_v3.0.jpg", "url": "https://mblock-expanded.oss-cn-shenzhen.aliyuncs.com/ff8517fbc032423a941033668f3fb9a9.jpg" }, "codeTypes": [ "arduinoc" ], "generator": { "arduinoc": { "template": "// generated by mBlock5 for \n// codes make you happy\n\n//( include //)\n#include \n//( lib //)\n\n//({\n this.$ALL_VARIABLES.length==0?'':this.$ALL_VARIABLES.map(v=>\"float \"+v+\" = 0;\").join('\\\\n')\n}//)\n\n//( declare //)\n\n\nvoid _delay(float seconds) {\n long endTime = millis() + seconds * 1000;\n while(millis() < endTime) _loop();\n}\n\n//(\nvoid setup() {\n //( setup //)\n //( code //)\n}\n//)\n\nvoid _loop() {\n //( _loop //)\n}\n\nvoid loop() {\n _loop();\n}", "generator": "({\n lang: 'arduinoc',\n template: `<%=template%>`,\n splitor: {\n frame: {\n left: \"//(\",\n right: \"//)\",\n },\n expression: {\n left: \"/*{\",\n right: \"}*/\",\n }\n },\n reducers: [\n {\n name: 'include',\n reduce: (codes) => {\n let codes1 = []\n for (let code of codes) {\n let codeStr = '';\n if (typeof code === 'string') {\n codeStr = code;\n } else if (typeof code === 'function') {\n codeStr = code();\n }\n if (codes1.indexOf(codeStr) === -1) {\n codes1.push(codeStr);\n }\n }\n if (codes1.length === 0) {\n return undefined;\n }\n return codes1.map(code => {\n return '#include ' + code;\n }).join('\\n') + '\\n'\n }\n }\n ]\n})", "snippets": "", "sources": [] } }, "platform": [ "mblockpc" ], "extApiVersion": [ "1.0.3" ], "name": "vdr grove Bluetooth", "targets": [ "arduino_mega2560", "arduino_uno" ], "id": "18728", "sort": 999, "description": "", "homepage": "", "sourceFiles": "", "code": "// enter your javascript code here\n", "handler": "\nconst ExtHandler = {\n\n // when extension is loaded\n onLoad(app, target) {\n },\n\n // when extension is unloaded\n onUnload(app) {\n // TODO\n },\n\n // when device is connected\n onConnect(app, device) {\n // TODO\n },\n\n // when device is disconnected\n onDisconnect(app, device) {\n // TODO\n },\n\n // when stop button is clicked\n onStopAll(app, device) {\n // TODO\n },\n\n // before switch to upload mode\n beforeChangeUploadMode(app, device) {\n // TODO\n return true;\n },\n\n // before switch to debug mode\n beforeChangeDebugMode(app, device) {\n // TODO\n return true;\n },\n\n // after switched to upload mode\n afterChangeUploadMode(app, device) {\n // TODO\n return true;\n },\n\n // after switched to debug mode\n afterChangeDebugMode(app, device) {\n // TODO\n return true;\n },\n\n // when device is selected\n onSelect(app, device) {\n // TODO\n },\n\n // when device is unselected\n onUnselect(app, device) {\n // TODO\n },\n\n // before upload code\n beforeCodeUpload(app, device) {\n // TODO\n },\n\n // after code uploaded\n afterCodeUpload(app, device) {\n // TODO\n },\n\n // when receiving and reading byte\n onRead(app, device) {\n // TODO\n }\n}\n" }PK TzQdata.bak/categroy.json[ { "identify": "cate_ae1092b3", "name": "Bluetooth grove v3.0", "menuIconURI": "", "blockIcon": { "name": "bluetooth.png", "url": "https://mblock-expanded.oss-cn-shenzhen.aliyuncs.com/93e30a2f60634103947286788fb67b56.png" }, "colors": "#05A6FF", "eid": "18728", "id": "31828", "sort": 999, "create_time": 1634911077, "modify_time": 1654884293, "uid": 1281238 } ]PK T4V data.bak/block.json[ { "eid": "18728", "cid": "31828", "blockType": "command", "name": "Connexion module Bluetooth sur @[Dropdown](fieldMenu) ", "checkboxInFlyout": false, "gap": 12, "generatorCode": false, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": [], "lib": "", "declare": "SoftwareSerial BTSerial(/*{pinsDigit}*/,/*{pinsDigit}*/+1);", "setup": "BTSerial.begin(9600);", "code": "", "_loop": "" } }, "opcode": "BLOCK_1653808801951", "sort": 0, "args": [ { "type": "fieldMenu", "name": "pinsDigit", "val": "2", "menus": [ { "text": "D2", "value": "2" }, { "text": "D3", "value": "3" }, { "text": "D4", "value": "4" }, { "text": "D5", "value": "5" }, { "text": "D6", "value": "6" }, { "text": "D7", "value": "7" }, { "text": "D8", "value": "8" } ] } ], "id": "312024", "create_time": 1634911077, "modify_time": 1653809622, "uid": 1281238 }, { "eid": "18728", "cid": "31828", "name": "Données disponnibles", "opcode": "BLOCK_1653808802310", "blockType": "boolean", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 1, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "BTSerial.available()", "_loop": "" } }, "id": "312025", "create_time": 1634911077, "modify_time": 1653808901, "uid": 1281238 }, { "eid": "18728", "cid": "31828", "name": "Lire nombre", "opcode": "BLOCK_1653808802636", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 2, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "BTSerial.read()", "_loop": "" } }, "id": "312026", "create_time": 1634911077, "modify_time": 1653808901, "uid": 1281238 }, { "eid": "18728", "cid": "31828", "name": "Envoyer un nombre @[Number](number) ", "opcode": "BLOCK_1653808803285", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 3, "args": [ { "type": "number", "name": "numberToSend", "val": 1 } ], "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "if (/*{numberToSend}*/!=0) BTSerial.print(/*{numberToSend}*/);\r\n", "_loop": "" } }, "id": "312028", "create_time": 1634911077, "modify_time": 1654884527, "uid": 1281238 }, { "eid": "18728", "cid": "31828", "name": "Lire texte", "opcode": "BLOCK_1653808802950", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 4, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "String getBtString(){\r\n String command = \"\";\r\n while(BTSerial.available()) // While there is more to be read, keep reading.\r\n {\r\n delay(10); //Delay added to make things stable\r\n char c = BTSerial.read(); //Conduct a serial read\r\n command += c; //build the string.\r\n }\r\n return command;\r\n}", "setup": "", "code": "getBtString()", "_loop": "" } }, "id": "312027", "create_time": 1634911077, "modify_time": 1653808901, "uid": 1281238 }, { "eid": "18728", "cid": "31828", "name": "Envoyer texte @[String](string) @[Dropdown](fieldMenu) ", "opcode": "BLOCK_1653808803574", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 5, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "BTsendText(String TxtToSend, int mode){\r\n switch (mode) {\r\n case 0:\r\n BTSerial.print(txtToSend);\r\n break;\r\n case 1:\r\n BTSerial.print(txtToSend);\r\n BTSerial.print(\",\");\r\n break;\r\n case 2:\r\n BTSerial.print(txtToSend);\r\n BTSerial.print(\"\\n\");\r\n break;\r\n }\r\n}", "setup": "", "code": "BTsendText( /*{txtToSend}*/,/*{mode}*)", "_loop": "" } }, "id": "312029", "args": [ { "type": "string", "name": "txtToSend ", "checkNumber": false, "val": "A" }, { "type": "fieldMenu", "name": "mode", "val": "0", "menus": [ { "text": "simple", "value": "0" }, { "text": "liste", "value": "1" }, { "text": "fin liste", "value": "2" } ] } ], "create_time": 1634911077, "modify_time": 1654889148, "uid": 1281238 } ]PK T)L data.bak/translate.json[]PK T)L data.bak/facepanel.json[]PK Timgs/PK T+X)imgs/93e30a2f60634103947286788fb67b56.pngPNG  IHDRddpTiCCPICC profile(}=H@_JEv(":Y(U,Vh/hҐ8 ?.κ: "ƃ~{ SM$j5#ܪ! Qz"w~ѯMxD95 fMOd%I!>'0ď\~\YA#'. x8 Y[J_k+iAKH 2("jH~?lU#P!~?ݭYr1Ų>.jXeN3pu&0Izm⺣{z%C%/MPr-зoC`H.3~rʙ߱bKGD pHYs.#.#x?vtIME.GtEXtCommentCreated with GIMPW IDATxkpJm`0x@RMNi4L)RL)I&&ScJxHCGJH!VlLa;2%zqEdKki4w{9.@ k޽9}}}EvVu(&D4Qu B8Hn_8>&MO`Yvƕ+W^Z_&iFoo ~p8r35\]pG6m{ƍn*q. Y9qiE~-j-よxBv;ar_eaLA<մyvYa4(_2faXI4Ɖc;3p4"t^(* 8!a0 SxzVcǎ$IBZC,B. ?_!bX%(Rl{ ÜJ_` 5-uN+D"{EQTm5}MD\ 1E8մWn6 BݵA`ҖBqA=3tww?6w?jeAzDQD%3n8,)QGtkQYY {/$JY _|ū*č@xz0d2LEy_U)֘]q{֭Cdi O*9ɳg~?e히Rэ(uIKSHoo S5ARנi6lf/^05ĚF3֖i}J% N<-$##cNVVt<3 r:^^>|FL*LyJJ+djf!(6ݲsi'kC++ HwwwY~~~ZKB~ڴiYtЧp*8 bJ$YP,e_=и#Gyޛl  S:~L(6m"E"Ypx@Ax1 yK2&)@Gw]t9o2Ɏ~XrT"bE8 ×T /'ĉ#< `<^ .Tpkesי`nnAD$l)@@lnnպ  & .HJ)SQ'QDL4<~}MbJ2@X'-4zݼy3%AB+W,I"h mMw pǀ9}ĉ`H0ǷB5 RhؖCf((֑pڵ"A &z'|U2k,9ZlxP @h뾪G:k8kТW>1e41BE qS.k`[HqqdՈ)^x>eAoٳ BE 5Iq:ExX(nHq?;1e)AX1# /F#ϟ_q\Eff&(U_ #~x(RxPtY*hBeARnii_\\|*??_qC\.}XĔZ(ʤ*,,brtLuj zѿCtfT21%#)LFu'H~vA`, 彣SR0A4-N:d?geey?.7KCKem}t=3k|;Xbdžeۂ*-'ι#V$^0 )̐ICX |V%MoGŽ%IꎚU?z~'K_Em8cnWt# WW\iWe*=EuoĭJ[qMaY469!p|=#֊HӪ)CGH."P?xPՍሄ˱EŠ((((((((9_x~Vq%>XW]n;!?qZB0ML;`^[ūL>~?E/oŒ9>@i2?ZR(A GRw\tTl 7u\j~djw辿dɫGc hqH"\M<84/#%}zwo [[Hrr{G 2stn*GF=Xr)-MeCTF{0ڏiQOV$bƍ2cĒktMJ1Zbo76 Ğfk%:]{w:aimٞվ`TU5Mjku#Is@Tpլ}Eehzdq!굫Aؚj(QEQEQEQEQEQQOlկ T7>2qi:͆4aVxϷD*J?˩NS8]5(&x< ĺ~JJd*cW,ֿ![>;z񦹕GҰN}+3˯G dnnc0@FjdkK\@dlog:"C*7"0I='[Cv=cI-*V`O^xrK{{!ՐXeyQҥ<GzdqKq"f&L񑏧jMxN* &;/q5qq)gbO?zVTdjzy%ӗsDzAT209vD73P:ҩvۮi\5GIӯ,s4H_LךWJMFITn{Z8]~,V̵*FCj#aI;*}1]zl` ctx99z1Y{SƲFSύs7_S*z-?!(/Du}܌_oghWzfwj#Bg+޷m"Rky"x.a` =>'[ =%-<˛Vmŏ8ncBqUʶE:Q-=k/#O q{" HeKFm՝Z[GegHN7UGTRn!_j)aj{qcRZEh=[EFVbO kswd" <-5 ~9^c_ I5rOd!OE5V x5$X՚n7QEQ@^7ӮΛz4D栮E#־z>#,d{ɱ}1VFUsEc,JGJ5BAʧ^rP.vF9f&iZBXOri-"Fv ԚJ4:i֕YQ2Kv+_Im}v!Aycj|?%%W4YBy NqZ]I }F\4(^O|lO3u?"9MSU(4y%Xܤ8`qJޱrjܘ"+0$%SsEf\iq5ozgn:}}*"[޻M~^RKC>zW#|N5-m;=y6-2| dq\ƧO6stx,į0xEON# 2CZ=^QYϘiw5HknRKNjd|‡ &J.^iΗZq Yja*Ztt M^n`Eϖ99 R='Ru1@1o#<sU˛o4Ǥg+4 "P\9+gmǠzLTt66Ez|tLW;Z+CͫB>KV(г@wFpdt BW#+ȭUU3͢ؼ6Ϛ{g 9=IkR RG(aEk+5 yEz|g#7pzD^j,u/- 必5)&^M(#11X`:ךQ$W$h衎 W?j0)剮~ԣUx }O R<(%s+f}K/}dC3 nEfUtۮ—RA>kpAONuhzL\o*+ 'Sf{-"UOb})ceSa l\(C2pT=bk>(6.K\Ч޹yS;+l^u}9e(9W5ԓ>b7AUbɐN}i[_0/,/(ڼVmޱXs-pךlL'A+cTDBy5æjd1˽s{nk:EoDQ-)rfF=چ-t<܊z%լ7MorHǨ–8{ {bIepүZij\]!_"d#rZvOuXƥnUFFGS)[D+bn4k:T}ўc/y ʲ R09i~nm${b=kYf`M$7H>sw_J5Ya.n:($q^:*Dj8#7Wuʩ#Qؚj)[c W9KvI_ʯá/[@zExmR (aEPE6p<#K@3I:H-)4B+)uNo.| 8brIT/ {; 2\jH7}W[AalqҧYg_ѩX~+ TMhDϗ|Yj?_wS5[&tkd?4˚Z<) hlr;޷՜Τ Xh6]koDV`pTTz;mWV(T'{i ^#oc9Pe#9+R.ۈ,hC{kfIf8Ɵh,n/fVeBTݞǯ Ƣ\l##r` 0ەCjd\EVFa꾇ڲzU-Jo|b@N!oƇ'ktO*cǭcի=B)Dʄe0I:R8>67]Tz7/mO@լ-CZj [yxtS?6sZB\+g.ndL녍}qV d\=8޺}oEOִ `0FY#8|g~"O]<4?QuI 6U@zӎFmVej)<B$OQIZ[ykf<;cÚ~C zG#S#wrsy&N;Ёp;s m%']JTZZ}O xV[6"ڽJVq9iRƤ\ַ6s{FE* B(('T"}3:\a,pء6ѝZ~.'riHzM?Od~`;W.I$yU)>Vzľg lO\/OZo6U$礚=;>n?9JYaÊK v_iH[$A"\5yuco|(Up~@ +֣ңMf˸\ ܏SQ)s],ADyhYycOJ6>6nd_c^%qJ&p9Qkz%`F7v+YWSd+3%,6Y>.OO B+^TjiZs >Uu{7qT4M{ }3I>Uj{ :;xTJU 0+rm{`B uTQEQEQERzWi'XӉw9u0xG؏N% 8q6[B6Ϯ3kY_ϸ);✌p*Ҹ<#HOj-S3LC3Uyҩ ?^/fyWt{idȬ<x/e,pԊqӥz3U%F|;'B] Sʷܶ^RkfڈQI5LQ4mTyBt'v;62Tw~5tYcԬo7j_!c?0n+.O9][*p ]p&NZ!B֖I>@?Jxuʦ~HO9kMlE?1}5ZY(.-% \GZ!C ( ( ( ( ("tR8 Ҩ3@8k|(YP2rOz`gfXCѲD$Һ+ŹBpA4ف-`ڂ6t0;V{jέZ \懯&EmI(U4$@+ׯvV(ND uI, pS0+,hRrw{V0& /?+R=X8k{;KӴhT~y{\iq%sxo#ІǭvK[ST~}UcRp{w5i-cW@zfjKiz۱Jju*Y6:z#X_c[读!Fq~ABOt}>&ŕ#PŇL\rN-uN)+[h[y-9+ҙ `v";(EPEPEPEPEPEPEPYsU5j<z-I$eh>z bV5*F2 I3tmNڀ&W=5'EFJE2v:u{i-1Ȥ0qW:$Z<,xa]$8.Dw{W*RA 7T}H[FRIe&&i$Vx'͔O>ڳ"-tF̙Q~xvu)ahW^Z+~r=Y͘Ggk!vvsc~ ܞ#)Ŏuee#'q׵<g'kwEHUbFrG,kq/#RܶиQI{ǝ/ rV xv Xba%ƺtLp8--SwH`S袂Š(((((((((#5^xfZfH Ϝ0s@+ P@/Z~hM&.,1HWz(zĺБq\LW'̸?*6S (AhȬ~ߪ('<T2х@8L:tE@Xa]t+tV[$ ]T RKRjQEQEQEQEQEQEQEQEQEQEQEQE9QM,H[ ;tbPh0*P(@QEQEQEQEQEQEQEQE uhttp://ns.adobe.com/xap/1.0/ XICC_PROFILE HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmC     C    H|Sws743s<;|.v9lsofz滿5;z|ȹͦiӏn<=t׼cF5Zs±_盚62z[hLo'[r>?q>+,Kt]Pwn^ͯ-)57.?{O{g}9Y^)ZSq{g`eڷ)T^_g0,GΐmiBC _=;]O _dB󵿟yE0 7ˇ+|Y\Z폭8k1}fqzj? Uo#uy;Z5vPI3 R.ݝ)wvд~@~{KPVfI#H5U_aU%Eg]⟋kI* gl#)4sk˻Eq!$J{ yUOGrbo|עe05-{gMN:u߅K.=?@COg>(K}]U[w4vry<6޽_-YWu4d2T]rثs7w5w,sͭvj[4'y>[6sE+ !0@"1$%2BV6{W'_گ\x(jS3Nw z65}=M4pnzng;dn_dSub.TQP\V਻?)jv>fxfJW 9V͑ }V+2NzSS=9 ~ f/ػA6% [MQ4[^ NEJwEn$ k mvv}fi_tQ!/Sǭھ~kd8\seY .h}D Cg76F\ǽ!-v+L|rnٵ¤Ԧi۹5dce+io+wm{>xmZ_C[TZ^ej>q121.bffj![9DkpٛU}_oM8@|Wkyг+F%$_Zcpzk)j\ne౸ : 9@ND݅Wo\ǯMN0틐6)ƾ;MH-R">*:ZiƯHk4;{%f[꥜:yy\0 K$W0)_gvVf V7 シ0z" X_`#$W#c y㙹DѶ.W)菴Mb-ي\z؍ fM=Յ>D6*_<Ļƨ+ZcwpٜghU~/[4KX:* W1zLܺ-XF_#510~~#;}:Ϟ[LjW9-!Ei<|q͠2 3kȐ> UEfJr3Ku#ھxAsLSmt{8F&OBbNv?tǞ01Fa̫x4AI zTa͠₊G&< ,&L|BriHVX hx,!1" 02@AQ#Ba3??bڥ#cz|,YojHN\O &lYGvDګPU: 觅t{!.wMwk7TPa9Q5n6L ^ʦ2Vge' o,FrzCfǾL444'vv.m4'`†v5K3arwz0WX&FfD2A9D\i㊒-MH*I/񪢢fU;ty.PSgDΆ"OOuϿJht&d/s.ީ]PnxQFݒhژU5Kc"Å F*w  <))RF=!y@1tlV ,VΕ-3#dPM7\HIMhڅ! [g(Zc˳kʿdE_,ͅJy9ڠLGQV#9PSeeInJE{ۅ$5ʦ|]C 6 [{ոZG*&f~ALVg*/1R~uUU`f8dzWLnxL``'u7J>8/ M;O:Zu*. UUFƝoeMF_"aMe ކ1tpr7KG\D%Ln Of)@:WX*zQ<%$X#q &׳Av/KRƍKODRDEQ3Л r_O`TS:/(;wOd^; -Ⱥ*!1"@a 02AQqB3? QVWrjGe+J͇UH|-ZLPמ CYJ1Svp&ӌޓVNipPUOQBָFcަ| blgpEb,g|+5Jt۽Oj5!xoBx339*Qk^bFYw~p14` 9[1ؓ<?PLb3rcTN8]i*YQ@JߏSN`F|e4Lq5j1UAW VMF泉_G}lu(Ӗ?WˮcZw7Z`G >궦%ea(5ω`;.~%]ܼ@`w ,w7ح?Q ON^q?fyb޽ͦ[#1~N;qjqIf~vĵ<ѽUIHͫ,xѵkk@";i`8M&H̖[#/xӦ!F雿քϓ8u˂ $qz0a<nFеI.4{3#gЊHY?Zmc#{?~D"iLac XՆEA-oizx*/˨x`ָ'\Ku)bL5&CGG&CϛT g)[|; (-F|yf!іvQR߈ڞCf9nlݭ $,z-׍;b.oiZ:b+q{v3K2Pin&ֽ*+Lg1;XDq'F+eMRzԑGn 9D )ye̎Y6x|`6;؜sҶ"ee:ޗ-޻BE#PpZ* PMf{.SaHd2 2>SP$Kٌpe$Ir' jjũ+xU;6)07F%HN[ƶKTY\4 ^s;wm{@+x},DmĆ(5A f|"/=>T qfm ~#nZV/Ưm淚y7R4rVky1-NI1(3nRb[i!u} Gan?;RJC4|-wb-c力Eʴse"䞚W|+br#o(8 Wюgi!§CՅ^Ouw=~VO>5ñL{2sMQs<*x$ {iuf&a#Քo?ýĴ wӗ<f()ӭ!*1o#|pM\+ >#3Kc<"x$$ʞUi˔iβF%gC6 "ݖH6RoVHVTb %nʱ0`%y=r7?2eeQ2-8+֞h? 5Vְxk7Z*<;퇌ۗu4*]!e[¯^I0kkvB Z[2 P*yn5<)mcfj}]C[1yiZ3w(v,/k/Aa(5I>"RHAVh} pש9#M]weoq55.=<)0دiAT{5´n+!3_$]y )!1AQaq0 @?!WSٿaϙa6s؈ v:$w\Jgx094Y {e>eEU߬VrĦ}@ߊ{7ԗ B.0t]j˩mYp˰~yGW_nhW,/H!D?:tɖ<] Y BQf wwVqRypPXY0bL~s0 ۬~hפ*3 =쳢2v1]]3/7eUfi~aM;[Ya Yú2AR.`;߳1?#N\eZ|~7-R #nl-독C@%j)U+%J E/a#f.*}2gf RƳx p&8q[(h*Eֈ.vu g}7k!Pn<(+pzN^96\B* 175p-mg#c>sUUT`U/t|ˬ;r5zsT:A`UzuCI8QOU2UYD7GZØ5\\jIsfBpAe0wMYv=N^c`V$YR_M온PA`gṿW`-EƇn1秗sz`G04Q(j<-{CZ(*i/)eiR̔=Hp4x#1u9WPl] :wNU11Z.o7A_>'ZSy-U1f  Ҩ=+˒Ǣ{hK2PwLPͪ}#UG \|Vw@6 ~M+)X+qLǘ.7ëO|`8kM):GN%lCE5|A04vt Mɽ?{Kkc#Zzo۪WSvijg}׫ BIc*;?6X p:J|Rw/B#SeH @d,+V1cXᶵ_랐;]YMzyh튖AGCL( vn+A0?3f3rn)(ȥ:2gsp)Gz/SX^յ '/!?佰GQIqi=8 *!-+'-u9O6CVKMP tOx6+ (gS(20p;;NGUl2&L" _aq*A4f@|eud>+Y?R~oj/_0A4cl"*˷F.YO V5 \iT/Q袷Hfܭ`[;AwZ>zpsQѷ2r* "Keh2W])Aԭv&Q.*_s)H I$I XI$I$I!K$I$I$cI$I[I$I+$I+_H$HZ@JTHJNXK6G$HBGiA@>CCdHqX p@~"4fH<_ eI rłیI$CԗI$B+`I$ҒI$AϗI$I$tI$I$.tI$I)!1AQaq 0@?]*Gg5j".0āU ԝo'7ZsxW_gjA2p~.]lᕐxyXp33@ayR5ܠП!:#:8~[0NH7ڵYXNJ2K swUܕ`4͙\ݓJgqgߧcFCi$%pg8;M~MI2s. ‘n >,EaS\^Cllp:AAbmLl-aWG1H^}FA¢=O$wijJAmk}Nn㈴5kTgdCo.EIY*S1OˆS_8Xz N}ZyktCȝx5,w4*" xaF4w-/Xq4YOb\hSdPJ:n/J A[op8g$*vferc#f8? `-ekKyYs_)H>f. nk^ Motm5u+F>4/3W5s0J,\G}JC &P5;22\JPW9]?yߞ&_mebQk@~NnXcuSvlE~*9)!1AQa0q @?aU8xV|ON|]|"K=5yRnታ}?mZw06ѤРdLѧE(6iVMeI~BE{n6E'(yMq@#3G[87*ܾ 2? pdѶpjЏ/ N[m^(JIHQ+KGc""BY(ERaQ{m7,J#;*7+vb4ICr84n3b8,Vk+K]ᶝU:Wk ]&}N8vq$Y8#R62ΜpNkP e.|7qNsKyhqh0^5ǣH<p(8MO Al@ ǽl04-8 Zh m^W8i]WNS?I@<R tp{T <0Bt0˜A9&m$&%NoxۑuޫZfWӡ+Hߘ9$YN%Ȧ{5TQ&2b8Ѳ 3QP wr m^ՠsu3ALL^O qNyQs".g/~2ͼ+ uSXnrpmmmXpjh*+9Ս %hvnߦ?QLC hy.D^2jøcq0;@ۜns qkT (҂/c@to_,s 74?~18x:׋@raJ/+ex"?U=mvEMH#4e U ^Pb쨮.LJ :'2bx4@ij0@ ۈX9PAN?Y h$>ϻ6z0; &E}jb={9_a<^5iyLD$!70nSӐmIRa @&5*}(S(V1g MǬ"Q1Hnu;.*E'L4geDrC"p q''( 3lޚuHd>_|>VV]CW?;,ѵ^JL%L&1 y8/6uU/O7]ihӑRCJZ X @ ]ń[„T Yӕˀ%3l =ceۗn;7Fײ 4Er"0aE\ջ.DPʂ "?R~7V/"h|#FB 0^#1iFiydNxGQǽ#!ԩCkāV۷!T(Mx۶UQ ?T&%g37 y#4|huzLJg/5 c丙O1PK Tres/PK Ti18n/PK Tl| i18n/zh.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/de.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/es.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/fr.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/id.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/ja.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl|i18n/ja-jph.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/ko.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/pl.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/uk.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl|i18n/zh-hant.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/nl.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/it.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/hr.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/ru.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/pt.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/fi.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/tr.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/tk.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK Tl| i18n/en.json{ "vdr_grove_bluetooth": "vdr grove Bluetooth", "extensionName": "vdr grove Bluetooth", "extensionDescription": "", "BLOCK_1653808801951_PINSDIGIT_0": "D2", "BLOCK_1653808801951_PINSDIGIT_1": "D3", "BLOCK_1653808801951_PINSDIGIT_2": "D4", "BLOCK_1653808801951_PINSDIGIT_3": "D5", "BLOCK_1653808801951_PINSDIGIT_4": "D6", "BLOCK_1653808801951_PINSDIGIT_5": "D7", "BLOCK_1653808801951_PINSDIGIT_6": "D8", "BLOCK_1653808801951": "Connexion module Bluetooth sur [pinsDigit] ", "BLOCK_1653808802310": "Données disponnibles", "BLOCK_1653808802636": "Lire nombre", "BLOCK_1653808803285": "Envoyer un nombre [numberToSend] ", "BLOCK_1653808802950": "Lire texte", "BLOCK_1653808803574_MODE_0": "simple", "BLOCK_1653808803574_MODE_1": "liste", "BLOCK_1653808803574_MODE_2": "fin liste", "BLOCK_1653808803574": "Envoyer texte [txtToSend ] [mode] ", "cate_ae1092b3": "Bluetooth grove v3.0" }PK TRF^^index.jsPK T\44handlerProxy.jsPK Tbsrc/PK Tϩr[r[ src/index.jsPK T"v&& Wsrc/snippets.jsPK TI~sWsrc/generators.jsPK T)>]src/arduinosources.jsPK TE]src/facepanels.jsPK T_[[]src/exthandler.jsPK TjVDDNcsrc/handlerProxy.jsPK T src/cates/PK T+src/cates/cate_ae1092b3/PK TQ  asrc/cates/cate_ae1092b3/index.jsPK T3ϐtsrc/cates/index.jsPK T^!4src/cates/cate_ae1092b3/blocks.jsPK T src/langs/PK TgXsrc/langs/zh.jsPK TgXsrc/langs/de.jsPK TgXsrc/langs/es.jsPK TgXsrc/langs/fr.jsPK TgXsrc/langs/id.jsPK TgXsrc/langs/ja.jsPK TgXsrc/langs/ja-jph.jsPK TgXsrc/langs/ko.jsPK TgXsrc/langs/pl.jsPK TgXsrc/langs/uk.jsPK TgXsrc/langs/zh-hant.jsPK TgXsrc/langs/nl.jsPK TgXsrc/langs/it.jsPK TgXsrc/langs/hr.jsPK TgXsrc/langs/ru.jsPK TgXsrc/langs/pt.jsPK TgXsrc/langs/fi.jsPK TgXsrc/langs/tr.jsPK TgXsrc/langs/tk.jsPK TgX| src/langs/en.jsPK Tiiysrc/langs/index.jsPK T kV manifest.jsonPK T data.bak/PK Td[[[data.bak/ext.jsonPK TzQ(data.bak/categroy.jsonPK T4V *data.bak/block.jsonPK T)L  Jdata.bak/translate.jsonPK T)L CJdata.bak/facepanel.jsonPK TzJimgs/PK T+X)Jimgs/93e30a2f60634103947286788fb67b56.pngPK TPLkLk)Zimgs/ff8517fbc032423a941033668f3fb9a9.jpgPK TEres/PK Tgi18n/PK Tl| i18n/zh.jsonPK Tl| ti18n/de.jsonPK Tl| ^i18n/es.jsonPK Tl| Hi18n/fr.jsonPK Tl| 2i18n/id.jsonPK Tl| i18n/ja.jsonPK Tl|i18n/ja-jph.jsonPK Tl| i18n/ko.jsonPK Tl| i18n/pl.jsonPK Tl| i18n/uk.jsonPK Tl|i18n/zh-hant.jsonPK Tl| i18n/nl.jsonPK Tl| i18n/it.jsonPK Tl| ui18n/hr.jsonPK Tl| _i18n/ru.jsonPK Tl| Ii18n/pt.jsonPK Tl| 3i18n/fi.jsonPK Tl|  i18n/tr.jsonPK Tl|  i18n/tk.jsonPK Tl| i18n/en.jsonPKEE