PK TeT+""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_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "de": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "es": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "fr": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "id": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "ja": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "ja-jph": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "ko": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "pl": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "uk": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "zh-hant": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "nl": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "it": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "hr": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "ru": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "pt": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "fi": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "tr": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "tk": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }, "en": { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" } }; 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 ExtVdrGroveClavier { constructor() { this.checkFirmwareInForce = typeof checkFirmwareInForce !== 'undefined' ? checkFirmwareInForce : false; const handlerProxyUrl = window.MbApi.getExtResPath('vdr_grove_clavier/handlerProxy.js', 'vdr_grove_clavier'); 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_1654726329719': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1654726329719', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1654726330022': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1654726330022', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1654726330472': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1654726330472', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1654726330697': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1654726330697', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1654726330882': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1654726330882', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } }, 'BLOCK_1654726331141': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock('BLOCK_1654726331141', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args)); } } }; } getInfo() { return { "id": "vdr_grove_clavier", "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_2b4a0a0b", "colors": ["#9300DB", "#8400C5", "#7600AF"], "menuIconURI": "", "blockIcon": { "type": "image", "width": 28, "height": 26, "src": window.MbApi.getExtResPath('vdr_grove_clavier/imgs/51ea12c2a8f9420bb6dcf7ad59cfc2c5.png', 'vdr_grove_clavier') }, "blocks": [{ "opcode": "BLOCK_1654726329719", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "pinsDigit": { "type": "fieldMenu", "defaultValue": "2", "menu": "BLOCK_1654726329719_PINSDIGIT" } }, "branchCount": 0, "codes": { "arduinoc": { "code": "KBtxt=\"\";\r\nKBend=false;", "sections": { "declare": `SoftwareSerial KBSerial(/*{pinsDigit}*/,/*{pinsDigit}*/+1);\r\n\r\nString KBtxt;\r\nString KBendChar;\r\nbool KBend;\r\n\r\nString KBget(){\r\n String KBcurChar;\r\n bool reading = false;\r\n while(!reading){\r\n while(KBSerial.available()){\r\n KBcurChar = KBtranscode(KBSerial.read());\r\n reading=true;\r\n break;\r\n }\r\n }\r\n if (KBendChar.toInt()>0){\r\n KBtxt += KBcurChar;\r\n KBend = (KBtxt.length()==KBendChar.toInt());\r\n }else{\r\n if(KBcurChar!=KBendChar){\r\n KBtxt += KBcurChar;\r\n KBend = false;\r\n }else{\r\n KBcurChar = \"\";\r\n KBend = true;\r\n }\r\n }\r\n return KBcurChar;\r\n}\r\n\r\nString KBgetTxt (bool show){\r\n String strVide = \" \";\r\n if (show){\r\n if (KBendChar.toInt()>0){\r\n return KBtxt+strVide.substring(0,KBendChar.toInt()-KBtxt.length());\r\n }else{\r\n return KBtxt;\r\n }\r\n }else{\r\n String strCache = \"*************************\";\r\n if (KBendChar.toInt()>0){\r\n return strCache.substring(0,KBtxt.length())+strVide.substring(0,KBendChar.toInt()-KBtxt.length());\r\n }else{\r\n return strCache.substring(0,KBtxt.length());\r\n }\r\n }\r\n}\r\n\r\nString KBtranscode(int data){\r\n switch(data) {\r\n case 0xE1 : return(\"1\");\r\n case 0xE2 : return(\"2\");\r\n case 0xE3 : return(\"3\");\r\n case 0xE4 : return(\"4\");\r\n case 0xE5 : return(\"5\");\r\n case 0xE6 : return(\"6\");\r\n case 0xE7 : return(\"7\");\r\n case 0xE8 : return(\"8\");\r\n case 0xE9 : return(\"9\");\r\n case 0xEA : return(\"*\");\r\n case 0xEB : return(\"0\");\r\n case 0xEC : return(\"#\");\r\n default: return(\"\");\r\n }\r\n}`, "setup": `KBSerial.begin(9600);` } } }, "handler": this.funcs.BLOCK_1654726329719 }, { "opcode": "BLOCK_1654726330022", "blockType": "conditional", "checkboxInFlyout": false, "gap": 12, "arguments": { "password": { "type": "string", "defaultValue": "1234" } }, "branchCount": 1, "codes": { "arduinoc": { "code": `String password=String(/*{password}*/);\r\nKBendChar = String(password.length());\r\nwhile(KBtxt != password){\r\n KBend = false;\r\n KBtxt = \"\";\r\n while(!(KBend))\r\n {\r\n KBget();\r\n /*{$BRANCH1}*/\r\n }\r\n}\r\nKBtxt=\"\";\r\nKBend=false;` } }, "handler": this.funcs.BLOCK_1654726330022 }, { "opcode": "BLOCK_1654726330472", "blockType": "conditional", "checkboxInFlyout": false, "gap": 12, "arguments": { "fin": { "type": "fieldMenu", "defaultValue": "1", "menu": "BLOCK_1654726330472_FIN" } }, "branchCount": 1, "codes": { "arduinoc": { "code": "KBend = false;\r\nKBtxt = \"\";\r\nwhile(!(KBend))\r\n{\r\n KBget();\r\n /*{$BRANCH1}*/\r\n \r\n}" } }, "handler": this.funcs.BLOCK_1654726330472 }, { "opcode": "BLOCK_1654726330697", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `KBget()` } }, "handler": this.funcs.BLOCK_1654726330697 }, { "opcode": "BLOCK_1654726330882", "blockType": "number", "checkboxInFlyout": false, "gap": 12, "arguments": { "affiche": { "type": "fieldMenu", "defaultValue": "1", "menu": "BLOCK_1654726330882_AFFICHE" } }, "branchCount": 0, "codes": { "arduinoc": { "code": `KBgetTxt(/*{affiche}*/)` } }, "handler": this.funcs.BLOCK_1654726330882 }, { "opcode": "BLOCK_1654726331141", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": "KBtxt=\"\";\r\nKBend=false;" } }, "handler": this.funcs.BLOCK_1654726331141 }], "menus": { "BLOCK_1654726329719_PINSDIGIT": [{ "text": "BLOCK_1654726329719_PINSDIGIT_0", "value": "2" }, { "text": "BLOCK_1654726329719_PINSDIGIT_1", "value": "3" }, { "text": "BLOCK_1654726329719_PINSDIGIT_2", "value": "4" }, { "text": "BLOCK_1654726329719_PINSDIGIT_3", "value": "5" }, { "text": "BLOCK_1654726329719_PINSDIGIT_4", "value": "6" }, { "text": "BLOCK_1654726329719_PINSDIGIT_5", "value": "7" }, { "text": "BLOCK_1654726329719_PINSDIGIT_6", "value": "8" }], "BLOCK_1654726330472_FIN": [{ "text": "BLOCK_1654726330472_FIN_0", "value": "1" }, { "text": "BLOCK_1654726330472_FIN_1", "value": "2" }, { "text": "BLOCK_1654726330472_FIN_2", "value": "3" }, { "text": "BLOCK_1654726330472_FIN_3", "value": "4" }, { "text": "BLOCK_1654726330472_FIN_4", "value": "5" }, { "text": "BLOCK_1654726330472_FIN_5", "value": "6" }, { "text": "BLOCK_1654726330472_FIN_6", "value": "7" }, { "text": "BLOCK_1654726330472_FIN_7", "value": "8" }, { "text": "BLOCK_1654726330472_FIN_8", "value": "9" }, { "text": "BLOCK_1654726330472_FIN_9", "value": "#" }, { "text": "BLOCK_1654726330472_FIN_10", "value": "*" }], "BLOCK_1654726330882_AFFICHE": [{ "text": "BLOCK_1654726330882_AFFICHE_0", "value": "1" }, { "text": "BLOCK_1654726330882_AFFICHE_1", "value": "0" }] } }], "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 = ExtVdrGroveClavier; _exports.default = _default; });PK TE;`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 ExtVdrGroveClavier { constructor() { this.funcs = { 'BLOCK_1654726329719': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1654726329719', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1654726330022': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1654726330022', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1654726330472': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1654726330472', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1654726330697': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1654726330697', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1654726330882': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1654726330882', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } }, 'BLOCK_1654726331141': { onRun: (args, app, device, block) => { return this.worker.remote.runBlock( 'BLOCK_1654726331141', 'onRun', device.id, { id: block.id, opcode: block.opcode, arguments: block.arguments }, Object.assign({}, args) ); } } }; } getInfo() { return { "id": "vdr_grove_clavier", "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 ExtVdrGroveClavier;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 T~u4DDsrc/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_1654726329719': { onRun: (args, app, device, block) => {} }, 'BLOCK_1654726330022': { onRun: (args, app, device, block) => {} }, 'BLOCK_1654726330472': { onRun: (args, app, device, block) => {} }, 'BLOCK_1654726330697': { onRun: (args, app, device, block) => {} }, 'BLOCK_1654726330882': { onRun: (args, app, device, block) => {} }, 'BLOCK_1654726331141': { 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_2b4a0a0b/PK TrFR R src/cates/cate_2b4a0a0b/index.jsimport blocks from './blocks.js'; const cate_2b4a0a0b = (facepanels) => ({ "name": "cate_2b4a0a0b", "colors": [ "#9300DB", "#8400C5", "#7600AF" ], "menuIconURI": "", "blockIcon": { "type": "image", "width": 28, "height": 26, "src": window.MbApi.getExtResPath('vdr_grove_clavier/imgs/51ea12c2a8f9420bb6dcf7ad59cfc2c5.png', 'vdr_grove_clavier') }, "blocks": blocks(facepanels), "menus": { "BLOCK_1654726329719_PINSDIGIT": [{ "text": "BLOCK_1654726329719_PINSDIGIT_0", "value": "2" }, { "text": "BLOCK_1654726329719_PINSDIGIT_1", "value": "3" }, { "text": "BLOCK_1654726329719_PINSDIGIT_2", "value": "4" }, { "text": "BLOCK_1654726329719_PINSDIGIT_3", "value": "5" }, { "text": "BLOCK_1654726329719_PINSDIGIT_4", "value": "6" }, { "text": "BLOCK_1654726329719_PINSDIGIT_5", "value": "7" }, { "text": "BLOCK_1654726329719_PINSDIGIT_6", "value": "8" } ], "BLOCK_1654726330472_FIN": [{ "text": "BLOCK_1654726330472_FIN_0", "value": "1" }, { "text": "BLOCK_1654726330472_FIN_1", "value": "2" }, { "text": "BLOCK_1654726330472_FIN_2", "value": "3" }, { "text": "BLOCK_1654726330472_FIN_3", "value": "4" }, { "text": "BLOCK_1654726330472_FIN_4", "value": "5" }, { "text": "BLOCK_1654726330472_FIN_5", "value": "6" }, { "text": "BLOCK_1654726330472_FIN_6", "value": "7" }, { "text": "BLOCK_1654726330472_FIN_7", "value": "8" }, { "text": "BLOCK_1654726330472_FIN_8", "value": "9" }, { "text": "BLOCK_1654726330472_FIN_9", "value": "#" }, { "text": "BLOCK_1654726330472_FIN_10", "value": "*" } ], "BLOCK_1654726330882_AFFICHE": [{ "text": "BLOCK_1654726330882_AFFICHE_0", "value": "1" }, { "text": "BLOCK_1654726330882_AFFICHE_1", "value": "0" } ] } }); export default cate_2b4a0a0b;PK TȨ.src/cates/index.jsimport cate_2b4a0a0b from './cate_2b4a0a0b/index.js'; const cates = (facepanels) => ([ cate_2b4a0a0b(facepanels) ]); export default cates;PK T?w!src/cates/cate_2b4a0a0b/blocks.jsconst blocks = (extFacePanels) => ([{ "opcode": "BLOCK_1654726329719", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": { "pinsDigit": { "type": "fieldMenu", "defaultValue": "2", "menu": "BLOCK_1654726329719_PINSDIGIT" } }, "branchCount": 0, "codes": { "arduinoc": { "code": "KBtxt=\"\";\r\nKBend=false;", "sections": { "declare": `SoftwareSerial KBSerial(/*{pinsDigit}*/,/*{pinsDigit}*/+1);\r\n\r\nString KBtxt;\r\nString KBendChar;\r\nbool KBend;\r\n\r\nString KBget(){\r\n String KBcurChar;\r\n bool reading = false;\r\n while(!reading){\r\n while(KBSerial.available()){\r\n KBcurChar = KBtranscode(KBSerial.read());\r\n reading=true;\r\n break;\r\n }\r\n }\r\n if (KBendChar.toInt()>0){\r\n KBtxt += KBcurChar;\r\n KBend = (KBtxt.length()==KBendChar.toInt());\r\n }else{\r\n if(KBcurChar!=KBendChar){\r\n KBtxt += KBcurChar;\r\n KBend = false;\r\n }else{\r\n KBcurChar = \"\";\r\n KBend = true;\r\n }\r\n }\r\n return KBcurChar;\r\n}\r\n\r\nString KBgetTxt (bool show){\r\n String strVide = \" \";\r\n if (show){\r\n if (KBendChar.toInt()>0){\r\n return KBtxt+strVide.substring(0,KBendChar.toInt()-KBtxt.length());\r\n }else{\r\n return KBtxt;\r\n }\r\n }else{\r\n String strCache = \"*************************\";\r\n if (KBendChar.toInt()>0){\r\n return strCache.substring(0,KBtxt.length())+strVide.substring(0,KBendChar.toInt()-KBtxt.length());\r\n }else{\r\n return strCache.substring(0,KBtxt.length());\r\n }\r\n }\r\n}\r\n\r\nString KBtranscode(int data){\r\n switch(data) {\r\n case 0xE1 : return(\"1\");\r\n case 0xE2 : return(\"2\");\r\n case 0xE3 : return(\"3\");\r\n case 0xE4 : return(\"4\");\r\n case 0xE5 : return(\"5\");\r\n case 0xE6 : return(\"6\");\r\n case 0xE7 : return(\"7\");\r\n case 0xE8 : return(\"8\");\r\n case 0xE9 : return(\"9\");\r\n case 0xEA : return(\"*\");\r\n case 0xEB : return(\"0\");\r\n case 0xEC : return(\"#\");\r\n default: return(\"\");\r\n }\r\n}`, "setup": `KBSerial.begin(9600);` } } }, "handler": this.funcs.BLOCK_1654726329719 }, { "opcode": "BLOCK_1654726330022", "blockType": "conditional", "checkboxInFlyout": false, "gap": 12, "arguments": { "password": { "type": "string", "defaultValue": "1234" } }, "branchCount": 1, "codes": { "arduinoc": { "code": `String password=String(/*{password}*/);\r\nKBendChar = String(password.length());\r\nwhile(KBtxt != password){\r\n KBend = false;\r\n KBtxt = \"\";\r\n while(!(KBend))\r\n {\r\n KBget();\r\n /*{$BRANCH1}*/\r\n }\r\n}\r\nKBtxt=\"\";\r\nKBend=false;` } }, "handler": this.funcs.BLOCK_1654726330022 }, { "opcode": "BLOCK_1654726330472", "blockType": "conditional", "checkboxInFlyout": false, "gap": 12, "arguments": { "fin": { "type": "fieldMenu", "defaultValue": "1", "menu": "BLOCK_1654726330472_FIN" } }, "branchCount": 1, "codes": { "arduinoc": { "code": "KBend = false;\r\nKBtxt = \"\";\r\nwhile(!(KBend))\r\n{\r\n KBget();\r\n /*{$BRANCH1}*/\r\n \r\n}" } }, "handler": this.funcs.BLOCK_1654726330472 }, { "opcode": "BLOCK_1654726330697", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": `KBget()` } }, "handler": this.funcs.BLOCK_1654726330697 }, { "opcode": "BLOCK_1654726330882", "blockType": "number", "checkboxInFlyout": false, "gap": 12, "arguments": { "affiche": { "type": "fieldMenu", "defaultValue": "1", "menu": "BLOCK_1654726330882_AFFICHE" } }, "branchCount": 0, "codes": { "arduinoc": { "code": `KBgetTxt(/*{affiche}*/)` } }, "handler": this.funcs.BLOCK_1654726330882 }, { "opcode": "BLOCK_1654726331141", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "arguments": {}, "branchCount": 0, "codes": { "arduinoc": { "code": "KBtxt=\"\";\r\nKBend=false;" } }, "handler": this.funcs.BLOCK_1654726331141 } ]); export default blocks;PK T src/langs/PK T/)(MMsrc/langs/zh.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/de.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/es.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/fr.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/id.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/ja.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/ja-jph.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/ko.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/pl.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/uk.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/zh-hant.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/nl.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/it.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/hr.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/ru.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/pt.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/fi.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/tr.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/tk.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };PK T/)(MMsrc/langs/en.jsexport default { "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" };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 manifest.json{ "id": "vdr_grove_clavier", "iconURL": "vdr_grove_clavier/imgs/dc3feca26f74472fba85a0b56cf0a1f2.jpg", "coverURL": "./res/dc3feca26f74472fba85a0b56cf0a1f2.jpg", "name": { "zh": "vdr grove clavier", "de": "vdr grove clavier", "es": "vdr grove clavier", "fr": "vdr grove clavier", "id": "vdr grove clavier", "ja": "vdr grove clavier", "ja-jph": "vdr grove clavier", "ko": "vdr grove clavier", "pl": "vdr grove clavier", "uk": "vdr grove clavier", "zh-hant": "vdr grove clavier", "nl": "vdr grove clavier", "it": "vdr grove clavier", "hr": "vdr grove clavier", "ru": "vdr grove clavier", "pt": "vdr grove clavier", "fi": "vdr grove clavier", "tr": "vdr grove clavier", "tk": "vdr grove clavier", "en": "vdr grove clavier" }, "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_clavier/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 Tl7QIIdata.bak/ext.json{ "identify": "vdr_grove_clavier", "version": "1.0.0", "device": false, "template": "arduinoc", "cover": { "name": "ecran_tactile.jpg", "url": "https://mblock-expanded.oss-cn-shenzhen.aliyuncs.com/dc3feca26f74472fba85a0b56cf0a1f2.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 clavier", "targets": [ "arduino_mega2560", "arduino_uno" ], "id": "18888", "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 T19data.bak/categroy.json[ { "identify": "cate_2b4a0a0b", "name": "clavier tactile", "menuIconURI": "", "blockIcon": { "name": "clavier tactile.png", "url": "https://mblock-expanded.oss-cn-shenzhen.aliyuncs.com/51ea12c2a8f9420bb6dcf7ad59cfc2c5.png" }, "colors": "#9300DB", "eid": "18888", "id": "32116", "sort": 999, "create_time": 1634911077, "modify_time": 1654880855, "uid": 1281238 } ]PK T\Za*a*data.bak/block.json[ { "eid": "18888", "cid": "32116", "name": "Initialiser clavier tactile @[Dropdown](fieldMenu)", "opcode": "BLOCK_1654726329719", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 999, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "SoftwareSerial KBSerial(/*{pinsDigit}*/,/*{pinsDigit}*/+1);\r\n\r\nString KBtxt;\r\nString KBendChar;\r\nbool KBend;\r\n\r\nString KBget(){\r\n String KBcurChar;\r\n bool reading = false;\r\n while(!reading){\r\n while(KBSerial.available()){\r\n KBcurChar = KBtranscode(KBSerial.read());\r\n reading=true;\r\n break;\r\n }\r\n }\r\n if (KBendChar.toInt()>0){\r\n KBtxt += KBcurChar;\r\n KBend = (KBtxt.length()==KBendChar.toInt());\r\n }else{\r\n if(KBcurChar!=KBendChar){\r\n KBtxt += KBcurChar;\r\n KBend = false;\r\n }else{\r\n KBcurChar = \"\";\r\n KBend = true;\r\n }\r\n }\r\n return KBcurChar;\r\n}\r\n\r\nString KBgetTxt (bool show){\r\n String strVide = \" \";\r\n if (show){\r\n if (KBendChar.toInt()>0){\r\n return KBtxt+strVide.substring(0,KBendChar.toInt()-KBtxt.length());\r\n }else{\r\n return KBtxt;\r\n }\r\n }else{\r\n String strCache = \"*************************\";\r\n if (KBendChar.toInt()>0){\r\n return strCache.substring(0,KBtxt.length())+strVide.substring(0,KBendChar.toInt()-KBtxt.length());\r\n }else{\r\n return strCache.substring(0,KBtxt.length());\r\n }\r\n }\r\n}\r\n\r\nString KBtranscode(int data){\r\n switch(data) {\r\n case 0xE1 : return(\"1\");\r\n case 0xE2 : return(\"2\");\r\n case 0xE3 : return(\"3\");\r\n case 0xE4 : return(\"4\");\r\n case 0xE5 : return(\"5\");\r\n case 0xE6 : return(\"6\");\r\n case 0xE7 : return(\"7\");\r\n case 0xE8 : return(\"8\");\r\n case 0xE9 : return(\"9\");\r\n case 0xEA : return(\"*\");\r\n case 0xEB : return(\"0\");\r\n case 0xEC : return(\"#\");\r\n default: return(\"\");\r\n }\r\n}", "setup": "KBSerial.begin(9600);", "code": "KBtxt=\"\";\r\nKBend=false;", "_loop": "" } }, "args": [ { "type": "fieldMenu", "name": "pinsDigit", "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" } ], "val": "2" } ], "id": "314454", "create_time": 1634911077, "modify_time": 1634911077, "uid": 1281238 }, { "eid": "18888", "cid": "32116", "name": "Répéter jusqu'a code trouvé @[String](string)", "opcode": "BLOCK_1654726330022", "blockType": "conditional", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 999, "args": [ { "type": "string", "name": "password", "checkNumber": false, "val": "1234" } ], "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "String password=String(/*{password}*/);\r\nKBendChar = String(password.length());\r\nwhile(KBtxt != password){\r\n KBend = false;\r\n KBtxt = \"\";\r\n while(!(KBend))\r\n {\r\n KBget();\r\n /*{$BRANCH1}*/\r\n }\r\n}\r\nKBtxt=\"\";\r\nKBend=false;", "_loop": "" } }, "id": "314455", "create_time": 1634911077, "modify_time": 1634911077, "uid": 1281238 }, { "eid": "18888", "cid": "32116", "name": "Répéter jusqu'a texte tapé @[Dropdown](fieldMenu) ", "opcode": "BLOCK_1654726330472", "blockType": "conditional", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 999, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "KBend = false;\r\nKBtxt = \"\";\r\nwhile(!(KBend))\r\n{\r\n KBget();\r\n /*{$BRANCH1}*/\r\n \r\n}", "_loop": "" } }, "args": [ { "type": "fieldMenu", "name": "fin", "val": "1", "menus": [ { "text": "1", "value": "1" }, { "text": "2", "value": "2" }, { "text": "3", "value": "3" }, { "text": "4", "value": "4" }, { "text": "5", "value": "5" }, { "text": "6", "value": "6" }, { "text": "7", "value": "7" }, { "text": "8", "value": "8" }, { "text": "9", "value": "9" }, { "text": "#", "value": "#" }, { "text": "*", "value": "*" } ] } ], "id": "314456", "create_time": 1634911077, "modify_time": 1634911077, "uid": 1281238 }, { "eid": "18888", "cid": "32116", "name": "Touche frapée", "opcode": "BLOCK_1654726330697", "blockType": "string", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 999, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "KBget()", "_loop": "" } }, "id": "314457", "create_time": 1634911077, "modify_time": 1634911077, "uid": 1281238 }, { "eid": "18888", "cid": "32116", "name": "Texte tapé @[Dropdown](fieldMenu) ", "opcode": "BLOCK_1654726330882", "blockType": "number", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 999, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "KBgetTxt(/*{affiche}*/)", "_loop": "" } }, "args": [ { "type": "fieldMenu", "name": "affiche", "val": "1", "menus": [ { "text": "visble", "value": "1" }, { "text": "caché", "value": "0" } ] } ], "id": "314458", "create_time": 1634911077, "modify_time": 1634911077, "uid": 1281238 }, { "eid": "18888", "cid": "32116", "name": "Effacer texte", "opcode": "BLOCK_1654726331141", "blockType": "command", "checkboxInFlyout": false, "gap": 12, "disableOnline": false, "disableOffline": false, "generatorCode": false, "blockState": "incomplete", "sort": 999, "handler": { "onRun": "(args, app, device, block) => {\n // JavaScript code\n}" }, "codes": { "arduinoc": { "include": "", "lib": "", "declare": "", "setup": "", "code": "KBtxt=\"\";\r\nKBend=false;", "_loop": "" } }, "id": "314459", "create_time": 1634911077, "modify_time": 1634911077, "uid": 1281238 } ]PK T)L data.bak/translate.json[]PK T)L data.bak/facepanel.json[]PK Timgs/PK T22)imgs/51ea12c2a8f9420bb6dcf7ad59cfc2c5.pngPNG  IHDRdezzTXtRaw profile type exifxڥgv9cBx`?E(Qm۲D x6wO9sI5?O{I}}ޤx,CBe<^/ǝ]r!w?xHDžB/Z{Ly }ݏaǧy2ћx疷x};D~:_y#owLy\ǟʈ޾%+{75[=9}<}qΡ<~sKψD_{ϲϜE PǤS9>.tbZ2ߑKU*T5װ:2m6:2.sdU7e˾ Y'sz sVY.fUVz`\) COFF~5?Q^=Z~_G I獑ǻml "ndYmWv.[K j :1 ]>tk>y fd"3"CZ1S̱[)RI@`r)\rͭJ,RJ-XS͵Z[㞍+7>xCkuC{鵷A0H#2hM?feٖ] +*);.5hۯ_"k5w27揬lKXITH3PN9CpʜrvUGWD r62Fò.n̝qwF7Kf(u2s.kS44N.TP/O p#z &6WS"1HP/ncNqBmd H^"Hڵ--dGm1vPʺ|Ϋs|hJݡH"];5l-î+l%Dw(36Jݓ#HmQ Ǟk6@qǞ{4.u|>(Bb{fhM-̽Ra^DuFSc_dlZ|NԜTRHҫ=Ncէ4EZnp p .n'1uʲ\.µZ,I1LHY+TRsdG*ܝ< hv Ee/Xd@9$Nm-oWj.T5:?^J\, 5}RӢi #"l`r~{>:ĠMcgNթEns`=ǓKʈRM TYЯs 7{DRWʪ1cOtG>yf"ۤozT]\BLH3>!%)4ZÔJ>;QɊ 5(IЋ`%Sz `PLp=ٙ$Tds;Lm5U^cTUG\;[ ME`c^0"LiU5հKަ*+S4%`/7X0n>Vnnk1oLQ5Τ)px<񩡏ԁnC)5h2_p#wf^F-Qu][\H:QsC| GE? ڼTx5?Hy+wڙ# TL1lÚ^mR;5U>ūC-JP߯p}Z9^~JRoĮp qHTH *i]FLt־$A?0Zdt|"ѠؽENpʙm^2zz-/N]Ĉisw"46kpv(a0*%'URsJkŬu NrM0c/7c&%5fH.ܡZmA`qX$ pB!嵇OL!Ah~ڄ_ӽ'2tN}R @څzj}+9w;go%_/B *ԒFiiYM}4H(iі:1!A}bǕZvf,= KOxH%m:ܚN_ƨ!VL$OyPzG+ hgRpSPmv3ypT]*̙ 3!&ihYDݮբe|@ӣ(\2rvH{r~ߓ{n6#8и2tĈ &d]=RCdyCa&~7.|nrtvU9P/B?GHBG ׅ(SKXONX/6d c1W*o0{?^)stn@MmVf>niVf}Tf<=&y zy(£5vPs:u2A2^W"A<5D, @rn39iBCNCEP.xKEߡ#xG}.K0RFwPc Pc`o.F}M\hڨ ~O.:Ʀeyq`CøALpp/*+QOdBdCp&:b_wJ tfwCAj< LȣϼiIN }rBPCMgY?rZoфr c7"g+d*f ERgl1:H~/"ߘLh"@dFh7 Uz#/Lw<}@դ?є|CLp*+=.85S()HR[V?p!8ȓK/ im rNz٥:l>>꜌5q!Jw*9f08?K%+m,VtkGB闩kI{ThȨ{6GKA5#s Mƞ 8]\2ф"2biv j~ܮSK |z&}8Fguu6D4,W;sFg^"4@qCMI@i<4x!kλ*昙JxFپ{(Aa`=y<=_y%ƳؿJ|`[?.'sVu?uňPƔ-QaCx*)"ۅy[ƅZ!LD̀ P]PZDĠVLKDv!HQ|7KO/N-0FTe /XZHH笑Ro.Bƹ;)e0[y;iBH5RM%bHI"ьZ) ) ?/DQcŅBoF>t ,jESnj! 2P嚯2oU*sVRӒ>NъK1v p tQ鸻֌ݖKtb=i٢E^m 7ۗ3 !L6kmIRn<ԛڤ J Dv|F]M=EeZ#^ՀM; 9 6hoA|Q KfdHLZd;҆YD9QWG),wP(^r6ݛv -# vU2VAݷ__)X$-Ry Sdwl䮋ʝ/'ay1**0?/=w h&ncHj^wu)(.5ZVhCvGkm߷(&}̣ !gYU #lq Ņy{y UcAM G)Z(:УD*."\b~rX ΍V465-, ғ;%D5Vj7 ik3\92 R* =@0wQ3qK} tHe'Gm3 pYH04:MXt?Mx>w㘕O!G>cp\l4] z}uNN=nqGTV Ԟ}T4)˄/zs&8B)l%!u?_!g4Bi|^pmoHAe@oF{N3kV(xW- 0 sKlpUa{krP҂_A{IG3]ɇ`_7p\,A¼ n/]<Ä nSxQl;v,(:אboĈ A#ͧ:7̅p8 gCAi"ˈ?+Cة@i,:>s:ao_bQBE[=iZ?BrKQPWޅ,}I#,'E(,[2ƅULT\S]H W~X2*pl_ 1JL&V,݇ XQ^9;8qn&9;g7G羜js\EThtr_׊NR%x ) +ҷdm5٫&uC y$! `΄ d !?t͜%z: <7W@ @)\{0_dp+F`=_22Kʊ9iUX:eZf:p` siOf]+Vzs<"'tw&C67aLiCZ n#Q-fq!% ꈢRLKF'᪬L)';a>b'CIk'g?_-'>-/sT;(Q%EaŵCre]F(R_\am38 + ͈ JF*F"cK:9j}̜s^сٵS 2t35Q[N oh'_+#Ξfᗞ3Ѯ3xi9\ N!S7*|Fe8))BjˁO_4O:R3r^Ǘ*w?RӉjWvY0PJA9&Ƶ;\Q؎C_g\*,yP}> +5VQiE=ZteuR9BS3ZMkMB V5҇+@pRpv:hCf]%#Ze^QH  S)[s֦/N0eJ6c$iCCPICC profilexJPVKIq ;CBM#XқI IJ |}# ~7:8 B݉L/C /W viҢ< |*+5/mU=Y ǹ.TIjμH-ؼ $?8lw8O{qr1}.]zq1cJDA[sJKF=9F1VoQ.'c/m*˼RF&a{ܬm- ֒>#aZYo3|PL iTXtXML:com.adobe.xmp 6rbKGD#2 pHYsaa?itIME ! IDATx\yxEsf&@ɐpdM`A r 쇬 $YuQp|uA $rH\8L}00] v/Lu~Uzu`׳`z=( 0[1'RkBaY[`#&!HJ|H,2}̶=[(؝!*a#CT>IxR`tl&BG骂jYx /:mQFIE*4]6aOW-Af۪tFmydq~G3QHLN4$yse^v?2lPr61r?VƜ!%!D@ʑ G7&9QIwʎnBuK;r10[\6Xw%3>v6ĉawa;;>i4Ygq͸!F4W]ٙ~jHLb' GRi摄\M! D=urHR|,@~I"Ít Ѥ*FEAnVyt=f8h~*vD%W~@-tJkzr֪A-"pvʳoл_^NPahz{R7Rd:Bn|Q^+zsN3!0czYFg|Z )~xYcƪB`U׼nr#?vPrbQeThھ9bњ샱sxQ<w+TibuUt++pCa*%CnG I<Fx"` x`%I3<TCδwC7w*w#۹dh(iiy[ruUFvh@ԥm>|5AڎGTGzɄcuԙ2j1'Y(,QpVvFVC@AyTn@XҟL)V~ tc'K&}e]~7n*?L4 LM`8vw-n&"_b ׼PDNuXLm_yȁ۝*rxwr*vuy2zW;/`v<$uC:=Z'MPHOHaB[1 ~C πF7-E']_=k?+ǒ_1!MY~ea<"q23Gl!3%V$ZCbj-~ d蘔kBut>OO-Iؼj||rMMKWǭ()O`8M[)]6Bdin*sٹ0 JXS0n)Ֆiq=zjcљܩ_R1뗊szg[SZ)ʁ@qDUGIemvqҹ(1# ʲ^odBdצ|M̙"Dbĺ2ґpe7}xԥ}Y#R(`}J\Hcݛdb`GqyBX]dɇ1:ܢkrWV)@_Lڠ*NR7 j`!a[ 8*-lpwD(_E g+L*S?mb8*?MlC mUzMeGlԶ#BKs[. sق m /6 *x"p$Xؐ)llN'f!Υ:njv#:9Oi6;5^wJA Y8GINOY~s_нUxQB okMRɭ  FFWu_DâƄUa|h35=֓ͪQf"CDg;fޔDe Q2y7S(tp.ݭz $"$_NT5bBه! ϗ_u~܅ 0_N[֍':Ft8ʫ~*fbvX.ҍm6gPחNt6h:5ߧ?k0b̅:7$C;+D7ۓ|E|rH &'9L5 Zfa'H9cRR:oRTj ?z a&?qh;_GaeL<AA 3.w^tĂ/7&I(*_Жt!IENDB`PK Tׂׂ)imgs/dc3feca26f74472fba85a0b56cf0a1f2.jpgJFIF``,:ExifII* (1 2Q1Q0Q0i``GIMP 2.10.302022:04:13 16:10:02 <B*JFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?`ypcڹz2&x/?Co+Р\?iO0냑\YCbO1p|XcǾ=8RrVJO K'-_ Kxׇ/})[ C讣PfjxT̒ W_\'+{ E}?[j/TK):Ҹ[ MWWD[@ $?n=6??#٪T!)-l骕*9? ӏW{_QKĿs׺QG ;k:魯X%[=)__ {HR30I+#kfFmv{Gz] FF?}~({`c6d^I\[cX ^gE!uz6Ҕ[Caׇ^E[`/3{-KLRvqW&"gsPNI#qz,먮Mʟ; j{j?1_9?yoE8#^ ޽q#^ ތ07k}G|'?%퇩6jj_:}=8 ?kGH$T„\(B ~vfi1Ǹꆍ)}:)#x+\sI5U%fgh}#oiUcy/57<Q_)^wLDzUKּ",[21V}wc`Zݦ]!}yWg-4mfPRkcrV|*0.~P<L?3\Nλe]EvmgOYj+ХʯG L5C6>P85)A}/h`iQ@$q^j=wo&pKE'>딵Ah.9mnkN>' Y=W5`6W77EUMX? UBaqzG.oײ|vZ ?Qy?o łx?*E_ x7z*_ x?zx/ 0?k'9߄O߃֤Z᫋ |TsBe-Ox6l@jNo֨1WcAR7)ZZ=[/r_jo/MZA2NzgjO ao^*Ȯ {^==Z6Qm?ֳj;i2=4Wֵ%j_Z ;i2(|Vk?7g]Ekx1hV%_oz6W\8m].W֩ROC+GňJQ#Tp}^c/=&|XR (;i1;EdMX? UMgqJI`(}ozkMt(8igyFu_ּr?' ?Qy?k ͂x/*_ x7z*]~`Na F/o\x\n#aےu:-'<Z?K)5pJ񌖜A뾣ঃ綣kԨ>WJ?yg*E|CkGjQSoID%Er?X*YI=kOO'7Fybr[C[MbM!UwA^I\YGO- nΡ=ҟW^EX>GOG1:LTc±-t!ZF ^[>,??n9:\s̭J(%/«!DzqUuP54W*w=?QS?U^v4QO"p 6?!]ı /&S[nG3xhp7cIױ|~Z> džZ?Uk>/ȫw׃"sDzF$CS'?ԿOOZ[zCV~]D,ֱevC?=^+V|U,,~5VMmuy-2\<{2>;VD^[ԦY{Y^GE'֥;s;.xn?Տ5/soju3V>0+w1?#^wTfO ? %x{6JYs^tw=i+wk4Y-Pj٬m7KTԯ?:UF8U5D}|V?V3\FƵg]EvA]k5g]Ez4y5V~|nuyPF}ִ*b5=.̾5q?Ҽkz1t{V{o?PkF!EbyM\֚צK #˕tkM;S&B*_4=P+~%_-~]װ| G_jνxj?'WN,h|_Z?w"?#^ތ?HGZK5gGz?'ڿ ~PSXJ%ơAΛKƕx_}3^) _(?FzOj?^+?cx~!B??QZ=ȼ#m3S7lG6FKRկp?Rjך5軲RP#y>:DRWC~/,oxЮ/=/Q{E/Gd(@_p3\F!?*Mg$o"9avPy-h#nRGzMƟ+<굡,BG4f`|Hy`bX!߱\_Uz_^z+c{C~(H? >P>GIφOsnjmnwo?ʀt 5Ao+_g(QjG?\L\{Vu?Qy?xO]װ|K٫LWN|h|`?LA]55?YksO"sC5?Tk7~o% (Vǭik-Ej<ZɪM\bWSWɿ´;,+ϹG A곟cHE}SN ;mR`$u~ 5p^+4B2cŷ_5FW& I x˻4տu4kz¼??I '5Ն{IdxǏ4 ;eY",<7ۥޥo$N=+?c`fY?WIFB+W~I @2]mI=oe\_h,?Y u=dy,uJ$`O+oɫiS'WDdAcLl-uo^[ ǖf_90_y0axM{'wzN«_ES^v=sV/Gev:./awTΣVfjQVb#<W$]%tS0yVKiJߤPB;+Xuև7g>-SZ OTSЗzr5E626qtpkWF]Ffh}Ѹ pAVn6F/. YԄv@ȱUSc5ԑ{z עm7t*iٞ[Tqz/-?먮B5hRz_#Z<7V#30w##?k&YXczWV8UhtOE]:He)PN:ʋG$y1UZSv"\nr?T?W;N+φ1Jg-_5\FuRW_uo^W/ ^E+»у8C­ӏ]RG}T]ZY]Ln 8ΓK*u'&-+_𬾩>_ٞIM>}7[>/l:cψ:o{Lrq.wо0XwM\ j_ڽȯ[/%z+v~f{hx%).'/G'>O:_&?F j?T7ڕާ2yp:[«+"u9 ;7|Jѕh>5k_^r}R}C3sEx?&%W)5 /QIJC]5s J|AjPyMwm uv? T?ɿ7NLV\D\{%VuRW]7a-Z? ]"vY'W?zWN>i_ӾXZ]Z_żrsM?ƭ)}t_X/i^kυE]>QM*X `wuIsHY0}ꗎ|]ַA6?uIasɆ<1M_>­?֦jm$hcIVE/E/ߕ C]&UZQyRB^#VB~UM!%3TK+X%h\΋ s6qJҀUAŏp?O# )nyUR^/&Q@?Z%Hci$`$Q·@OE#0?Ru@+48$kJr[(=zV{K x%wGSJ=5OV&/&Bb۠q%7{o\]u?SVدx/Eo+»׺czJsO!cGxIZRuj?_տXֱ_>!%8kst#:c]2r+%s?i[&ڼxLbz8QRˊ:xݳ[Y>:9uk|/ס/sʇ똮SNJB^^X_#Hrk.&zaCq!t6ZX[X-Aw5c4I݄#e?N;/ᱟXl+!/#\dže밯B.X+x!9:VCsm A:=s^t]VJ,Vh3Ans9Zk{.",(VaVj.griÑX'#MX ![?yɫ_V9jn\^WWiT]lcۿY0gg͏ҋ:)ƢXJ4A1(?OJ4B'o}Wx?*Ou?=smJMJ꼈_ ??OAYf r}ixK:I2# *|܈U+)$y39hײ=O^.ss^S#ߴ FPW'ݛ;slkھ{ ΏeUgF|{? yߨabA~5 o%٩&==nTFZnɳ xoCxĘM5M. \[C!suT/9ɧS!NXi&·FOVl|c-\4I?ߘZhKX~cLwkNn&zv:OIA'14#ߘ稫PeO&~ AO&(PZݝ 1D:)?ԵKV ]p8ZaJb״=O^*+ھ Ǟfqf#WٵJ>c< &'Wf %NmhSQ0~ֺ>(@R2qRgإY.XQ?+J["MJS].>&=m.M0?^:7R$## t:ߊMcOl*0y*:t=>y&;(UPgk1MdPA,+Ħ#9@)Z_M~i{{W* "ft Tk Fd>0agS5faEf`F~oָ#m8d돺zV[/ς[si8"H`>a+=?_jz,Yn{u5u[^xkxlQ?1pHct%=6EM5ŻR::R%20Rjy_b(#`J`FT--?ީi"8_c٫E{_<=LXj /# iz٭O8Ktoɧ58$P+.mad+&?5NM=e.n[j|%E$qP`@jP3\?»>O>pLEÀALr}?}# GSO wMc 'xwด_b2H 5wmF"*(n2q$w[O>w Vb$s^eOe,L[7j*, Jʶ$M̾ae;9>߭2]OT}r;1 sTeFWvG`?\ߟ( t.<{/énN},Z9T[Px&l?zqϽ2EnֆWǴdJ'00y^'*U7/8í$MI O^%{5taٷ)y9?jLG c 4 ޾=eMC ?ZCMoL=ihcɬ5-N39hI!gj?mmgNӇې{^ v5.gÍ(<''}j]xt4VYTl9?2{|3?¶Xv5[ϲ39o$_@? ?Nkן MUGᇆ<=iӣvzʻ/}61*9F| 4;bL7ـ]fhB I'%JTI$ uhttp://ns.adobe.com/xap/1.0/ ICC_PROFILElcms0mntrRGB XYZ  3acspMSFT-lcms desc @cprt`6wtptchad,rXYZbXYZgXYZrTRC gTRC bTRC chrm4$dmndX$dmdd|$mluc enUS$GIMP built-in sRGBmluc enUSPublic DomainXYZ -sf32 B%nXYZ o8XYZ $XYZ bparaff Y [chrmT|L&g\mluc enUSGIMPmluc enUSsRGBC      C    v=J{xOII~=.vKUnV%Y \YNc%ߕ%U)':V.zuG7KcAEEjgë:r‚h%EQ 4QK| )C!҃:9-+ wMZ\#VI]iSZ)TYؓ89w& 1w cz/| JPӒoZT֊Ux$[4>ѡ&#S="$LvϖmʵtX#6^4#8 7uOHƵrVBw6lVv]$v3fl+w%]vH(` B Ӗ -t0`^lzKC"k_z7gJ, ˹Zt_<>*⑨_kXQ+jE):mdea|q*)K:$4C1iȫ`^l띾m.jE(<=|mlГ-Yp!9V~*8]Ud!$9oKZrN@ûˁmck,=[)JfJ$6jn+"}J?c7$?'o6m.]O7=4 G1JJdܞ%qBwdnobz23UU69&0J֊Zx$ ^=2d_hel@ ~NmzZ¥ϣ6V'kE. >{r)"ʙ)Yp$ٖ'W$Tnr9vK%B7 xl|.zd, Ʌm߭8zJKTg4Y9b1KIe]"lΙ-Zo %ݗ᱿Zp]̯0U6%M=0,#PS8#aR :lcX%ejH0nNm JES{Ft?/˧ꐶ"D1|mp̝)Xo"ݗ3Ei. fWU[ d)MmfXew+ڒwWU/g+g~~tw^!˯{pd%g*>6. *;c oLhIJڲd{p__zKI֮9@w _-İĴl)S{^k¡qK&؉ү{L=WmjzyGH;pIɹ[k!e"'Ųc^B;zp}ssFcל>VuTYIa37!456"&'3$%12#ql@>ծ aa qqqqq&..&!qaa`ڜ2rWR7QjcMq= Ѹ pnzpp[²zѸhp77ʏAauR֠P8Hec F Acdt2"WNֱk~PF,IFH4j+T6KXB_m_z hj BueS]r%~ӯND!;栴mA^P3O~nΗZE~J$k$dN:T_  l0UA9Z;LY0\K,Kp|") # =Q*HCaG:tި5N2v;rFǮ]vqvv@.] v . ]CDFΝ:w? Wue3Pk<1˔MMɔ'ӳ5I>ӯO5G!GxW!WMBy|ІJ7N}UƊSZ7}:u,3(a-SHؙUU6 t9T~&aKFe@ iƶ'Q~@JbӮ7+_rOsN]<} ְW=Z^ GbZe`W#N"`K_bUxROuxJuikJ =u©XpkC8cQc,LQ={uPWe>W`!2(cXJ^N==oZϊc)29092. ̙8%?CCary=m(eK;|++&L+) H7IMQM0Qcs+ZKxI`ɖi/umŢ)JR09, D)otE &=?w#7d^+ KS|YiGUuMnogis#${3s1m2qg(=;g"^N􄌦UQ:]( R2]SZU6J]?$\ ~Tk]4Idt9[!ºX"  [`[8W-)ie`ݥ;+^TP6 ~VoQ@ 4!1RSq23Q"5AT$Bab E#C?&jI򕠈DLax72=23XFV71ec{3VUc*1Mjʶ e[z2ofc+1 Ou2_H7Na0Ź N1$j=GCK5;^ː:Z` x.C\׃r  Zrvց!_.\j h r =G+3Ѯ(6zLkA/[Qte^s# 4B[aYV165blj!14>DP0$bjbjblj% E.IOAL[% ^/Ƨ=KEYJ7֗7^?3jw7AL[kA/SQ_\u)iQ?+wqK59ܙ ~@x\)\?|,K2o}=m."Y"Z110ְ]BIai$c 1GFT(b#1oXavdtyűb]|F~0T+keǜdFɨqq④"7F;FmMNDND=E!g/uЪN=FNN fKkGS6ʼnvBmZKb:k}nܙuw iL%5⮫ߐmu<%an1B{>#8eW&~] HJ3nLc_ޚǠ⵸ v x;?u"V!%V&[An!%_L\ zBmZ}laㅋq*ʅjL#VSFҧFDU gQQe9F<✿2@Sx;MeGQ,N1I3)jĽd!6xn>]1D2#%z}F&Ω MR&6A& *5cgT(Ω MRHDA^BiP#cP&ơ QR4$0⵸ z nw֒u\qwQZLrd RR+{S6ʼnzBlZ}kb;R%3,xk 7GbQ3h b#7JV/X` >V+X` >V+K;>jbS q-&OxnUXyhDE#bG4'._Hfgv/&c },%kCcX18H?]*18 ac}.L{l0b CZD.:l_OM&$gO6&BDr'Ң.:̎l_OM&4A'$~<ТYTeDp' Ul-KtC'Y&c zQ]?plMQPj3G]Hfg&s '҃ `ib". /J+|F #o&Q`T/јQ`0T wpD0;?_A6˘qHI B(ynbpf/oj1{{QڌKZN{{QڅAJ5@e'Y* \LrCL%~I6(N9I#:Q( h5AbI몏.:̎V&q2' pѤMh ĚM>8Q) m L^AKɎWMcOAQTbJ_j,`œNLY1d.8̘bodC?-U""[kx18aC F0MmVV1(aC FE HˤN3#U㨙eSI<mQ)oVCˤN3U㨙e҆bf{hڡ;mq>Q*ː%ZȄy2="q" 㨙eSҊ(yT'~̪3U!8:HG$N3AXn( CNP(r2#eWC w(#%0_`ߐ! l*bpȆ0a{./Eh\#+Jt7 ](hDs#.QR/zUBq1"q$JGtT V&CEB1߼̏n6eݣ*'"i'i~uRuV>ġ jLVDJoƚq貇aK ߵ3YWUㆺ[~xt" f! oȂvHTKj5QAȇר,il59SiCsI u{lפ*bFu12H4 E5Uc'tnq`$έ&ɠ*b*H1DL{xyUM !15"Aqrst2346QaBRu #$bcd?e!ffUuPegl9_HvFh{dfvFh{dfwvFfwdfgvFg{dfwvFh{df L6/.j!3LR,QHP Xҗ l* KQi&(մ rAcqn}X]vGu]&?H]vG uy2,ٯ].іLV\I4"2Z4'gQPyì;:fo3\4f^cwp7->u.'0 fƺjM}WlLKJ4a)A%SN50=u%[fo3\)S! U)^Y݋?E@$%D}8TVڡ%XepҘ8`dyKJKK$`ՉQQM .IBU uOK.{ eE/@#yv$=gLh^ ).I,Vnq,Y\4-%:p;93ܓ.nw6E?ެOV)jT*+/w3j l7Yo)\TZP9B7bCmQi-jg[?uŝܓLLhrư0̸[)Ȱq;JCC0o d*buSSklhLgK?qh-IRMB`rdo;ė.JT/*&<:Rt4I}%I!dҔ/ǃJ.Ni(K̀v:l ⯮8%:Rh/tƱ"-><Ew݉-5+Ě^fK"|.&a/p=7-P5FXʐcz-.8W1do9ėEClǽy 9ZlI;Xxhq ֊jRjZy." @&8bƬMibȔ J81dp\bK梡^HU qw"'8}BJ8([lڕbchVős݉> &gҝmEI1wAx_-fC.M.a%)؁w:%_El'A l(k;;2M PR8|b+gtW)!̾ؕt%+N@LZ|qBb๥1)sPìM7+[/ĒdۗKq>'% bc5uq亸r}bUB(ANJ32< Z :1%z1%:0HCMOK+Иx.i+sP'<jaĸi&M 8\qgq*N dvR΢q4œϻoޠCӕ.ODI55,chzBVi^œsHn)$ W; xZjpҨ44>xYD uĺJRkO5\X'x-Ƭ-% rdW\rmlkMMTV$߼pZiS&+ueW SIPpmR R7q eEǪ*^ŕůH8v@i`Z-NzUO+.ʭV\ZiU&- P9)mK(42`WTZ|z`j,-zDJRSM6:ӎ"땦89'#cdl2en&ܺ&@7JRXOdfzDK*~҉eەiU(1Fmc1XLf~ļ*bao1ݭLZփʕ -ү%Cr6nbgHnpck/1䭙~VOJٟ%,%lqGoH| qUu)JIB%"өЭ'.OKY1G1G=1/1CI;:ab1 JRNTTŚB}5780KlJ.*ܼUnC҈eҴ[eJ~7+?6^mBX"7(1~oNϪϼoұ$Pe%L;!@wBRӏkfqٙd5zZQ+ƺM+휉7mkQR<߸a[*^œ ȗ+P#svC(CN NKԋ44u qW[kM@Mw{JySmNO8GrLbM-qҕ-l$]ɋJZBTmj`8Ғ{ņb/8W4]z}Tl {Z"eŶJĚ~t ((uY7IJiVDP OyIR` c1oDīɺ덨VHVf%f>®1j.jZc9NS7&: xSޣ i%HHKA^N"Z^t%'5rRU teEBv׾ Y.7+W(Ľhm_yOr}G([. ҄<ݱGҔ?/l{"*T?pf(g3_gr\.l92_|S'!1AQaq ?!d-[aC˭##rVQCtM٣qzZqΥ(]F\UfYKRei6~iV$; -Тl=ƃIsH\hgn#%F!]ܾ(f&Y7a0Qu"6{<_; " dE@:Xbv{ΈzS|y|OX'Y%_ieTsSP9u2Vr|fag7NԷ?5tS%Jn,B1[|quuM(6Lએ$v":˅ݿ K)(r (mzPw1f?0_isG@Z,<}ZuT\}b]Ps1qal_M RG8yٛrԷEH+Mȗ7hgUGgU'k_Ȍ< 3PV0$nBa"%>YO-MLJit:Yʑ假;BWqN+FK"PӨn0A͕4K.?؇a%wa~6uW{Xg-$0<e1BW΋V@aNP\ßq厊MK_G Jx=HEmtzM\dʠS[$Υ+ռhIGMurI\-CRn+/f|,:')=xhz WRR?uH9͇ NU*:&B l^0 :՞4 4hNVBy!>͂>0H .}/tf`T 7U@oj:BJ  ޱt%x1|B j7қ73b:}J{\^RႯ7w(vb یuX`s#$p*g ;Ytl yv>qc<,Kd4kp}J  p0.VNnw=yv>q^B;14YvЗX>k;Yn6Sq\X:tl˻Yaq& )iSQ*.Uu>|hzzGxxNS4>L(PvoW/,~SA[q;;}~@0 f?O"*`@d[ 8$TNS>(oNhʭn ; Oe+w=)M&!zEXcw<g[k~sb=*>3xD##ofq_e}ߘ_1GǏqVJo(:&L;;}.da^/459yT724](4|APYFtv9zV i{x 0+XA@Io;~RhN*,syD'C\,[W6;~BtP8wΤñU 33J BfXwoх8kz/%Vmϔ5t;HvpO- R1꿱3@Z Qh N)߾c@:d0O!Қu 7Nnٍi8Ӎ8g7c 9&XĜJ^Sjtmh-"itnڹ3=JNyѿH/]/5q5* r5sf)<`۬];mM)*z[PMփbhC;o7eP?A7_-若w+NY&cv)z&*s[*aP{WjUqmٝ/$o ņ ,ct϶a }ڡzȑ>"5U|AFݽ"},c[n5Sk/P4Ufh 2v.5-^_wwqQ+UuW+I'!1aAQq ?;Bhɸ !̨>CSi>6ڦF4>.:jOٓCSh}MAO"D KchX C0«U*uh@$5FSVjUvLQ$ ܇e!q"or.cOr\.BAB%`ǵ a I6g2vP`@d4[5@AԵG"a$[B |T}X"y=Y̶]`DcR2˴ S2 _r"#g483U:* Ц{ ]9{Dp,j~AnP`T#& vWhhbWhvf7Xh#@h#!!M-s)/{%\,8޶ݛÄ,73+kS2+gXx|Tv< Ř3Yȶݔ'Cf'AUM!췃`!+( M$̶1:(&oSr qQ`d^ޖ)Um%N`A3} b.@ݢcP=#v=? \ w&{uU i.\_Crh5+VuEOS (L!(qwHE 2| ƒ5쩥1Ȍ@EkoS2 |8*fc,,ɰbT,zH@w; +iFAdI9&xYϲ<Y*J8sچO>VTyE. vAeV-H} *-8&2L򂩱U*Ҹ)CŌ}*_bvGamT XnucvErEٰcةėtZxS}&6 `Is )#L:[e; 8[]ac(X.ub0P\Je8vL!l? B@a¬G4Nt00lDɤ |7pp ~Ao RCyk {-D3jMIN~Ӊs77hc'h% [ # LA(AjEA &{Mш\ky !O E6o,O\!tl4rp$ *8 1ET#:3`@,fA6Ea 3f 7M,qHa)!v9AoY&A%X~ > bh@  8y`PA!t}]h<<J.)3xD+? 0Cy8&X!3NƔ]x60 $&!1AQaq?'g&WE9 FR7gvx|0ccqXϠ)wǿ:97 LMl1.HU]\ "'8" 1M7$q9J:uЀה(2%OON5>Qu9K!U\Kq2\J zdnn@6 EV.tu޵Xk\#]ǴÚ+' ߰: 2ENFZb:4@hh7I-U`J=a^éSǷeۿ"BW/6/;:~Tr@ 0qzJ A7h ><+[Oq X{%I-|N")z 9R{|R*(vr:w"8ѳ3CHت R20 e)S$mZLM2EMIbz44&-H'WjaE?{ j 5/18 S!LT6];D)t&FGh.chȧ(op2 j E֒7F6.!9"A@QLQ~3SPJ"{ptD}ژJ@lDD=V-Q>`zbE;A L03{d[Z`޸I%8B*Vl\lpiX@!@GS09/S r #eP_%>/l%^|K7B~Y_ŹA*ڂL" u:>1y.z0(`W-X(J2a2 mՑ\A&Wf@Q& $Aʟc|]qiMP.clmVg'XA@QC0zHn# FZkŮrͣ38%c-:bv[3t߮ t M"FN&9mFT͠ݥRLh}8o1H@r9@>F 6,,ڹMamDy~eu肥)/- {bۧk Z+pFWXݙ=U[} ]LάV2`953@ 4fNU#A@bE@0:Rgȡ yk8˵MD4_`L4Tq}:{`8Y=N4,NB-'8: P\PQϤ>'@Ÿ0U^s*)r@xG9 LyLD5dԠm1Y7P*t:]Sg88*p?;b(EvgoI昛Lk.vzb@`:SE`bƘ ėNnc?8/1܂T55Y{ v)ljpgX)>=O0` WxZ&y:ׂ{zb#+G*,LIc{vnoXΥ-lq"Ъ :rzaX} ѤU :L>kVh7; %TB^hr7?>FF_/w,]Ʊ-{S1,'7uv=fpq6*g-vqv;R M"(#a<2|_:2HϬ]W\bYp̒[y\<9Kbh17,A!Dl1A`B .iH{b"bqPBr%Nwؒ0Ǹ{bG&*?Vx ?˅j;w"2U`vg[ YNUUX8:12S|(.dZ qFzR8g]n,dUk)U'QvGOlD g+=}.]ác|e#K(\lfA6` w:U}|_ |0'[!8AP@(B)jS[f8/(<&p †Bh:=pm$QY馈q|o+GliL SJ*Ja ӁRۢHI R!;A&(* <9g`ou$&@z$udז(L^44ѷNR-]~b @E5 6@\P1FBin(V:k9^! `k</uKBO}$ X"ɶ@J&~CZhX QI"J`Όzk bponq2hT-{IZ G[@[A-$Zvs8a)-T&Li\8HFA\uDEiꌝb ̂u MA\BPK Tres/PK Ti18n/PK Td== i18n/zh.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/de.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/es.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/fr.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/id.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/ja.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td==i18n/ja-jph.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/ko.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/pl.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/uk.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td==i18n/zh-hant.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/nl.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/it.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/hr.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/ru.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/pt.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/fi.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/tr.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/tk.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK Td== i18n/en.json{ "vdr_grove_clavier": "vdr grove clavier", "extensionName": "vdr grove clavier", "extensionDescription": "", "BLOCK_1654726329719_PINSDIGIT_0": "D2", "BLOCK_1654726329719_PINSDIGIT_1": "D3", "BLOCK_1654726329719_PINSDIGIT_2": "D4", "BLOCK_1654726329719_PINSDIGIT_3": "D5", "BLOCK_1654726329719_PINSDIGIT_4": "D6", "BLOCK_1654726329719_PINSDIGIT_5": "D7", "BLOCK_1654726329719_PINSDIGIT_6": "D8", "BLOCK_1654726329719": "Initialiser clavier tactile [pinsDigit]", "BLOCK_1654726330022": "Répéter jusqu'a code trouvé [password]", "BLOCK_1654726330472_FIN_0": "1", "BLOCK_1654726330472_FIN_1": "2", "BLOCK_1654726330472_FIN_2": "3", "BLOCK_1654726330472_FIN_3": "4", "BLOCK_1654726330472_FIN_4": "5", "BLOCK_1654726330472_FIN_5": "6", "BLOCK_1654726330472_FIN_6": "7", "BLOCK_1654726330472_FIN_7": "8", "BLOCK_1654726330472_FIN_8": "9", "BLOCK_1654726330472_FIN_9": "#", "BLOCK_1654726330472_FIN_10": "*", "BLOCK_1654726330472": "Répéter jusqu'a texte tapé [fin] ", "BLOCK_1654726330697": "Touche frapée", "BLOCK_1654726330882_AFFICHE_0": "visble", "BLOCK_1654726330882_AFFICHE_1": "caché", "BLOCK_1654726330882": "Texte tapé [affiche] ", "BLOCK_1654726331141": "Effacer texte", "cate_2b4a0a0b": "clavier tactile" }PK TeT+""index.jsPK TE;`44HhandlerProxy.jsPK T&$src/PK T7l[l[ H$src/index.jsPK T"v&&src/snippets.jsPK TI~1src/generators.jsPK T)src/arduinosources.jsPK TEAsrc/facepanels.jsPK T_[[src/exthandler.jsPK T~u4DD src/handlerProxy.jsPK T src/cates/PK Tsrc/cates/cate_2b4a0a0b/PK TrFR R src/cates/cate_2b4a0a0b/index.jsPK TȨ.src/cates/index.jsPK T?w!osrc/cates/cate_2b4a0a0b/blocks.jsPK T Msrc/langs/PK T/)(MMusrc/langs/zh.jsPK T/)(MMsrc/langs/de.jsPK T/)(MMisrc/langs/es.jsPK T/)(MMsrc/langs/fr.jsPK T/)(MM]src/langs/id.jsPK T/)(MM src/langs/ja.jsPK T/)(MMQsrc/langs/ja-jph.jsPK T/)(MMsrc/langs/ko.jsPK T/)(MMIsrc/langs/pl.jsPK T/)(MM#src/langs/uk.jsPK T/)(MM=)src/langs/zh-hant.jsPK T/)(MM.src/langs/nl.jsPK T/)(MM64src/langs/it.jsPK T/)(MM9src/langs/hr.jsPK T/)(MM*?src/langs/ru.jsPK T/)(MMDsrc/langs/pt.jsPK T/)(MMJsrc/langs/fi.jsPK T/)(MMOsrc/langs/tr.jsPK T/)(MMUsrc/langs/tk.jsPK T/)(MMZsrc/langs/en.jsPK Tii`src/langs/index.jsPK T cmanifest.jsonPK T Tjdata.bak/PK Tl7QII{jdata.bak/ext.jsonPK T19xdata.bak/categroy.jsonPK T\Za*a*{data.bak/block.jsonPK T)L data.bak/translate.jsonPK T)L ܥdata.bak/facepanel.jsonPK Timgs/PK T22)6imgs/51ea12c2a8f9420bb6dcf7ad59cfc2c5.pngPK Tׂׂ)Zimgs/dc3feca26f74472fba85a0b56cf0a1f2.jpgPK Tx\res/PK T\i18n/PK Td== \i18n/zh.jsonPK Td== $bi18n/de.jsonPK Td== gi18n/es.jsonPK Td== li18n/fr.jsonPK Td== Yri18n/id.jsonPK Td== wi18n/ja.jsonPK Td=='}i18n/ja-jph.jsonPK Td== i18n/ko.jsonPK Td== i18n/pl.jsonPK Td== `i18n/uk.jsonPK Td==ǒi18n/zh-hant.jsonPK Td== 3i18n/nl.jsonPK Td== i18n/it.jsonPK Td== i18n/hr.jsonPK Td== hi18n/ru.jsonPK Td== ϭi18n/pt.jsonPK Td== 6i18n/fi.jsonPK Td== i18n/tr.jsonPK Td== i18n/tk.jsonPK Td== ki18n/en.jsonPKEE