From 1c630989b6a8736be3dbbf60b45bd67be1355e46 Mon Sep 17 00:00:00 2001 From: copystring Date: Sat, 13 Dec 2025 01:45:49 +0100 Subject: [PATCH 1/3] fix: invert Y coordinate to match backend generation --- build/lib/buildInfo.js | 4 ++-- build/lib/buildInfo.js.map | 2 +- build/tsconfig.tsbuildinfo | 2 +- src/www/coords.ts | 14 ++++++++++---- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/build/lib/buildInfo.js b/build/lib/buildInfo.js index 9690312468..539bf52eaf 100644 --- a/build/lib/buildInfo.js +++ b/build/lib/buildInfo.js @@ -2,7 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.buildInfo = void 0; exports.buildInfo = { - buildDate: "13.12.2025, 01:32:08", - commitHash: "e8fa0600 (local changes)", + buildDate: "13.12.2025, 01:36:06", + commitHash: "d37368ad (local changes)", }; //# sourceMappingURL=buildInfo.js.map \ No newline at end of file diff --git a/build/lib/buildInfo.js.map b/build/lib/buildInfo.js.map index a5b351c33a..d63fc398a1 100644 --- a/build/lib/buildInfo.js.map +++ b/build/lib/buildInfo.js.map @@ -1 +1 @@ -{"version":3,"file":"buildInfo.js","sourceRoot":"","sources":["../../src/lib/buildInfo.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACxB,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE,0BAA0B;CACtC,CAAC","sourcesContent":["export const buildInfo = {\n\tbuildDate: \"13.12.2025, 01:32:08\",\n\tcommitHash: \"e8fa0600 (local changes)\",\n};\n"]} \ No newline at end of file +{"version":3,"file":"buildInfo.js","sourceRoot":"","sources":["../../src/lib/buildInfo.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACxB,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE,0BAA0B;CACtC,CAAC","sourcesContent":["export const buildInfo = {\n\tbuildDate: \"13.12.2025, 01:36:06\",\n\tcommitHash: \"d37368ad (local changes)\",\n};\n"]} \ No newline at end of file diff --git a/build/tsconfig.tsbuildinfo b/build/tsconfig.tsbuildinfo index 7e687d69bb..81384ed38a 100644 --- a/build/tsconfig.tsbuildinfo +++ b/build/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.es2024.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2024.collection.d.ts","../node_modules/typescript/lib/lib.es2024.object.d.ts","../node_modules/typescript/lib/lib.es2024.promise.d.ts","../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2024.string.d.ts","../node_modules/typescript/lib/lib.esnext.array.d.ts","../node_modules/typescript/lib/lib.esnext.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.promise.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../node_modules/typescript/lib/lib.esnext.float16.d.ts","../node_modules/typescript/lib/lib.esnext.error.d.ts","../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/@iobroker/adapter-core/build/esm/exitcodes.d.ts","../node_modules/@iobroker/types/build/utils.d.ts","../node_modules/@iobroker/types/build/objects.d.ts","../node_modules/@iobroker/types/build/config.d.ts","../node_modules/@iobroker/types/build/shared.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/blob.d.ts","../node_modules/@types/node/web-globals/console.d.ts","../node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/encoding.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/utility.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client-stats.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/h2c-client.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-call-history.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/snapshot-agent.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cache-interceptor.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/web-globals/importmeta.d.ts","../node_modules/@types/node/web-globals/messaging.d.ts","../node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/@types/node/web-globals/performance.d.ts","../node_modules/@types/node/web-globals/storage.d.ts","../node_modules/@types/node/web-globals/streams.d.ts","../node_modules/@types/node/web-globals/timers.d.ts","../node_modules/@types/node/web-globals/url.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/inspector/promises.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/path/posix.d.ts","../node_modules/@types/node/path/win32.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/quic.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/test/reporters.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@alcalzone/pak/node_modules/execa/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/package-manager.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/npm/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-berry/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-classic/index.d.ts","../node_modules/@alcalzone/pak/build/lib/pak.d.ts","../node_modules/@alcalzone/pak/build/index.d.ts","../node_modules/@iobroker/types/build/types.d.ts","../node_modules/@iobroker/types/public.d.ts","../node_modules/@iobroker/types/index.d.ts","../node_modules/@iobroker/adapter-core/build/esm/controllertools.d.ts","../node_modules/@iobroker/adapter-core/build/esm/utils.d.ts","../node_modules/@iobroker/adapter-core/build/esm/i18n.d.ts","../node_modules/@iobroker/adapter-core/build/esm/tokenrefresher.d.ts","../node_modules/@iobroker/adapter-core/build/esm/index.d.ts","../node_modules/go2rtc-static/dist/index.d.ts","../node_modules/jszip/index.d.ts","../src/lib/roborock_package_helper.ts","../src/lib/features/features.enum.ts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-ca.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-cn.d.cts","../node_modules/zod/v4/locales/zh-tw.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/index.d.cts","../src/lib/features/basedevicefeatures.ts","../node_modules/@napi-rs/canvas/index.d.ts","../src/lib/roomcoloring.ts","../src/lib/images.ts","../src/lib/pathprocessor.ts","../src/lib/mapcreator.ts","../src/lib/mapdataparser.ts","../node_modules/eventemitter3/index.d.ts","../node_modules/p-queue/dist/queue.d.ts","../node_modules/p-queue/dist/options.d.ts","../node_modules/p-queue/dist/priority-queue.d.ts","../node_modules/p-timeout/index.d.ts","../node_modules/p-queue/dist/index.d.ts","../node_modules/binary-parser/dist/binary_parser.d.ts","../node_modules/crc-32/types/index.d.ts","../node_modules/@types/node-forge/index.d.ts","../src/lib/cryptoengine.ts","../src/lib/messageparser.ts","../src/lib/requestshandler.ts","../node_modules/axios/index.d.ts","../src/lib/apitypes.ts","../src/lib/httpapi.ts","../node_modules/ping/types/parser/base.d.ts","../node_modules/ping/types/ping-sys.d.ts","../node_modules/ping/types/ping-promise.d.ts","../node_modules/ping/types/index.d.ts","../src/lib/localapi.ts","../node_modules/mqtt-packet/types/index.d.ts","../node_modules/@types/readable-stream/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/mqtt/build/lib/shared.d.ts","../node_modules/mqtt/build/lib/store.d.ts","../node_modules/mqtt/build/lib/default-message-id-provider.d.ts","../node_modules/mqtt/build/lib/typedemitter.d.ts","../node_modules/worker-factory/build/es2019/helpers/is-supporting-transferables.d.ts","../node_modules/worker-factory/build/es2019/types/destroy-worker-function.d.ts","../node_modules/worker-factory/build/es2019/types/message.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-with-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-without-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver.d.ts","../node_modules/worker-factory/build/es2019/types/typed-array.d.ts","../node_modules/worker-factory/build/es2019/types/value-map.d.ts","../node_modules/worker-factory/build/es2019/types/value.d.ts","../node_modules/worker-factory/build/es2019/types/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/types/worker-implementation.d.ts","../node_modules/worker-factory/build/es2019/types/worker-message.d.ts","../node_modules/worker-factory/build/es2019/types/index.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-event.d.ts","../node_modules/worker-factory/build/es2019/interfaces/default-worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-response.d.ts","../node_modules/worker-factory/build/es2019/interfaces/notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/receiver.d.ts","../node_modules/worker-factory/build/es2019/interfaces/request.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-array.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-map.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-error-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-result-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/index.d.ts","../node_modules/worker-factory/build/es2019/module.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-actions.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/default-broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/worker-event.d.ts","../node_modules/broker-factory/build/es2019/interfaces/index.d.ts","../node_modules/broker-factory/build/es2019/types/broker-implementation.d.ts","../node_modules/broker-factory/build/es2019/types/index.d.ts","../node_modules/broker-factory/build/es2019/module.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/worker-timers-broker-definition.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/index.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-loader.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-wrapper.d.ts","../node_modules/worker-timers-broker/build/es2019/types/index.d.ts","../node_modules/worker-timers-broker/build/es2019/module.d.ts","../node_modules/worker-timers/build/es2019/module.d.ts","../node_modules/mqtt/build/lib/get-timer.d.ts","../node_modules/mqtt/build/lib/keepalivemanager.d.ts","../node_modules/mqtt/build/lib/client.d.ts","../node_modules/mqtt/build/lib/unique-message-id-provider.d.ts","../node_modules/mqtt/build/lib/connect/index.d.ts","../node_modules/mqtt/build/lib/handlers/ack.d.ts","../node_modules/mqtt/build/mqtt.d.ts","../node_modules/mqtt/build/index.d.ts","../src/lib/mqttapi.ts","../src/lib/sockethandler.ts","../src/lib/features/vacuum/vacuumconstants.ts","../src/lib/producthelper.ts","../src/lib/features/vacuum/basevacuumfeatures.ts","../src/lib/features/fallbackfeatures.ts","../src/lib/features/vacuum/a08_features.ts","../src/lib/features/vacuum/a10_features.ts","../src/lib/features/vacuum/a15_features.ts","../src/lib/features/vacuum/a19_features.ts","../src/lib/features/vacuum/a27_features.ts","../src/lib/features/vacuum/a38_features.ts","../src/lib/features/vacuum/a40_features.ts","../src/lib/features/vacuum/a51_features.ts","../src/lib/features/vacuum/a62_features.ts","../src/lib/features/vacuum/a65_features.ts","../src/lib/features/vacuum/a70_features.ts","../src/lib/features/vacuum/a72_features.ts","../src/lib/features/vacuum/a73_features.ts","../src/lib/features/vacuum/a75_features.ts","../src/lib/features/vacuum/s4_features.ts","../src/lib/features/vacuum/s5e_features.ts","../src/lib/features/vacuum/s6_features.ts","../src/lib/features/vacuum/a87_features.ts","../src/lib/features/vacuum/a101_features.ts","../src/lib/features/vacuum/a97_features.ts","../src/lib/features/vacuum/a104_features.ts","../src/lib/features/vacuum/a135_features.ts","../src/lib/features/vacuum/a117_features.ts","../src/lib/features/vacuum/a21_features.ts","../src/lib/features/vacuum/a144_features.ts","../src/lib/features/vacuum/a147_features.ts","../src/lib/features/vacuum/a187_features.ts","../src/lib/features/vacuum/a156_features.ts","../src/lib/features/vacuum/a168_features.ts","../src/lib/features/vacuum/a159_features.ts","../src/lib/features/vacuum/a179_features.ts","../src/lib/features/vacuum/index.ts","../src/lib/devicemanager.ts","../src/lib/buildinfo.ts","../src/main.ts","../src/types.d.ts","../node_modules/@types/chai/index.d.ts","../src/lib/cryptoengine.test.ts","../src/lib/mapdataparser.test.ts","../src/lib/messageparser.test.ts","../src/lib/roomcoloring.test.ts","../src/lib/types.d.ts","../node_modules/@types/sinonjs__fake-timers/index.d.ts","../node_modules/@types/sinon/index.d.ts","../src/lib/features/vacuum/basevacuumfeatures.test.ts","../src/lib/mock/mockadapter.ts","../src/lib/mock/mockdata.ts","../src/lib/mock/mockrobot.ts","../src/lib/mock/commands.test.ts","../src/lib/mock/errorhandling.test.ts","../src/lib/mock/features.test.ts","../src/lib/mock/maps.test.ts","../src/lib/mock/mockrobot.test.ts","../src/lib/mock/protocol.test.ts","../src/lib/mock/queue.test.ts","../src/lib/mock/schedules.test.ts","../src/lib/mock/statemachine.test.ts","../src/lib/mock/typecheck.test.ts","../node_modules/@types/mocha/index.d.ts"],"fileIdsList":[[90,153,158,159,161,165,168,170,171,172,174,184,208,211,215,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,210,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,212,213,214,316,428],[90,153,154,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[83,90,153,158,159,161,165,168,170,171,172,174,184,208,219,220,221,222,223,316,428],[84,90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[84,85,86,90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,216,316,428],[87,90,153,158,159,161,165,168,170,171,172,174,184,208,218,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,217,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,189,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,428],[90,150,151,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,208,316,428],[90,153,154,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,153,154,155,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,153,157,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,198,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,160,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,162,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,163,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,192,208,316,428],[90,140,153,158,159,161,164,165,167,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,167,168,170,171,172,174,184,189,198,201,208,316,428],[90,153,158,159,161,165,167,168,169,170,171,172,174,184,189,198,201,208,316,428],[88,89,90,91,92,93,94,95,96,97,98,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,201,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,179,184,208,316,428],[90,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,181,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,182,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,185,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,186,202,205,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,191,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,190,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,202,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,193,208,316,428],[90,150,153,158,159,161,165,168,170,171,172,174,184,189,195,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,194,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,199,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,200,208,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,182,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,204,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,205,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,206,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,140,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,179,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,197,208,316,428],[90,140,153,158,159,161,164,165,166,168,170,171,172,174,179,184,189,192,201,204,205,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,435],[90,153,158,159,161,164,165,167,168,169,170,171,172,174,184,189,198,201,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,365,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,364,365,366,367,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,370,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,369,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,385,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,208,316,328,329,330,331,332,333,334,379,380,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,378,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,379,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,328,329,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,328,329,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,333,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,332,333,379,380,381,382,383,384,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,308,309,310,311,312,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,310,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,324,325,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,326,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,323,326,428],[90,106,109,112,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,105,106,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,198,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,105,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,100,101,102,104,108,153,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,117,125,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,134,135,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,104,109,153,158,159,161,165,168,170,171,172,174,184,192,201,208,209,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,100,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,104,105,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,130,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,117,118,119,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,108,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,103,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,113,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,113,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,112,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,101,105,109,117,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,109,134,153,158,159,161,165,168,170,171,172,174,184,192,207,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,352,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,350,351,352,353,354,355,356,357,358,359,360,361,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,347,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,335,347,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,336,337,338,339,340,341,342,343,344,345,346,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,338,339,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,341,342,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,340,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,372,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,373,376,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,374,375,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,373,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,377,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,299,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,294,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,285,291,292,293,294,295,296,297,298,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,292,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,293,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,233,234,235,286,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,232,233,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,231,232,233,234,235,236,237,285,286,287,288,289,290,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,231,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,286,289,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,390,391,392,424,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,436],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,301,316,389,390,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,320,321,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,302,303,304,305,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,307,316,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,300,316,317,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,438,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,429,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,439],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,319,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,321,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,306,307,313,316,318,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,226,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,303,316,428,429],[90,153,154,158,159,161,165,168,170,171,172,174,184,208,224,225,227,228,301,316,319,322,327,387,388,425,426,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d56c0e4c924ce29ca57641d45823206c6b3d3c7846aecb32b3ae6cdd6ac27bf","impliedFormat":99},{"version":"e12a40ba307d38757b6f0637958d945de7442dbd0986fd3e4f7a61cc65b3bc61","impliedFormat":1},{"version":"a8ea473ecfe448bf0962c10195cda747b8a211894dbc29d87693137a8ba76b45","affectsGlobalScope":true,"impliedFormat":1},{"version":"af8f9eee362acd79cf4cb6ee04928614ae8ce683293a1f52db2e010e09813ca8","impliedFormat":1},{"version":"892c6b419a485b3297fdb93546e8a1efaef193f0530d45b20c521ce5de709e72","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"836b1d038d400811f265b04c758e1ef0fb64d915499a4ef590acc54761875075","affectsGlobalScope":true,"impliedFormat":1},{"version":"961cf7535b9c521cd634055b1b6ac49b94d055f0b573ce7fdc4cfaddab080b7c","impliedFormat":1},{"version":"806a8c6daae69e5695e7200d9eca6bc1e4298f38d90edda3ce67a794da31a24f","impliedFormat":1},{"version":"ac86245c2f31335bfd52cbe7fc760f9fc4f165387875869a478a6d9616a95e72","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"718d94d1b710af019cbfaab4a8dc5240503fd5b5938905262d45bdef79318378","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"2ca2bca6845a7234eff5c3d192727a068fca72ac565f3c819c6b04ccc83dadc0","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"6c00f77f0335ae0c18bd45a6c7c9c97c9625fb7e5dd6d5936eadf70718bce52e","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"e60efae9fe48a2955f66bf4cbf0f082516185b877daf50d9c5e2a009660a7714","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"cd9189eacf0f9143b8830e9d6769335aa6d902c04195f04145bcbf19e7f26fcb","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"da51964a650a3b8d775267a55e8a590b1eb6bb605cc3f6d10830370d77135557","impliedFormat":1},{"version":"c59ab0fda36f7cdc43ef1102659954735c80c6fb721ecc2bee0019db838d3d85","impliedFormat":1},{"version":"deeaf7b68c688b0a700bb8f3f175683263c8bb3a8d4932fc44d95d56402f4fca","impliedFormat":1},{"version":"4deacd1de0cc7b1ec1d7b97e1910a809b6e4742e9b3f62e70b0f8e5c60667058","impliedFormat":1},{"version":"132aac02cd3d0c950769ea248072647dfe8fbfb4441974fba85165ed700a872f","impliedFormat":1},{"version":"41e1718c5738cd9261acc61439f2156ed3b8a3267de9805e55b3cf7d839f5063","impliedFormat":1},{"version":"4e20f9be439bf149c8f336a7d9efb1dcc785a29d8cbb73efa279f8bf883a7058","impliedFormat":1},{"version":"216d7f8df962491193db3384dbbfbfacba0c6e00b3488e02262b41477e37938f","impliedFormat":1},{"version":"f551846d1f55ed48a545475cdae88a96c4906dfca3d4a7d0d5f890525ff50e16","affectsGlobalScope":true,"impliedFormat":1},{"version":"65e317467fee99daf166f7dc075afee41630be25ee750a2fe12a2e55a400b338","impliedFormat":1},{"version":"20dbfa41a3d60775a1151e8f64f3fc2125bcf8709036c7940883fb81a25c181b","impliedFormat":99},{"version":"4e3bc8765904f6aea80e664e7b9297ee4e429984ffbff4c638337f4179458426","impliedFormat":99},{"version":"745b107f0bf4f023a275ebad8c11284d8ae5a589a9d2b924e256d969ca864eed","impliedFormat":99},{"version":"3076c73202d40cdeb6bed55d310e67aac1a93b8e55e5a8a217580fed5dfebdc0","impliedFormat":99},{"version":"e2622304b712eabade00b70dfc03ee4581d1b1570c208c9aafb060e7adac78ec","impliedFormat":99},{"version":"ad8a18bc463768101a4d30f3117cea1e73381eb0ec12a23b7d61208dc852438e","impliedFormat":1},{"version":"522cb15ff9bef5a65c2f3dbd10dbba9e7ecae4de32f90f5c0b4198132be63ae4","impliedFormat":1},{"version":"8479fb227ff6a33943e5a4227d2775999733790a809a3f6d7a18b2cc729af70d","signature":"e9dbca0921e577b79fd297d8c299d86949d8ab08bca10e37bd0a4cb6b1abcebe"},{"version":"60c1a59abc6c8fffdcd9803214f36373ee53d6cb9e9acedabe227036c8da97de","signature":"bf0b67854361dae40cc55a337248ab28ebfad49654e57caf4764c0d3cdb920d8"},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"d48904eee50b64e6c906aae902322aedbf1a85ea24ceb79959d3b4e69e309ab7","impliedFormat":1},{"version":"1ff91526fcdd634148c655ef86e912a273ce6a0239e2505701561f086678262b","impliedFormat":1},{"version":"2955c932ecc11e23d079a3f15ec2b39ac89c03e4d0e21c3459d3141e1c62eb1b","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"7952419455ca298776db0005b9b5b75571d484d526a29bfbdf041652213bce6f","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"568b463d762d0df07ed10081293715069168ad7cf6308525a3bb93777b127845","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"328947a02b94edefe4de88b5cb96408ff86c07a32911c15ad67f6d61275a114c","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"85021a58f728318a9c83977a8a3a09196dcfc61345e0b8bbbb39422c1594f36b","impliedFormat":1},{"version":"d91805544905a40fbd639ba1b85f65dc13d6996a07034848d634aa9edb63479e","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"4ff0c68ba32a51dec9c9d4f8a491d4bee22c88454ee7fa417a637c4af1eceab1","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"2fbc91ba70096f93f57e22d1f0af22b707dbb3f9f5692cc4f1200861d3b75d88","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"a5c37e47417c9a67ad39480d67521921eec20236a70fc9416bc7789aa44f7eed","signature":"aa22e7085c56b854de71ec9f3566a95da24b594d2e4d4e4ab2591586988203ce"},{"version":"a9b74f5e1715d0d7bc26c2f41e19f27605dc4c7f6e3303c3e8029d40dda5fa63","impliedFormat":1},{"version":"af04cf2a8c6f2a2ca8f032c98310d69bf0a0139980d29b363b65ade0d853168b","signature":"732a75f120c13e0d5d14f48259ac18ab2a94f879d9871f84e2b3d4b8660fa91f"},{"version":"547ff64d06a2d7a60a9529edd75cd8ae6b676a0bb96490207886643839492988","signature":"4ad73857e4f16234efc80829d886d8fafb646f6681729e4ea869dafee50094b0"},{"version":"295dfb856b055146ea1f3318ea19c38ca21629eef54a71a5d35d3085512c0e84","signature":"57dc09407435b60b7b89206b1567a5bb25d682a59c09cbb9c65c569079dda275"},{"version":"a4ef2d07f561e7e5b401d91bf9e53e33bd6759b811477ae5b87139d0811a7cdb","signature":"b720afaa5a92e286a1d5230c5af67e1fd6598219b73497d3eba2bbff4d984e83"},{"version":"d78c2ec58d5e4e86dc662e9f124b3c5f8db6cb3cd64820d357f4cda7cb6cce6b","signature":"971350525207d09b8b25480bedb9997a4da410f0cb8a60a5e9ef4da3a76ec49e"},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"ee8fcb09c02b9731957ae073ade2a78507b981e89c90ec37e7d91e8a4cd88e03","impliedFormat":99},{"version":"9e13456a7d8b7717b16044b1ecbd9e4760d335c5ecaf8967b236f8fa41318cb2","impliedFormat":99},{"version":"0ba90ee789528702e657fdfccfab87166648ce6705481ff56df9e1ad1dc9ef68","impliedFormat":99},{"version":"12a547397ef8c6bef7a46c20677520a43b2b633856408ba255625f7a5b93726f","impliedFormat":99},{"version":"aa294f6435de6f3d544c25eb8ecfbdb02eea0b52440e6c8fa70765dabe0a8f7a","impliedFormat":99},{"version":"2f00058a1c35652a558b39e4e78bae3c7e05dacb279d2002d5076f6dc371231c","impliedFormat":1},{"version":"e1e1e8a8d9b7e290797e25d3d73903f77ab2ded8b18618318d162c1ba2817e19","impliedFormat":1},{"version":"7fadb2778688ebf3fd5b8d04f63d5bf27a43a3e420bc80732d3c6239067d1a4b","impliedFormat":1},{"version":"a83242b7882cbc771e77513ce6752260e35d7e39c0e2ea043121875b48935a1a","signature":"c9eaf52d56c014f4a727c434496fcc4891af97982c2d89e1ef40c4fe259cd990"},{"version":"7b72f7d69e2576a3a1f00b5db3dd957c39488da3b2b80577e16725124df783d9","signature":"6b21d159652a34b4659fd8a920c8691c35860bc35fa302cb529c3d985a6653e4"},{"version":"e3d4e9a24b2c610c59dd9533eac26c4b2ba2a78ec995eeb234a636986f465156","signature":"76593ba3be31edfde36adf1bc33dca2364a2ca4c00d16bd5d5f1ef27fe8d8f02"},{"version":"1c9800fbae1b443d77672e6d3e715df7280479b7c41f08cb790e750f01b50d90","impliedFormat":99},{"version":"b4a7efd03bf5dae9816fa79a9964457c81d2aaa369ee7606402c5b7a9c8b2a3e","signature":"8a0fcce6dab9ddc6b0e309223b3cb2f699d5736669c1f8a65a6e0b7c7de98583"},{"version":"5e7e961796539a5cdc8417f8cd730593487cc2615c5cd5c50f50e8766f5cfa23","signature":"f42a55ae4cbab9f13002c4f8f945e2349462c6d9083ab7bd1792defee9ce317f"},{"version":"34779325c6b34e0c7966c2d1602b15cd6de8d56efb672ed2f8ee4bcb3fea6c25","impliedFormat":1},{"version":"88e980c953e6180527f7e572fbca98cab8458623dbe85868505e0920ec0207fc","impliedFormat":1},{"version":"524cdd6f29e66f9eb568b09db597b94561266d32eb1041aab8af8337efa4d116","impliedFormat":1},{"version":"62c39ca2a3880c7fe75786fb4cd5722731deb48272ac8e16a888fca60a6e3014","impliedFormat":1},{"version":"4d4d05b44285e2fabfd447662ced74ab397c8956b17534bd533e78ca70523a89","signature":"7ada549417c66eb7bfae9c1b2805f19c37348821d7290a08fa4335d43e758d5d"},{"version":"8174710d254034998a325526caffbe2a85182f493491b49a2ff443027e1edc42","impliedFormat":1},{"version":"a6a859ff4b9a8a65e24bb1afd1a56296a88502f35a460c16631ddb4c5d435d81","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"8b56c1d50bc2cc8edac185291ce3ecd2e366d1f1d6718a377b0a008c40140d4a","impliedFormat":1},{"version":"529bbfc5a152cc988e3889eb4cdaef2cc5e300bc30cd61b76f4bd95094170b66","impliedFormat":1},{"version":"fe7a0a744b32b5ece036d9964d9f13bbd49b41f1acb88ec52581855e05fb81f0","impliedFormat":1},{"version":"f5958982fb8d178282ae264d74bcd3a3253a2680f1ed9d61ab808d59a931b0cc","impliedFormat":1},{"version":"8c25b088dcc5e1b699fd6bf49e98d5eae8294d01db43bedc7bed3632eed2d123","impliedFormat":1},{"version":"0d8e093e0fefd5592cde3ee8684cf5d72208559d3394691ce4225b66797d0ccf","impliedFormat":1},{"version":"e4bede85425b4d1c00417170aa7d3f9deee64a872b65b6e979fd476937327718","impliedFormat":1},{"version":"afcb36480aab479f3708bf344a2bf837b04727164b50300b83d6d44d5dfbadc4","impliedFormat":1},{"version":"37c5b27fbda2688158884095b272debe61302286fe5a6dbb029be1bf00b2647d","impliedFormat":1},{"version":"8944244f3eea9766b45b5c50e353c185ff100d33372aa8ea0fa1ec0b2434312c","impliedFormat":1},{"version":"d8a68546789280f9cc972607b0204abba12f6503aa66de51a181c4ec15ae0dda","impliedFormat":1},{"version":"790eb52f6c673e44c8e6158c24410e240bd5061204d3c5b775884aab45a11bd5","impliedFormat":1},{"version":"4a7dffc1c5eafc0c91a0a00fdec024099dac76ca8ef37f06d95e8a8bba489de3","impliedFormat":1},{"version":"b7a02414d6128ec02d76de5f2f8fc70cb00b7d746b32e9aec23f8808cd1202ea","impliedFormat":1},{"version":"13ffd164aeda0bf61256d5e4d309bef434ed32d2d1e32eec4416b1af8e7df4fa","impliedFormat":1},{"version":"7c6e02bb36510ab742ab46393b41df82d2e7a59366df3dbc4503dc4b740da684","impliedFormat":1},{"version":"1465a061f05e061c6640a6a693c31e7446e0b68cc58899b67460e85e51a85aab","impliedFormat":1},{"version":"c41007d08773f66dd2936b55ca42f76f2e8eb5cbdf075aa14843b5a2d19f1275","impliedFormat":1},{"version":"0040147eeca1a25dd7876b2517658935d0962d714adf952b37a5dfe6575a2a75","impliedFormat":1},{"version":"4aaa31cda049c1c8176b17865735abe2fcac498626a5de10a297d29f661f6b42","impliedFormat":1},{"version":"b4be5ae6cf425c81acf21f762e17e1e342328ecd023f4bcefefc47891954de3e","impliedFormat":1},{"version":"0fe5ecc966c8d695030ed651904c6bb816717650516f2453d6e1c97784fcbe6b","impliedFormat":1},{"version":"9f9aa39db46ce9236e1f0796b9678fdca3dd575c501f3babc5873aaefe691fb0","impliedFormat":1},{"version":"769dc05c2bbaf01cb1a224d71f2f9b028949e7282541023c3d48d88aab76df81","impliedFormat":1},{"version":"c549cd957879a126d09665683f8582c715916a9990b3271796ecde433c2329da","impliedFormat":1},{"version":"cfbc348145d9949321f05d5f13fd7b65e2c92aa48621b5702fefe08f47f08a83","impliedFormat":1},{"version":"eb410e862798fc66cfe8da3cabcf8216ba817a725a95b6f6d5427c27ce3007b5","impliedFormat":1},{"version":"781d60ecb967dc2fcf49d5adfe0d77b073fe560d02a0de488fc1e291bbbfe2c3","impliedFormat":1},{"version":"fd955a375470a31b0e788ae58ffc5f1eadb3aaa48320815da81ff83ac039d578","impliedFormat":1},{"version":"4e3e977058703e69e3c3cd20c0ec64bcea48f909e64636a7dfe5e4ad508a9de9","impliedFormat":1},{"version":"41e6f7585fa89dcb8a278fcdfafdbc732cf596cd2314da8ef646782ba72322cd","impliedFormat":1},{"version":"0fd7b6969fb0dcb918a42c1f0b4e302b225a25e5d14915e503a3ffab5639292a","impliedFormat":1},{"version":"c091709121218131ab15e301d858666b7bf780dcd4f67161b84cb01cbebd7955","impliedFormat":1},{"version":"fedf564b673fb0cf6d462e37cd12c234fbe3d88923398724d0bb3fea56221d8e","impliedFormat":1},{"version":"0a00bff7d5e28a2785e690efecf56fa92d6081cdca8d2e8ba4e8b569089b9615","impliedFormat":1},{"version":"3f4daa8074fb0dff7c730985b7dfea828308e62b83650c263914c839851e7cff","impliedFormat":1},{"version":"f568ea3a8f9f6a96d741132e6172e76d1ee844efb4d0febc199730fd8373de12","impliedFormat":1},{"version":"96a01ce9115baca4647c77e25d4ccb20d506f68ab4a52f72fb0304094360e730","impliedFormat":1},{"version":"187cd844e9a6ef5247dcc9df18d7617ab4a734d00edddccf8ea7f37496700aef","impliedFormat":1},{"version":"6e5d2a482d576b9fc29ff3dabbc050ebac0a28e95521701c756e3b839ece38a9","impliedFormat":1},{"version":"a130d95545948a5539c3af75038154956805445f70e74cc99e8fcc90963764ec","impliedFormat":1},{"version":"3ab551e2d557e783d3aeb42bc84370bd38b137ed9f077f97eb31f49afe26db8f","impliedFormat":1},{"version":"fd8236c51f2515f4b11a746132aa1416f9b95d5c2e95630ff60708432c7940bc","impliedFormat":1},{"version":"2da076dd4eecc0c0f23292f0278a04ddc5224f921e6e8f97617cbf7b41717afc","impliedFormat":1},{"version":"f09a30043ac10a4e63de656f399bfa15e4ef4cf73118058a23474de3f1d4be73","impliedFormat":1},{"version":"925233a805205ce31ed53dd71851f143e7661c8f0c1e35aa41c7ed22a4a4bb52","impliedFormat":1},{"version":"664e1fb73a01ea6c7ede041c9da3573f74a963e2c355797ab5d00725beda0dd8","impliedFormat":1},{"version":"5b2e86d7ecd453e7e80270d92210a97160a63a9d2913b673ebc3d7097a289089","impliedFormat":1},{"version":"42638193b815f0bfa1f594c46f303b8e3a045e95affabc5c38405af06b0d2726","impliedFormat":1},{"version":"908dd1c9ded5ff5e471a30d08199544c4bf0c9e880a2fd60af51960ad31186f7","impliedFormat":1},{"version":"e1667177ab030fba7a784c8fe2dbe446e1ea6284758be955d9acfce4f7d88c8e","impliedFormat":1},{"version":"f287b2f8099b74b1f51211168a7dac65b3c5f0a433641fcadee223835ddea091","impliedFormat":1},{"version":"13a70ff4ebcda2c8096c4779a94e5047968fcce30ff11deba878cf07263e2b2c","impliedFormat":1},{"version":"a088d467b0c5922b72c597ff72d07057453c38db1cf05c4652998b3212f8561e","impliedFormat":1},{"version":"b8a71ed67fea0b21aa004bd3fe6c512f5358206be5c8ffb498a250fe41478a69","impliedFormat":1},{"version":"baa19a7a4df948ede8d9913ee128ff0c5948907619495ce58a90a8f1180056fb","impliedFormat":1},{"version":"eefcad1724cc01cccd3010c999b432ae5708653dc6e340ac854b0c006c431147","signature":"547ee2fc67d9614b6fedb32c74e620662788259fb99f14c1d572072a138d6334"},{"version":"cdcfafe23eb9b5dffb14920dea268341a39c0579f253a08da70d78c062e1388e","signature":"71837c482b51cff5a7ef82169458282e659872567f3a43d450f0f6a4bf344fe5"},{"version":"0c81cba34d29a923a4d7de38fc49ae44d8d5162e628129b8e9c7b300031578d6","signature":"fed4ae0c1742affa8ff74d9002582dcc6e6e34c6854f45f6939164f9834d162a"},{"version":"83a8891d5d4a65f52d4944b96f94b5d38076ec5a2ac59faac23d4b0ff5ac9688","signature":"396022d70f875b546e6765bff6ee0cca94783f69d8eb67cb3159186d34607081"},{"version":"fb64f88311febcb3f6138669769fdd0f9fd568778e127bb83ec72058ea22c7f4","signature":"df2b3bc9cd2d3e9d53a47f8979080d798a0cffbf9bd2c0331c22a5a7851c2a9a"},{"version":"8fab5748be05467cb561536b889d25bb65e929d0bf62eedc809a1c8215e095fd","signature":"4a7fa5946a4677a9d9940c218156afbccdd4cc4139494804321ca851b2a060b8"},{"version":"b46d699ed2ec947881ce83d32ffbb3ef5865420b473e684082804c98e13eaf05","signature":"938a1dbd6d0c49ab3e6424cb422dd1ec04bd799f8114cf2879592531c949a320"},{"version":"2b6134bc03966f8d3c5c7ba9810481b7d90dd4652808e29ae0b960d9042c1996","signature":"7e1deacbf78e794d095385b0da0095ec3a4d77647faedb6a412c8770145b97e4"},{"version":"e597bf4ba17a99ba8a95fd9b8b600632cd600b592d1e551369aa33d1cb36d155","signature":"14e4ff11aa25354ea1d10a85cf5a8cfb84d36c9d1a5377c35efbb095e3d4a8c2"},{"version":"83b124c9c5448ac70b7d1803da9721484ef4f6313566e3ed6519287186d4ec85","signature":"7e531419774a3d2c321ccffd3e3168de599b62df755c274636645c6204f8afdb"},{"version":"1e46745c9411767f0a080c9ae8da207e3b64ae674dbdb4c7c59d6b3578e99bdd","signature":"de974eff56c3d8605aed40681f0aa7b41625593699518afe5f9b602fc8251241"},{"version":"d2702c0e26fad0fa5f8c27c5ee21d5dd925f1ece442468be9836f3ba8a8b72b7","signature":"9fd8ab44c802f1f1917a6fdac3e7b8665b949d0ca5a41bf12527d71aa9394c18"},{"version":"3d3898c906518e61a7771d2b4e1d760f2b9603ad0c6842a26de2c2c61c3eb780","signature":"da658a053d894fe7d09999ce433c723913c034fa0f33d0c2dea5bc864186fc16"},{"version":"03cffcc9007577f806a696218d98ef25058d5f80e98e5f4a4b2d30115cab2eb2","signature":"fbffb99a754a5d3b8145b10e9d8613111c8baf377df820ebe61f330c5e120905"},{"version":"4da2c9fa61755caa002e250a659abc8f47d326a2d50fad3d3e681942921ca09c","signature":"67cd6d15f025f6c440f8d21200a6304c81228d654b55ddcf9b7d83d7decd2abf"},{"version":"aba891d2f093ee2c63684f4cf93538a0c2a7354b8d5c68e9fd026eaf5f088eba","signature":"dad577e08368c9f056b907bed9f204e62b0218964f4cb781dc9dd09cead9594b"},{"version":"9591e532c8161b6558a5ad278e89ebb2459b23db90d6503633625714dd550d17","signature":"37e7f3eede83ee563132092bdb1f49b8bb48bf20af2eb6e567c3789978c253be"},{"version":"1bdafdd367723b48e6bf36cd922ca80f0c1243495ef2a334ec133b613d9289f3","signature":"074bcbf06c4fd920ecea4be4a3672596c590d9d2d22c0c6752ede0b7704a82e6"},{"version":"fe068cc57c7024898ddbbec8afc861f70599418a0432cefc34f987c16525c2e2","signature":"b683a9c029c89f5ee76117854d1d6a9ed4028f9b644a5bae399b00584538e1d6"},{"version":"54223f3e9feff7bfa86a919a7cb01619554e38209a29c3d1c4ab2b4a87cf7441","signature":"8c6d489fcf83b162225fc03a7e267e158478ea8b716bc59dea747e04c9b460b0"},{"version":"3b204ce75621b401f70a65c4eee1fedbdbdd258718152140116dc1d97cd50c6f","signature":"e2cde99cd2da4d5f746def0403859882abb1c2d33a33c4397bee680817624f8d"},{"version":"66fea30c9286005b38d2453ffb00ebdc31e415e1ed076d6d8b242a5636e2d996","signature":"12b395303350c28b8faaee1fbac3efb3000df7506e0f5dcdfb70072c0bc5d57a"},{"version":"3e7ecac52940427ac55ff3732217eef3657271860a68c0383badc9c4be93fb5a","signature":"a885687ab177c32fef9137530c46c377cd070f78f0a2dde7e9e0f5351ea49ca9"},{"version":"1c221cf45665efce803648feb81d021eda8c19e7cf62cd22cb582c776f5fb492","signature":"803387a6e4080c884a07897daa60764e067ab005eeb28871393d96321c5181b9"},{"version":"0f52965d797a66a86433b5d21018f6a933b8778bd746c34e15c42aeeaa5242a1","signature":"4acf01107fc8ba6dd53f0826dfa6045d47cd095778b76cb3a65b76eb199a79a2"},{"version":"fe63c6696cde4462504953b6dcae55ced887719bedb223437691b0639c47d1f7","signature":"87c311f30be6508c25811ac3c33c7dfe7078288c96f92f619b0e6f5bf4eb9d4c"},{"version":"efd3f5f350bbb5354d39baff90495e67c29bdb088d52294f0106dd06019f2c5a","signature":"9a6789159a2b28e537eae47ae1e6064ccb0c1d833e3e0cf99fb985b808f36508"},{"version":"9a7e285f541d2f697dbad3130fd99b35c5b46a44c463745af7d0d0b5ad8e8e3f","signature":"b728a0a3ff33276960bee90fb000aea1129e5dfafd1e83f16c4bf2b9bb191e48"},{"version":"f8b109007ce44d343d31066d4a1b26d921c04aeb627ed80292fcf806a2f823a0","signature":"b856d5a0cfa6429db8b594b1340479cd8fd8aac38e34cdcd2e64d744a6002985"},{"version":"515f42aaa0d3411ba9ccc86c253583f6de9a6e3d6d548964cfa2d4b0ebdf8cf5","signature":"d50dbd6b718c5700b4729c7467d2a9e6bf40d45cc9e26145b80492c05a2bfd21"},{"version":"db3a143d6c0833bcd7971346c45739ed7cee5b8945e050267e9e61b5a5b949e3","signature":"a93ae1e1b1207294b997c5cea7466faa2fb86903dd4503be4f287f8682c5e9bd"},{"version":"2d6fdf0611ba569a0aa8dc0650b842721d2f5d6e966ffb9e29a01cbbe9967c06","signature":"4c128135f041d17915f75e4824a0b4eb6e5b8729441c2e74ef603a40f25d3c54"},{"version":"2b2dab1fefa18016532d2bdf3c705ca644573675b8a4ffaa661aa8cca3d113cb","signature":"219e33c8add31838c77d1dd99414fd52b9cc1c26dbeafbb7c671ee3196cbe16a"},{"version":"4c446a8a6b53b4733542b6ebb8b4767d390f55695570240253bf43f3dc4649ab","signature":"563c8c8f4cf6f3362841c1f425426723cfe3a3da0296edb247068d47a80afb67"},{"version":"8259dce3472c26f512965026ec04754f357787413d21244030c60ff1f7b16720","signature":"c0fca7e32830ee81d7e644ebf2d29412cceca074fea09095bd2f0f9c828bfaac"},{"version":"cd5ea046dea7297b6cb9977f07ca3027a883b005e65d26448aa3fc4563d483ca","signature":"e4b4f8cfb4fd94ffb50c7ba040e42a0167cc59f5fda6159d8d629fa22fe7044d"},{"version":"b5945af70d0d60ff0f6ff207fa18973712387963f7dba16efa1e9e10ce611a94","signature":"ead8db7dede5e1275b82fdf896f0f5582a394b8a922f30a22478484032a90cf7"},{"version":"f84ee6684444f1addab5a377967a517acb4bc4906a9889cc0e7f7a1d5a063bc6","signature":"7b07da36378a22a8600a98b89725d9167ce0573efa787a5c6a62feeb5645f63a"},{"version":"955e0b81ea64892d73fc9406cd4792adfb637c7113daa00de5c11e7f8098da35","signature":"8d5a71cde6d35033e2e1e01fdf0a445146cc90424d468fc2c578d15eaf11aaec"},{"version":"2b6034c42b1d808227b624e88b367ca77688cbb7ab151105d3184a6d2ad7bcd6","signature":"124f7d0a32ad65b42a792727bc44631075662a4ec7c838bc50f582eb8af951b3"},{"version":"6164b7c72b1d676fa7c197b45f86ba4f03e6ce9ef65525ffaa71c21ca7551ccb","signature":"4c36844aa8702df686c1fe6cfcef41e4367b253dc46ee9acc832b1c288294b79"},"8f6acfbf0c5bb3eaf96aca99418f374f34697a025138013e5349705dd2c423fd",{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"a356997414bbba2a82fa683ed636c9c117810d8a4813ce316bc0e44d42379345","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6eca705d784aa2e8b74b7b20c4e0fd024938509ea69734650260e588a7ea59c7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d059c0bc02432c05b0a23248696198a3ee8f6e6ae13893700da879f88d078b20","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"724df2d1a86c3aead77b1fca726a5e81e4ea5085d936191791e5472b3f3ce0d4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"79c7dc6362f393b13ea113a6bb7fdbd244d5a9913b03ec5f4fe29b8a99b5e7c5","affectsGlobalScope":true},{"version":"baf3507287629018d38c88e2636dd041550c70620bb774127011eb6dc3b361c0","impliedFormat":1},{"version":"6175dda01fddf3684d6261d97d169d86b024eceb2cc20041936c068789230f8f","impliedFormat":1},{"version":"a6a55e87340abd0dfbc19ed6ea74ca452e87a55773a10190ee80017e2cbab6ee","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2cd3901fbe4b0eae51b613f2ea0bfe1d41fef7558a432a6925352ddf80dab292","signature":"b1bd501692ab4fb4b1663e8c1a5a470d88356845dcb6e483f39078acc4773a69"},{"version":"5146a9443a3faed571dbbbb08413ddb282d4c014ef3d41522deb0e56f047bb34","signature":"eb18d9b92488eaa6b4842f09bca865250c972e7d7d9b9bd4353a16e36f549cdf"},{"version":"4adb4e9de3b5df0ddd82d976df05f4ac96324f785c6149d68be98f14e9381a35","signature":"d565ce61f91e5a05f0a0609fec062029bd18465b07d2b481b09d8d163d041283"},{"version":"e6db1b5431c965ec9c046b50d2fe05754c1068031e5c6b4f1b35b8cd42035c54","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3898fbfaf2614a88e6d809efc2f12ffb14a19a205e1b0f4ddbcc275c60a6a473","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"63e56b51b29b814906f0399fda1144ff1414925bc3f9b52e470a6f405286a193","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2a9957c2aeeb52c8a3aa2fca0435c2868e0d279ca05ea1a59ac8953e37f2519b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3da6e5c3cf41bea4d1d43c73fcf55204f0e226567429c2d4b0ec23e0bd165492","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f5386fc09037cb6c337eb978484628c9ed50b4e227a6b05c2e6116b221d5d4c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bc4ef2a994d41d7fcd3c39f91d9f583c4ebd0f6737904446171deaaa274a8973","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"36d94f0d4392c0162d752b4e50c037938bbffd4432855e2e09882fcff10424a0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"02a646dee15586ef298172044b52c6723c7f6a45bf038e58a6e6962f02574ae9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ec84642c703600865d04a5574e5b45f1bb8f9ebb890033d2218c05acf0e52191","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1}],"root":[227,228,301,[303,307],[317,319],321,322,327,[387,428],[430,434],[437,450]],"options":{"allowJs":false,"checkJs":false,"composite":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"inlineSources":true,"module":1,"newLine":1,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[216,1],[212,2],[211,3],[213,2],[214,2],[215,4],[210,5],[220,6],[83,6],[222,6],[224,7],[223,6],[221,6],[86,6],[85,8],[87,9],[217,10],[84,6],[219,11],[218,12],[302,13],[429,6],[451,6],[316,14],[150,15],[151,15],[152,16],[90,17],[153,18],[154,19],[155,20],[88,6],[156,21],[157,22],[158,23],[159,24],[160,25],[161,26],[162,26],[163,27],[164,28],[165,29],[166,30],[91,6],[89,6],[167,31],[168,32],[169,33],[209,34],[170,24],[171,35],[172,24],[173,36],[174,37],[175,38],[176,39],[177,39],[178,39],[179,40],[180,41],[181,42],[182,43],[183,18],[184,44],[185,44],[186,45],[187,6],[188,6],[189,46],[190,47],[191,46],[192,48],[193,49],[194,50],[195,51],[196,52],[197,53],[198,23],[199,54],[200,55],[201,56],[202,57],[203,58],[204,59],[205,60],[206,61],[92,24],[93,6],[94,62],[95,6],[96,6],[97,63],[98,6],[141,64],[142,65],[143,66],[144,66],[145,67],[146,6],[147,18],[148,68],[149,65],[207,69],[208,70],[329,71],[436,72],[435,6],[330,73],[320,6],[314,74],[364,75],[365,6],[366,76],[368,77],[367,75],[371,78],[369,79],[370,80],[99,6],[315,6],[308,6],[225,6],[226,74],[328,6],[386,81],[381,82],[383,83],[333,6],[379,84],[384,85],[380,86],[331,87],[332,88],[334,6],[382,89],[385,90],[313,91],[310,92],[311,93],[309,6],[312,6],[326,94],[323,95],[325,96],[324,96],[81,6],[82,6],[13,6],[14,6],[16,6],[15,6],[2,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[3,6],[25,6],[26,6],[4,6],[27,6],[31,6],[28,6],[29,6],[30,6],[32,6],[33,6],[34,6],[5,6],[35,6],[36,6],[37,6],[38,6],[6,6],[42,6],[39,6],[40,6],[41,6],[43,6],[7,6],[44,6],[49,6],[50,6],[45,6],[46,6],[47,6],[48,6],[8,6],[54,6],[51,6],[52,6],[53,6],[55,6],[9,6],[56,6],[57,6],[58,6],[60,6],[59,6],[61,6],[62,6],[10,6],[63,6],[64,6],[65,6],[11,6],[66,6],[67,6],[68,6],[69,6],[70,6],[1,6],[71,6],[72,6],[12,6],[76,6],[74,6],[79,6],[78,6],[73,6],[77,6],[75,6],[80,6],[117,97],[129,98],[115,99],[130,70],[139,100],[106,101],[107,102],[105,103],[138,74],[133,104],[137,105],[109,106],[126,107],[108,108],[136,109],[103,110],[104,104],[110,111],[111,6],[116,105],[114,111],[101,112],[140,113],[131,114],[120,115],[119,111],[121,116],[124,117],[118,118],[122,119],[134,74],[112,120],[113,121],[125,122],[102,70],[128,123],[127,111],[123,124],[132,6],[100,6],[135,125],[335,6],[350,126],[349,127],[351,127],[353,128],[354,128],[352,6],[362,129],[355,130],[356,6],[357,130],[358,130],[359,130],[348,130],[360,128],[361,130],[363,131],[336,6],[347,132],[338,133],[339,133],[340,134],[337,135],[341,6],[342,135],[343,136],[344,135],[345,137],[346,135],[373,138],[372,139],[377,140],[376,141],[374,142],[375,142],[378,143],[300,144],[295,145],[298,146],[296,146],[292,145],[299,147],[297,146],[293,148],[294,149],[288,150],[233,151],[235,152],[287,6],[234,153],[291,154],[289,6],[236,151],[237,6],[286,155],[232,156],[229,6],[290,157],[230,158],[231,6],[238,159],[239,159],[240,159],[241,159],[242,159],[243,159],[244,159],[245,159],[246,159],[247,159],[248,159],[249,159],[250,159],[252,159],[251,159],[253,159],[254,159],[255,159],[285,160],[256,159],[257,159],[258,159],[259,159],[260,159],[261,159],[262,159],[263,159],[264,159],[265,159],[266,159],[267,159],[268,159],[270,159],[269,159],[271,159],[272,159],[273,159],[274,159],[275,159],[276,159],[277,159],[278,159],[279,159],[280,159],[281,159],[284,159],[282,159],[283,159],[321,6],[426,6],[430,161],[317,6],[425,162],[301,163],[392,164],[228,6],[393,164],[411,164],[413,164],[394,164],[415,164],[414,164],[417,164],[418,164],[420,164],[422,164],[395,164],[421,164],[423,164],[419,164],[396,164],[416,164],[397,164],[398,164],[399,164],[400,164],[401,164],[402,164],[403,164],[404,164],[405,164],[406,164],[410,164],[412,164],[437,165],[391,166],[424,167],[407,168],[408,164],[409,164],[389,6],[322,169],[304,6],[327,170],[306,171],[431,172],[307,170],[432,173],[318,174],[441,175],[442,175],[443,175],[444,175],[438,6],[439,6],[445,176],[440,177],[446,178],[447,179],[448,175],[449,175],[450,175],[387,170],[305,6],[390,180],[319,181],[227,182],[433,183],[303,6],[388,170],[434,6],[427,184],[428,185]],"latestChangedDtsFile":"./lib/mock/typeCheck.test.d.ts","version":"5.9.3"} \ No newline at end of file +{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.es2024.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2024.collection.d.ts","../node_modules/typescript/lib/lib.es2024.object.d.ts","../node_modules/typescript/lib/lib.es2024.promise.d.ts","../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2024.string.d.ts","../node_modules/typescript/lib/lib.esnext.array.d.ts","../node_modules/typescript/lib/lib.esnext.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.promise.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../node_modules/typescript/lib/lib.esnext.float16.d.ts","../node_modules/typescript/lib/lib.esnext.error.d.ts","../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/@iobroker/adapter-core/build/esm/exitcodes.d.ts","../node_modules/@iobroker/types/build/utils.d.ts","../node_modules/@iobroker/types/build/objects.d.ts","../node_modules/@iobroker/types/build/config.d.ts","../node_modules/@iobroker/types/build/shared.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/blob.d.ts","../node_modules/@types/node/web-globals/console.d.ts","../node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/encoding.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/utility.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client-stats.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/h2c-client.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-call-history.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/snapshot-agent.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cache-interceptor.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/web-globals/importmeta.d.ts","../node_modules/@types/node/web-globals/messaging.d.ts","../node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/@types/node/web-globals/performance.d.ts","../node_modules/@types/node/web-globals/storage.d.ts","../node_modules/@types/node/web-globals/streams.d.ts","../node_modules/@types/node/web-globals/timers.d.ts","../node_modules/@types/node/web-globals/url.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/inspector/promises.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/path/posix.d.ts","../node_modules/@types/node/path/win32.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/quic.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/test/reporters.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@alcalzone/pak/node_modules/execa/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/package-manager.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/npm/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-berry/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-classic/index.d.ts","../node_modules/@alcalzone/pak/build/lib/pak.d.ts","../node_modules/@alcalzone/pak/build/index.d.ts","../node_modules/@iobroker/types/build/types.d.ts","../node_modules/@iobroker/types/public.d.ts","../node_modules/@iobroker/types/index.d.ts","../node_modules/@iobroker/adapter-core/build/esm/controllertools.d.ts","../node_modules/@iobroker/adapter-core/build/esm/utils.d.ts","../node_modules/@iobroker/adapter-core/build/esm/i18n.d.ts","../node_modules/@iobroker/adapter-core/build/esm/tokenrefresher.d.ts","../node_modules/@iobroker/adapter-core/build/esm/index.d.ts","../node_modules/go2rtc-static/dist/index.d.ts","../node_modules/jszip/index.d.ts","../src/lib/roborock_package_helper.ts","../src/lib/features/features.enum.ts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-ca.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-cn.d.cts","../node_modules/zod/v4/locales/zh-tw.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/index.d.cts","../src/lib/features/basedevicefeatures.ts","../node_modules/@napi-rs/canvas/index.d.ts","../src/lib/roomcoloring.ts","../src/lib/images.ts","../src/lib/pathprocessor.ts","../src/lib/mapcreator.ts","../src/lib/mapdataparser.ts","../node_modules/eventemitter3/index.d.ts","../node_modules/p-queue/dist/queue.d.ts","../node_modules/p-queue/dist/options.d.ts","../node_modules/p-queue/dist/priority-queue.d.ts","../node_modules/p-timeout/index.d.ts","../node_modules/p-queue/dist/index.d.ts","../node_modules/binary-parser/dist/binary_parser.d.ts","../node_modules/crc-32/types/index.d.ts","../node_modules/@types/node-forge/index.d.ts","../src/lib/cryptoengine.ts","../src/lib/messageparser.ts","../src/lib/requestshandler.ts","../node_modules/axios/index.d.ts","../src/lib/apitypes.ts","../src/lib/httpapi.ts","../node_modules/ping/types/parser/base.d.ts","../node_modules/ping/types/ping-sys.d.ts","../node_modules/ping/types/ping-promise.d.ts","../node_modules/ping/types/index.d.ts","../src/lib/localapi.ts","../node_modules/mqtt-packet/types/index.d.ts","../node_modules/@types/readable-stream/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/mqtt/build/lib/shared.d.ts","../node_modules/mqtt/build/lib/store.d.ts","../node_modules/mqtt/build/lib/default-message-id-provider.d.ts","../node_modules/mqtt/build/lib/typedemitter.d.ts","../node_modules/worker-factory/build/es2019/helpers/is-supporting-transferables.d.ts","../node_modules/worker-factory/build/es2019/types/destroy-worker-function.d.ts","../node_modules/worker-factory/build/es2019/types/message.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-with-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-without-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver.d.ts","../node_modules/worker-factory/build/es2019/types/typed-array.d.ts","../node_modules/worker-factory/build/es2019/types/value-map.d.ts","../node_modules/worker-factory/build/es2019/types/value.d.ts","../node_modules/worker-factory/build/es2019/types/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/types/worker-implementation.d.ts","../node_modules/worker-factory/build/es2019/types/worker-message.d.ts","../node_modules/worker-factory/build/es2019/types/index.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-event.d.ts","../node_modules/worker-factory/build/es2019/interfaces/default-worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-response.d.ts","../node_modules/worker-factory/build/es2019/interfaces/notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/receiver.d.ts","../node_modules/worker-factory/build/es2019/interfaces/request.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-array.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-map.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-error-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-result-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/index.d.ts","../node_modules/worker-factory/build/es2019/module.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-actions.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/default-broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/worker-event.d.ts","../node_modules/broker-factory/build/es2019/interfaces/index.d.ts","../node_modules/broker-factory/build/es2019/types/broker-implementation.d.ts","../node_modules/broker-factory/build/es2019/types/index.d.ts","../node_modules/broker-factory/build/es2019/module.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/worker-timers-broker-definition.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/index.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-loader.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-wrapper.d.ts","../node_modules/worker-timers-broker/build/es2019/types/index.d.ts","../node_modules/worker-timers-broker/build/es2019/module.d.ts","../node_modules/worker-timers/build/es2019/module.d.ts","../node_modules/mqtt/build/lib/get-timer.d.ts","../node_modules/mqtt/build/lib/keepalivemanager.d.ts","../node_modules/mqtt/build/lib/client.d.ts","../node_modules/mqtt/build/lib/unique-message-id-provider.d.ts","../node_modules/mqtt/build/lib/connect/index.d.ts","../node_modules/mqtt/build/lib/handlers/ack.d.ts","../node_modules/mqtt/build/mqtt.d.ts","../node_modules/mqtt/build/index.d.ts","../src/lib/mqttapi.ts","../src/lib/sockethandler.ts","../src/lib/features/vacuum/vacuumconstants.ts","../src/lib/producthelper.ts","../src/lib/features/vacuum/basevacuumfeatures.ts","../src/lib/features/fallbackfeatures.ts","../src/lib/features/vacuum/a08_features.ts","../src/lib/features/vacuum/a10_features.ts","../src/lib/features/vacuum/a15_features.ts","../src/lib/features/vacuum/a19_features.ts","../src/lib/features/vacuum/a27_features.ts","../src/lib/features/vacuum/a38_features.ts","../src/lib/features/vacuum/a40_features.ts","../src/lib/features/vacuum/a51_features.ts","../src/lib/features/vacuum/a62_features.ts","../src/lib/features/vacuum/a65_features.ts","../src/lib/features/vacuum/a70_features.ts","../src/lib/features/vacuum/a72_features.ts","../src/lib/features/vacuum/a73_features.ts","../src/lib/features/vacuum/a75_features.ts","../src/lib/features/vacuum/s4_features.ts","../src/lib/features/vacuum/s5e_features.ts","../src/lib/features/vacuum/s6_features.ts","../src/lib/features/vacuum/a87_features.ts","../src/lib/features/vacuum/a101_features.ts","../src/lib/features/vacuum/a97_features.ts","../src/lib/features/vacuum/a104_features.ts","../src/lib/features/vacuum/a135_features.ts","../src/lib/features/vacuum/a117_features.ts","../src/lib/features/vacuum/a21_features.ts","../src/lib/features/vacuum/a144_features.ts","../src/lib/features/vacuum/a147_features.ts","../src/lib/features/vacuum/a187_features.ts","../src/lib/features/vacuum/a156_features.ts","../src/lib/features/vacuum/a168_features.ts","../src/lib/features/vacuum/a159_features.ts","../src/lib/features/vacuum/a179_features.ts","../src/lib/features/vacuum/index.ts","../src/lib/devicemanager.ts","../src/lib/buildinfo.ts","../src/main.ts","../src/types.d.ts","../node_modules/@types/chai/index.d.ts","../src/lib/cryptoengine.test.ts","../src/lib/mapdataparser.test.ts","../src/lib/messageparser.test.ts","../src/lib/roomcoloring.test.ts","../src/lib/types.d.ts","../node_modules/@types/sinonjs__fake-timers/index.d.ts","../node_modules/@types/sinon/index.d.ts","../src/lib/features/vacuum/basevacuumfeatures.test.ts","../src/lib/mock/mockadapter.ts","../src/lib/mock/mockdata.ts","../src/lib/mock/mockrobot.ts","../src/lib/mock/commands.test.ts","../src/lib/mock/errorhandling.test.ts","../src/lib/mock/features.test.ts","../src/lib/mock/maps.test.ts","../src/lib/mock/mockrobot.test.ts","../src/lib/mock/protocol.test.ts","../src/lib/mock/queue.test.ts","../src/lib/mock/schedules.test.ts","../src/lib/mock/statemachine.test.ts","../src/lib/mock/typecheck.test.ts","../node_modules/@types/mocha/index.d.ts"],"fileIdsList":[[90,153,158,159,161,165,168,170,171,172,174,184,208,211,215,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,210,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,212,213,214,316,428],[90,153,154,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[83,90,153,158,159,161,165,168,170,171,172,174,184,208,219,220,221,222,223,316,428],[84,90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[84,85,86,90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,216,316,428],[87,90,153,158,159,161,165,168,170,171,172,174,184,208,218,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,217,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,189,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,428],[90,150,151,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,208,316,428],[90,153,154,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,153,154,155,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,153,157,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,198,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,160,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,162,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,163,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,192,208,316,428],[90,140,153,158,159,161,164,165,167,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,167,168,170,171,172,174,184,189,198,201,208,316,428],[90,153,158,159,161,165,167,168,169,170,171,172,174,184,189,198,201,208,316,428],[88,89,90,91,92,93,94,95,96,97,98,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,201,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,179,184,208,316,428],[90,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,181,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,182,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,185,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,186,202,205,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,191,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,190,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,202,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,193,208,316,428],[90,150,153,158,159,161,165,168,170,171,172,174,184,189,195,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,194,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,199,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,200,208,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,182,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,204,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,205,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,206,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,140,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,179,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,197,208,316,428],[90,140,153,158,159,161,164,165,166,168,170,171,172,174,179,184,189,192,201,204,205,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,435],[90,153,158,159,161,164,165,167,168,169,170,171,172,174,184,189,198,201,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,365,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,364,365,366,367,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,370,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,369,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,385,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,208,316,328,329,330,331,332,333,334,379,380,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,378,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,379,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,328,329,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,328,329,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,333,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,332,333,379,380,381,382,383,384,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,308,309,310,311,312,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,310,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,324,325,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,326,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,323,326,428],[90,106,109,112,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,105,106,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,198,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,105,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,100,101,102,104,108,153,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,117,125,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,134,135,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,104,109,153,158,159,161,165,168,170,171,172,174,184,192,201,208,209,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,100,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,104,105,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,130,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,117,118,119,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,108,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,103,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,113,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,113,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,112,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,101,105,109,117,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,109,134,153,158,159,161,165,168,170,171,172,174,184,192,207,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,352,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,350,351,352,353,354,355,356,357,358,359,360,361,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,347,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,335,347,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,336,337,338,339,340,341,342,343,344,345,346,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,338,339,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,341,342,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,340,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,372,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,373,376,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,374,375,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,373,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,377,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,299,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,294,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,285,291,292,293,294,295,296,297,298,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,292,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,293,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,233,234,235,286,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,232,233,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,231,232,233,234,235,236,237,285,286,287,288,289,290,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,231,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,286,289,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,390,391,392,424,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,436],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,301,316,389,390,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,320,321,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,302,303,304,305,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,307,316,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,300,316,317,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,438,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,429,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,439],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,319,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,321,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,306,307,313,316,318,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,226,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,303,316,428,429],[90,153,154,158,159,161,165,168,170,171,172,174,184,208,224,225,227,228,301,316,319,322,327,387,388,425,426,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d56c0e4c924ce29ca57641d45823206c6b3d3c7846aecb32b3ae6cdd6ac27bf","impliedFormat":99},{"version":"e12a40ba307d38757b6f0637958d945de7442dbd0986fd3e4f7a61cc65b3bc61","impliedFormat":1},{"version":"a8ea473ecfe448bf0962c10195cda747b8a211894dbc29d87693137a8ba76b45","affectsGlobalScope":true,"impliedFormat":1},{"version":"af8f9eee362acd79cf4cb6ee04928614ae8ce683293a1f52db2e010e09813ca8","impliedFormat":1},{"version":"892c6b419a485b3297fdb93546e8a1efaef193f0530d45b20c521ce5de709e72","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"836b1d038d400811f265b04c758e1ef0fb64d915499a4ef590acc54761875075","affectsGlobalScope":true,"impliedFormat":1},{"version":"961cf7535b9c521cd634055b1b6ac49b94d055f0b573ce7fdc4cfaddab080b7c","impliedFormat":1},{"version":"806a8c6daae69e5695e7200d9eca6bc1e4298f38d90edda3ce67a794da31a24f","impliedFormat":1},{"version":"ac86245c2f31335bfd52cbe7fc760f9fc4f165387875869a478a6d9616a95e72","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"718d94d1b710af019cbfaab4a8dc5240503fd5b5938905262d45bdef79318378","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"2ca2bca6845a7234eff5c3d192727a068fca72ac565f3c819c6b04ccc83dadc0","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"6c00f77f0335ae0c18bd45a6c7c9c97c9625fb7e5dd6d5936eadf70718bce52e","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"e60efae9fe48a2955f66bf4cbf0f082516185b877daf50d9c5e2a009660a7714","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"cd9189eacf0f9143b8830e9d6769335aa6d902c04195f04145bcbf19e7f26fcb","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"da51964a650a3b8d775267a55e8a590b1eb6bb605cc3f6d10830370d77135557","impliedFormat":1},{"version":"c59ab0fda36f7cdc43ef1102659954735c80c6fb721ecc2bee0019db838d3d85","impliedFormat":1},{"version":"deeaf7b68c688b0a700bb8f3f175683263c8bb3a8d4932fc44d95d56402f4fca","impliedFormat":1},{"version":"4deacd1de0cc7b1ec1d7b97e1910a809b6e4742e9b3f62e70b0f8e5c60667058","impliedFormat":1},{"version":"132aac02cd3d0c950769ea248072647dfe8fbfb4441974fba85165ed700a872f","impliedFormat":1},{"version":"41e1718c5738cd9261acc61439f2156ed3b8a3267de9805e55b3cf7d839f5063","impliedFormat":1},{"version":"4e20f9be439bf149c8f336a7d9efb1dcc785a29d8cbb73efa279f8bf883a7058","impliedFormat":1},{"version":"216d7f8df962491193db3384dbbfbfacba0c6e00b3488e02262b41477e37938f","impliedFormat":1},{"version":"f551846d1f55ed48a545475cdae88a96c4906dfca3d4a7d0d5f890525ff50e16","affectsGlobalScope":true,"impliedFormat":1},{"version":"65e317467fee99daf166f7dc075afee41630be25ee750a2fe12a2e55a400b338","impliedFormat":1},{"version":"20dbfa41a3d60775a1151e8f64f3fc2125bcf8709036c7940883fb81a25c181b","impliedFormat":99},{"version":"4e3bc8765904f6aea80e664e7b9297ee4e429984ffbff4c638337f4179458426","impliedFormat":99},{"version":"745b107f0bf4f023a275ebad8c11284d8ae5a589a9d2b924e256d969ca864eed","impliedFormat":99},{"version":"3076c73202d40cdeb6bed55d310e67aac1a93b8e55e5a8a217580fed5dfebdc0","impliedFormat":99},{"version":"e2622304b712eabade00b70dfc03ee4581d1b1570c208c9aafb060e7adac78ec","impliedFormat":99},{"version":"ad8a18bc463768101a4d30f3117cea1e73381eb0ec12a23b7d61208dc852438e","impliedFormat":1},{"version":"522cb15ff9bef5a65c2f3dbd10dbba9e7ecae4de32f90f5c0b4198132be63ae4","impliedFormat":1},{"version":"8479fb227ff6a33943e5a4227d2775999733790a809a3f6d7a18b2cc729af70d","signature":"e9dbca0921e577b79fd297d8c299d86949d8ab08bca10e37bd0a4cb6b1abcebe"},{"version":"60c1a59abc6c8fffdcd9803214f36373ee53d6cb9e9acedabe227036c8da97de","signature":"bf0b67854361dae40cc55a337248ab28ebfad49654e57caf4764c0d3cdb920d8"},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"d48904eee50b64e6c906aae902322aedbf1a85ea24ceb79959d3b4e69e309ab7","impliedFormat":1},{"version":"1ff91526fcdd634148c655ef86e912a273ce6a0239e2505701561f086678262b","impliedFormat":1},{"version":"2955c932ecc11e23d079a3f15ec2b39ac89c03e4d0e21c3459d3141e1c62eb1b","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"7952419455ca298776db0005b9b5b75571d484d526a29bfbdf041652213bce6f","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"568b463d762d0df07ed10081293715069168ad7cf6308525a3bb93777b127845","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"328947a02b94edefe4de88b5cb96408ff86c07a32911c15ad67f6d61275a114c","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"85021a58f728318a9c83977a8a3a09196dcfc61345e0b8bbbb39422c1594f36b","impliedFormat":1},{"version":"d91805544905a40fbd639ba1b85f65dc13d6996a07034848d634aa9edb63479e","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"4ff0c68ba32a51dec9c9d4f8a491d4bee22c88454ee7fa417a637c4af1eceab1","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"2fbc91ba70096f93f57e22d1f0af22b707dbb3f9f5692cc4f1200861d3b75d88","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"a5c37e47417c9a67ad39480d67521921eec20236a70fc9416bc7789aa44f7eed","signature":"aa22e7085c56b854de71ec9f3566a95da24b594d2e4d4e4ab2591586988203ce"},{"version":"a9b74f5e1715d0d7bc26c2f41e19f27605dc4c7f6e3303c3e8029d40dda5fa63","impliedFormat":1},{"version":"af04cf2a8c6f2a2ca8f032c98310d69bf0a0139980d29b363b65ade0d853168b","signature":"732a75f120c13e0d5d14f48259ac18ab2a94f879d9871f84e2b3d4b8660fa91f"},{"version":"547ff64d06a2d7a60a9529edd75cd8ae6b676a0bb96490207886643839492988","signature":"4ad73857e4f16234efc80829d886d8fafb646f6681729e4ea869dafee50094b0"},{"version":"295dfb856b055146ea1f3318ea19c38ca21629eef54a71a5d35d3085512c0e84","signature":"57dc09407435b60b7b89206b1567a5bb25d682a59c09cbb9c65c569079dda275"},{"version":"a4ef2d07f561e7e5b401d91bf9e53e33bd6759b811477ae5b87139d0811a7cdb","signature":"b720afaa5a92e286a1d5230c5af67e1fd6598219b73497d3eba2bbff4d984e83"},{"version":"d78c2ec58d5e4e86dc662e9f124b3c5f8db6cb3cd64820d357f4cda7cb6cce6b","signature":"971350525207d09b8b25480bedb9997a4da410f0cb8a60a5e9ef4da3a76ec49e"},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"ee8fcb09c02b9731957ae073ade2a78507b981e89c90ec37e7d91e8a4cd88e03","impliedFormat":99},{"version":"9e13456a7d8b7717b16044b1ecbd9e4760d335c5ecaf8967b236f8fa41318cb2","impliedFormat":99},{"version":"0ba90ee789528702e657fdfccfab87166648ce6705481ff56df9e1ad1dc9ef68","impliedFormat":99},{"version":"12a547397ef8c6bef7a46c20677520a43b2b633856408ba255625f7a5b93726f","impliedFormat":99},{"version":"aa294f6435de6f3d544c25eb8ecfbdb02eea0b52440e6c8fa70765dabe0a8f7a","impliedFormat":99},{"version":"2f00058a1c35652a558b39e4e78bae3c7e05dacb279d2002d5076f6dc371231c","impliedFormat":1},{"version":"e1e1e8a8d9b7e290797e25d3d73903f77ab2ded8b18618318d162c1ba2817e19","impliedFormat":1},{"version":"7fadb2778688ebf3fd5b8d04f63d5bf27a43a3e420bc80732d3c6239067d1a4b","impliedFormat":1},{"version":"a83242b7882cbc771e77513ce6752260e35d7e39c0e2ea043121875b48935a1a","signature":"c9eaf52d56c014f4a727c434496fcc4891af97982c2d89e1ef40c4fe259cd990"},{"version":"7b72f7d69e2576a3a1f00b5db3dd957c39488da3b2b80577e16725124df783d9","signature":"6b21d159652a34b4659fd8a920c8691c35860bc35fa302cb529c3d985a6653e4"},{"version":"e3d4e9a24b2c610c59dd9533eac26c4b2ba2a78ec995eeb234a636986f465156","signature":"76593ba3be31edfde36adf1bc33dca2364a2ca4c00d16bd5d5f1ef27fe8d8f02"},{"version":"1c9800fbae1b443d77672e6d3e715df7280479b7c41f08cb790e750f01b50d90","impliedFormat":99},{"version":"b4a7efd03bf5dae9816fa79a9964457c81d2aaa369ee7606402c5b7a9c8b2a3e","signature":"8a0fcce6dab9ddc6b0e309223b3cb2f699d5736669c1f8a65a6e0b7c7de98583"},{"version":"5e7e961796539a5cdc8417f8cd730593487cc2615c5cd5c50f50e8766f5cfa23","signature":"f42a55ae4cbab9f13002c4f8f945e2349462c6d9083ab7bd1792defee9ce317f"},{"version":"34779325c6b34e0c7966c2d1602b15cd6de8d56efb672ed2f8ee4bcb3fea6c25","impliedFormat":1},{"version":"88e980c953e6180527f7e572fbca98cab8458623dbe85868505e0920ec0207fc","impliedFormat":1},{"version":"524cdd6f29e66f9eb568b09db597b94561266d32eb1041aab8af8337efa4d116","impliedFormat":1},{"version":"62c39ca2a3880c7fe75786fb4cd5722731deb48272ac8e16a888fca60a6e3014","impliedFormat":1},{"version":"4d4d05b44285e2fabfd447662ced74ab397c8956b17534bd533e78ca70523a89","signature":"7ada549417c66eb7bfae9c1b2805f19c37348821d7290a08fa4335d43e758d5d"},{"version":"8174710d254034998a325526caffbe2a85182f493491b49a2ff443027e1edc42","impliedFormat":1},{"version":"a6a859ff4b9a8a65e24bb1afd1a56296a88502f35a460c16631ddb4c5d435d81","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"8b56c1d50bc2cc8edac185291ce3ecd2e366d1f1d6718a377b0a008c40140d4a","impliedFormat":1},{"version":"529bbfc5a152cc988e3889eb4cdaef2cc5e300bc30cd61b76f4bd95094170b66","impliedFormat":1},{"version":"fe7a0a744b32b5ece036d9964d9f13bbd49b41f1acb88ec52581855e05fb81f0","impliedFormat":1},{"version":"f5958982fb8d178282ae264d74bcd3a3253a2680f1ed9d61ab808d59a931b0cc","impliedFormat":1},{"version":"8c25b088dcc5e1b699fd6bf49e98d5eae8294d01db43bedc7bed3632eed2d123","impliedFormat":1},{"version":"0d8e093e0fefd5592cde3ee8684cf5d72208559d3394691ce4225b66797d0ccf","impliedFormat":1},{"version":"e4bede85425b4d1c00417170aa7d3f9deee64a872b65b6e979fd476937327718","impliedFormat":1},{"version":"afcb36480aab479f3708bf344a2bf837b04727164b50300b83d6d44d5dfbadc4","impliedFormat":1},{"version":"37c5b27fbda2688158884095b272debe61302286fe5a6dbb029be1bf00b2647d","impliedFormat":1},{"version":"8944244f3eea9766b45b5c50e353c185ff100d33372aa8ea0fa1ec0b2434312c","impliedFormat":1},{"version":"d8a68546789280f9cc972607b0204abba12f6503aa66de51a181c4ec15ae0dda","impliedFormat":1},{"version":"790eb52f6c673e44c8e6158c24410e240bd5061204d3c5b775884aab45a11bd5","impliedFormat":1},{"version":"4a7dffc1c5eafc0c91a0a00fdec024099dac76ca8ef37f06d95e8a8bba489de3","impliedFormat":1},{"version":"b7a02414d6128ec02d76de5f2f8fc70cb00b7d746b32e9aec23f8808cd1202ea","impliedFormat":1},{"version":"13ffd164aeda0bf61256d5e4d309bef434ed32d2d1e32eec4416b1af8e7df4fa","impliedFormat":1},{"version":"7c6e02bb36510ab742ab46393b41df82d2e7a59366df3dbc4503dc4b740da684","impliedFormat":1},{"version":"1465a061f05e061c6640a6a693c31e7446e0b68cc58899b67460e85e51a85aab","impliedFormat":1},{"version":"c41007d08773f66dd2936b55ca42f76f2e8eb5cbdf075aa14843b5a2d19f1275","impliedFormat":1},{"version":"0040147eeca1a25dd7876b2517658935d0962d714adf952b37a5dfe6575a2a75","impliedFormat":1},{"version":"4aaa31cda049c1c8176b17865735abe2fcac498626a5de10a297d29f661f6b42","impliedFormat":1},{"version":"b4be5ae6cf425c81acf21f762e17e1e342328ecd023f4bcefefc47891954de3e","impliedFormat":1},{"version":"0fe5ecc966c8d695030ed651904c6bb816717650516f2453d6e1c97784fcbe6b","impliedFormat":1},{"version":"9f9aa39db46ce9236e1f0796b9678fdca3dd575c501f3babc5873aaefe691fb0","impliedFormat":1},{"version":"769dc05c2bbaf01cb1a224d71f2f9b028949e7282541023c3d48d88aab76df81","impliedFormat":1},{"version":"c549cd957879a126d09665683f8582c715916a9990b3271796ecde433c2329da","impliedFormat":1},{"version":"cfbc348145d9949321f05d5f13fd7b65e2c92aa48621b5702fefe08f47f08a83","impliedFormat":1},{"version":"eb410e862798fc66cfe8da3cabcf8216ba817a725a95b6f6d5427c27ce3007b5","impliedFormat":1},{"version":"781d60ecb967dc2fcf49d5adfe0d77b073fe560d02a0de488fc1e291bbbfe2c3","impliedFormat":1},{"version":"fd955a375470a31b0e788ae58ffc5f1eadb3aaa48320815da81ff83ac039d578","impliedFormat":1},{"version":"4e3e977058703e69e3c3cd20c0ec64bcea48f909e64636a7dfe5e4ad508a9de9","impliedFormat":1},{"version":"41e6f7585fa89dcb8a278fcdfafdbc732cf596cd2314da8ef646782ba72322cd","impliedFormat":1},{"version":"0fd7b6969fb0dcb918a42c1f0b4e302b225a25e5d14915e503a3ffab5639292a","impliedFormat":1},{"version":"c091709121218131ab15e301d858666b7bf780dcd4f67161b84cb01cbebd7955","impliedFormat":1},{"version":"fedf564b673fb0cf6d462e37cd12c234fbe3d88923398724d0bb3fea56221d8e","impliedFormat":1},{"version":"0a00bff7d5e28a2785e690efecf56fa92d6081cdca8d2e8ba4e8b569089b9615","impliedFormat":1},{"version":"3f4daa8074fb0dff7c730985b7dfea828308e62b83650c263914c839851e7cff","impliedFormat":1},{"version":"f568ea3a8f9f6a96d741132e6172e76d1ee844efb4d0febc199730fd8373de12","impliedFormat":1},{"version":"96a01ce9115baca4647c77e25d4ccb20d506f68ab4a52f72fb0304094360e730","impliedFormat":1},{"version":"187cd844e9a6ef5247dcc9df18d7617ab4a734d00edddccf8ea7f37496700aef","impliedFormat":1},{"version":"6e5d2a482d576b9fc29ff3dabbc050ebac0a28e95521701c756e3b839ece38a9","impliedFormat":1},{"version":"a130d95545948a5539c3af75038154956805445f70e74cc99e8fcc90963764ec","impliedFormat":1},{"version":"3ab551e2d557e783d3aeb42bc84370bd38b137ed9f077f97eb31f49afe26db8f","impliedFormat":1},{"version":"fd8236c51f2515f4b11a746132aa1416f9b95d5c2e95630ff60708432c7940bc","impliedFormat":1},{"version":"2da076dd4eecc0c0f23292f0278a04ddc5224f921e6e8f97617cbf7b41717afc","impliedFormat":1},{"version":"f09a30043ac10a4e63de656f399bfa15e4ef4cf73118058a23474de3f1d4be73","impliedFormat":1},{"version":"925233a805205ce31ed53dd71851f143e7661c8f0c1e35aa41c7ed22a4a4bb52","impliedFormat":1},{"version":"664e1fb73a01ea6c7ede041c9da3573f74a963e2c355797ab5d00725beda0dd8","impliedFormat":1},{"version":"5b2e86d7ecd453e7e80270d92210a97160a63a9d2913b673ebc3d7097a289089","impliedFormat":1},{"version":"42638193b815f0bfa1f594c46f303b8e3a045e95affabc5c38405af06b0d2726","impliedFormat":1},{"version":"908dd1c9ded5ff5e471a30d08199544c4bf0c9e880a2fd60af51960ad31186f7","impliedFormat":1},{"version":"e1667177ab030fba7a784c8fe2dbe446e1ea6284758be955d9acfce4f7d88c8e","impliedFormat":1},{"version":"f287b2f8099b74b1f51211168a7dac65b3c5f0a433641fcadee223835ddea091","impliedFormat":1},{"version":"13a70ff4ebcda2c8096c4779a94e5047968fcce30ff11deba878cf07263e2b2c","impliedFormat":1},{"version":"a088d467b0c5922b72c597ff72d07057453c38db1cf05c4652998b3212f8561e","impliedFormat":1},{"version":"b8a71ed67fea0b21aa004bd3fe6c512f5358206be5c8ffb498a250fe41478a69","impliedFormat":1},{"version":"baa19a7a4df948ede8d9913ee128ff0c5948907619495ce58a90a8f1180056fb","impliedFormat":1},{"version":"eefcad1724cc01cccd3010c999b432ae5708653dc6e340ac854b0c006c431147","signature":"547ee2fc67d9614b6fedb32c74e620662788259fb99f14c1d572072a138d6334"},{"version":"cdcfafe23eb9b5dffb14920dea268341a39c0579f253a08da70d78c062e1388e","signature":"71837c482b51cff5a7ef82169458282e659872567f3a43d450f0f6a4bf344fe5"},{"version":"0c81cba34d29a923a4d7de38fc49ae44d8d5162e628129b8e9c7b300031578d6","signature":"fed4ae0c1742affa8ff74d9002582dcc6e6e34c6854f45f6939164f9834d162a"},{"version":"83a8891d5d4a65f52d4944b96f94b5d38076ec5a2ac59faac23d4b0ff5ac9688","signature":"396022d70f875b546e6765bff6ee0cca94783f69d8eb67cb3159186d34607081"},{"version":"fb64f88311febcb3f6138669769fdd0f9fd568778e127bb83ec72058ea22c7f4","signature":"df2b3bc9cd2d3e9d53a47f8979080d798a0cffbf9bd2c0331c22a5a7851c2a9a"},{"version":"8fab5748be05467cb561536b889d25bb65e929d0bf62eedc809a1c8215e095fd","signature":"4a7fa5946a4677a9d9940c218156afbccdd4cc4139494804321ca851b2a060b8"},{"version":"b46d699ed2ec947881ce83d32ffbb3ef5865420b473e684082804c98e13eaf05","signature":"938a1dbd6d0c49ab3e6424cb422dd1ec04bd799f8114cf2879592531c949a320"},{"version":"2b6134bc03966f8d3c5c7ba9810481b7d90dd4652808e29ae0b960d9042c1996","signature":"7e1deacbf78e794d095385b0da0095ec3a4d77647faedb6a412c8770145b97e4"},{"version":"e597bf4ba17a99ba8a95fd9b8b600632cd600b592d1e551369aa33d1cb36d155","signature":"14e4ff11aa25354ea1d10a85cf5a8cfb84d36c9d1a5377c35efbb095e3d4a8c2"},{"version":"83b124c9c5448ac70b7d1803da9721484ef4f6313566e3ed6519287186d4ec85","signature":"7e531419774a3d2c321ccffd3e3168de599b62df755c274636645c6204f8afdb"},{"version":"1e46745c9411767f0a080c9ae8da207e3b64ae674dbdb4c7c59d6b3578e99bdd","signature":"de974eff56c3d8605aed40681f0aa7b41625593699518afe5f9b602fc8251241"},{"version":"d2702c0e26fad0fa5f8c27c5ee21d5dd925f1ece442468be9836f3ba8a8b72b7","signature":"9fd8ab44c802f1f1917a6fdac3e7b8665b949d0ca5a41bf12527d71aa9394c18"},{"version":"3d3898c906518e61a7771d2b4e1d760f2b9603ad0c6842a26de2c2c61c3eb780","signature":"da658a053d894fe7d09999ce433c723913c034fa0f33d0c2dea5bc864186fc16"},{"version":"03cffcc9007577f806a696218d98ef25058d5f80e98e5f4a4b2d30115cab2eb2","signature":"fbffb99a754a5d3b8145b10e9d8613111c8baf377df820ebe61f330c5e120905"},{"version":"4da2c9fa61755caa002e250a659abc8f47d326a2d50fad3d3e681942921ca09c","signature":"67cd6d15f025f6c440f8d21200a6304c81228d654b55ddcf9b7d83d7decd2abf"},{"version":"aba891d2f093ee2c63684f4cf93538a0c2a7354b8d5c68e9fd026eaf5f088eba","signature":"dad577e08368c9f056b907bed9f204e62b0218964f4cb781dc9dd09cead9594b"},{"version":"9591e532c8161b6558a5ad278e89ebb2459b23db90d6503633625714dd550d17","signature":"37e7f3eede83ee563132092bdb1f49b8bb48bf20af2eb6e567c3789978c253be"},{"version":"1bdafdd367723b48e6bf36cd922ca80f0c1243495ef2a334ec133b613d9289f3","signature":"074bcbf06c4fd920ecea4be4a3672596c590d9d2d22c0c6752ede0b7704a82e6"},{"version":"fe068cc57c7024898ddbbec8afc861f70599418a0432cefc34f987c16525c2e2","signature":"b683a9c029c89f5ee76117854d1d6a9ed4028f9b644a5bae399b00584538e1d6"},{"version":"54223f3e9feff7bfa86a919a7cb01619554e38209a29c3d1c4ab2b4a87cf7441","signature":"8c6d489fcf83b162225fc03a7e267e158478ea8b716bc59dea747e04c9b460b0"},{"version":"3b204ce75621b401f70a65c4eee1fedbdbdd258718152140116dc1d97cd50c6f","signature":"e2cde99cd2da4d5f746def0403859882abb1c2d33a33c4397bee680817624f8d"},{"version":"66fea30c9286005b38d2453ffb00ebdc31e415e1ed076d6d8b242a5636e2d996","signature":"12b395303350c28b8faaee1fbac3efb3000df7506e0f5dcdfb70072c0bc5d57a"},{"version":"3e7ecac52940427ac55ff3732217eef3657271860a68c0383badc9c4be93fb5a","signature":"a885687ab177c32fef9137530c46c377cd070f78f0a2dde7e9e0f5351ea49ca9"},{"version":"1c221cf45665efce803648feb81d021eda8c19e7cf62cd22cb582c776f5fb492","signature":"803387a6e4080c884a07897daa60764e067ab005eeb28871393d96321c5181b9"},{"version":"0f52965d797a66a86433b5d21018f6a933b8778bd746c34e15c42aeeaa5242a1","signature":"4acf01107fc8ba6dd53f0826dfa6045d47cd095778b76cb3a65b76eb199a79a2"},{"version":"fe63c6696cde4462504953b6dcae55ced887719bedb223437691b0639c47d1f7","signature":"87c311f30be6508c25811ac3c33c7dfe7078288c96f92f619b0e6f5bf4eb9d4c"},{"version":"efd3f5f350bbb5354d39baff90495e67c29bdb088d52294f0106dd06019f2c5a","signature":"9a6789159a2b28e537eae47ae1e6064ccb0c1d833e3e0cf99fb985b808f36508"},{"version":"9a7e285f541d2f697dbad3130fd99b35c5b46a44c463745af7d0d0b5ad8e8e3f","signature":"b728a0a3ff33276960bee90fb000aea1129e5dfafd1e83f16c4bf2b9bb191e48"},{"version":"f8b109007ce44d343d31066d4a1b26d921c04aeb627ed80292fcf806a2f823a0","signature":"b856d5a0cfa6429db8b594b1340479cd8fd8aac38e34cdcd2e64d744a6002985"},{"version":"515f42aaa0d3411ba9ccc86c253583f6de9a6e3d6d548964cfa2d4b0ebdf8cf5","signature":"d50dbd6b718c5700b4729c7467d2a9e6bf40d45cc9e26145b80492c05a2bfd21"},{"version":"db3a143d6c0833bcd7971346c45739ed7cee5b8945e050267e9e61b5a5b949e3","signature":"a93ae1e1b1207294b997c5cea7466faa2fb86903dd4503be4f287f8682c5e9bd"},{"version":"2d6fdf0611ba569a0aa8dc0650b842721d2f5d6e966ffb9e29a01cbbe9967c06","signature":"4c128135f041d17915f75e4824a0b4eb6e5b8729441c2e74ef603a40f25d3c54"},{"version":"2b2dab1fefa18016532d2bdf3c705ca644573675b8a4ffaa661aa8cca3d113cb","signature":"219e33c8add31838c77d1dd99414fd52b9cc1c26dbeafbb7c671ee3196cbe16a"},{"version":"4c446a8a6b53b4733542b6ebb8b4767d390f55695570240253bf43f3dc4649ab","signature":"563c8c8f4cf6f3362841c1f425426723cfe3a3da0296edb247068d47a80afb67"},{"version":"8259dce3472c26f512965026ec04754f357787413d21244030c60ff1f7b16720","signature":"c0fca7e32830ee81d7e644ebf2d29412cceca074fea09095bd2f0f9c828bfaac"},{"version":"cd5ea046dea7297b6cb9977f07ca3027a883b005e65d26448aa3fc4563d483ca","signature":"e4b4f8cfb4fd94ffb50c7ba040e42a0167cc59f5fda6159d8d629fa22fe7044d"},{"version":"b5945af70d0d60ff0f6ff207fa18973712387963f7dba16efa1e9e10ce611a94","signature":"ead8db7dede5e1275b82fdf896f0f5582a394b8a922f30a22478484032a90cf7"},{"version":"f84ee6684444f1addab5a377967a517acb4bc4906a9889cc0e7f7a1d5a063bc6","signature":"7b07da36378a22a8600a98b89725d9167ce0573efa787a5c6a62feeb5645f63a"},{"version":"955e0b81ea64892d73fc9406cd4792adfb637c7113daa00de5c11e7f8098da35","signature":"8d5a71cde6d35033e2e1e01fdf0a445146cc90424d468fc2c578d15eaf11aaec"},{"version":"b13cf2dfb973b3ad3e9448a9a219e1d36e8c3ea105a0da3041bb4b207d825e02","signature":"124f7d0a32ad65b42a792727bc44631075662a4ec7c838bc50f582eb8af951b3"},{"version":"6164b7c72b1d676fa7c197b45f86ba4f03e6ce9ef65525ffaa71c21ca7551ccb","signature":"4c36844aa8702df686c1fe6cfcef41e4367b253dc46ee9acc832b1c288294b79"},"8f6acfbf0c5bb3eaf96aca99418f374f34697a025138013e5349705dd2c423fd",{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"a356997414bbba2a82fa683ed636c9c117810d8a4813ce316bc0e44d42379345","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6eca705d784aa2e8b74b7b20c4e0fd024938509ea69734650260e588a7ea59c7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d059c0bc02432c05b0a23248696198a3ee8f6e6ae13893700da879f88d078b20","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"724df2d1a86c3aead77b1fca726a5e81e4ea5085d936191791e5472b3f3ce0d4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"79c7dc6362f393b13ea113a6bb7fdbd244d5a9913b03ec5f4fe29b8a99b5e7c5","affectsGlobalScope":true},{"version":"baf3507287629018d38c88e2636dd041550c70620bb774127011eb6dc3b361c0","impliedFormat":1},{"version":"6175dda01fddf3684d6261d97d169d86b024eceb2cc20041936c068789230f8f","impliedFormat":1},{"version":"a6a55e87340abd0dfbc19ed6ea74ca452e87a55773a10190ee80017e2cbab6ee","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2cd3901fbe4b0eae51b613f2ea0bfe1d41fef7558a432a6925352ddf80dab292","signature":"b1bd501692ab4fb4b1663e8c1a5a470d88356845dcb6e483f39078acc4773a69"},{"version":"5146a9443a3faed571dbbbb08413ddb282d4c014ef3d41522deb0e56f047bb34","signature":"eb18d9b92488eaa6b4842f09bca865250c972e7d7d9b9bd4353a16e36f549cdf"},{"version":"4adb4e9de3b5df0ddd82d976df05f4ac96324f785c6149d68be98f14e9381a35","signature":"d565ce61f91e5a05f0a0609fec062029bd18465b07d2b481b09d8d163d041283"},{"version":"e6db1b5431c965ec9c046b50d2fe05754c1068031e5c6b4f1b35b8cd42035c54","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3898fbfaf2614a88e6d809efc2f12ffb14a19a205e1b0f4ddbcc275c60a6a473","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"63e56b51b29b814906f0399fda1144ff1414925bc3f9b52e470a6f405286a193","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2a9957c2aeeb52c8a3aa2fca0435c2868e0d279ca05ea1a59ac8953e37f2519b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3da6e5c3cf41bea4d1d43c73fcf55204f0e226567429c2d4b0ec23e0bd165492","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f5386fc09037cb6c337eb978484628c9ed50b4e227a6b05c2e6116b221d5d4c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bc4ef2a994d41d7fcd3c39f91d9f583c4ebd0f6737904446171deaaa274a8973","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"36d94f0d4392c0162d752b4e50c037938bbffd4432855e2e09882fcff10424a0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"02a646dee15586ef298172044b52c6723c7f6a45bf038e58a6e6962f02574ae9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ec84642c703600865d04a5574e5b45f1bb8f9ebb890033d2218c05acf0e52191","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1}],"root":[227,228,301,[303,307],[317,319],321,322,327,[387,428],[430,434],[437,450]],"options":{"allowJs":false,"checkJs":false,"composite":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"inlineSources":true,"module":1,"newLine":1,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[216,1],[212,2],[211,3],[213,2],[214,2],[215,4],[210,5],[220,6],[83,6],[222,6],[224,7],[223,6],[221,6],[86,6],[85,8],[87,9],[217,10],[84,6],[219,11],[218,12],[302,13],[429,6],[451,6],[316,14],[150,15],[151,15],[152,16],[90,17],[153,18],[154,19],[155,20],[88,6],[156,21],[157,22],[158,23],[159,24],[160,25],[161,26],[162,26],[163,27],[164,28],[165,29],[166,30],[91,6],[89,6],[167,31],[168,32],[169,33],[209,34],[170,24],[171,35],[172,24],[173,36],[174,37],[175,38],[176,39],[177,39],[178,39],[179,40],[180,41],[181,42],[182,43],[183,18],[184,44],[185,44],[186,45],[187,6],[188,6],[189,46],[190,47],[191,46],[192,48],[193,49],[194,50],[195,51],[196,52],[197,53],[198,23],[199,54],[200,55],[201,56],[202,57],[203,58],[204,59],[205,60],[206,61],[92,24],[93,6],[94,62],[95,6],[96,6],[97,63],[98,6],[141,64],[142,65],[143,66],[144,66],[145,67],[146,6],[147,18],[148,68],[149,65],[207,69],[208,70],[329,71],[436,72],[435,6],[330,73],[320,6],[314,74],[364,75],[365,6],[366,76],[368,77],[367,75],[371,78],[369,79],[370,80],[99,6],[315,6],[308,6],[225,6],[226,74],[328,6],[386,81],[381,82],[383,83],[333,6],[379,84],[384,85],[380,86],[331,87],[332,88],[334,6],[382,89],[385,90],[313,91],[310,92],[311,93],[309,6],[312,6],[326,94],[323,95],[325,96],[324,96],[81,6],[82,6],[13,6],[14,6],[16,6],[15,6],[2,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[3,6],[25,6],[26,6],[4,6],[27,6],[31,6],[28,6],[29,6],[30,6],[32,6],[33,6],[34,6],[5,6],[35,6],[36,6],[37,6],[38,6],[6,6],[42,6],[39,6],[40,6],[41,6],[43,6],[7,6],[44,6],[49,6],[50,6],[45,6],[46,6],[47,6],[48,6],[8,6],[54,6],[51,6],[52,6],[53,6],[55,6],[9,6],[56,6],[57,6],[58,6],[60,6],[59,6],[61,6],[62,6],[10,6],[63,6],[64,6],[65,6],[11,6],[66,6],[67,6],[68,6],[69,6],[70,6],[1,6],[71,6],[72,6],[12,6],[76,6],[74,6],[79,6],[78,6],[73,6],[77,6],[75,6],[80,6],[117,97],[129,98],[115,99],[130,70],[139,100],[106,101],[107,102],[105,103],[138,74],[133,104],[137,105],[109,106],[126,107],[108,108],[136,109],[103,110],[104,104],[110,111],[111,6],[116,105],[114,111],[101,112],[140,113],[131,114],[120,115],[119,111],[121,116],[124,117],[118,118],[122,119],[134,74],[112,120],[113,121],[125,122],[102,70],[128,123],[127,111],[123,124],[132,6],[100,6],[135,125],[335,6],[350,126],[349,127],[351,127],[353,128],[354,128],[352,6],[362,129],[355,130],[356,6],[357,130],[358,130],[359,130],[348,130],[360,128],[361,130],[363,131],[336,6],[347,132],[338,133],[339,133],[340,134],[337,135],[341,6],[342,135],[343,136],[344,135],[345,137],[346,135],[373,138],[372,139],[377,140],[376,141],[374,142],[375,142],[378,143],[300,144],[295,145],[298,146],[296,146],[292,145],[299,147],[297,146],[293,148],[294,149],[288,150],[233,151],[235,152],[287,6],[234,153],[291,154],[289,6],[236,151],[237,6],[286,155],[232,156],[229,6],[290,157],[230,158],[231,6],[238,159],[239,159],[240,159],[241,159],[242,159],[243,159],[244,159],[245,159],[246,159],[247,159],[248,159],[249,159],[250,159],[252,159],[251,159],[253,159],[254,159],[255,159],[285,160],[256,159],[257,159],[258,159],[259,159],[260,159],[261,159],[262,159],[263,159],[264,159],[265,159],[266,159],[267,159],[268,159],[270,159],[269,159],[271,159],[272,159],[273,159],[274,159],[275,159],[276,159],[277,159],[278,159],[279,159],[280,159],[281,159],[284,159],[282,159],[283,159],[321,6],[426,6],[430,161],[317,6],[425,162],[301,163],[392,164],[228,6],[393,164],[411,164],[413,164],[394,164],[415,164],[414,164],[417,164],[418,164],[420,164],[422,164],[395,164],[421,164],[423,164],[419,164],[396,164],[416,164],[397,164],[398,164],[399,164],[400,164],[401,164],[402,164],[403,164],[404,164],[405,164],[406,164],[410,164],[412,164],[437,165],[391,166],[424,167],[407,168],[408,164],[409,164],[389,6],[322,169],[304,6],[327,170],[306,171],[431,172],[307,170],[432,173],[318,174],[441,175],[442,175],[443,175],[444,175],[438,6],[439,6],[445,176],[440,177],[446,178],[447,179],[448,175],[449,175],[450,175],[387,170],[305,6],[390,180],[319,181],[227,182],[433,183],[303,6],[388,170],[434,6],[427,184],[428,185]],"latestChangedDtsFile":"./lib/mock/typeCheck.test.d.ts","version":"5.9.3"} \ No newline at end of file diff --git a/src/www/coords.ts b/src/www/coords.ts index a542947106..416d67e9fe 100644 --- a/src/www/coords.ts +++ b/src/www/coords.ts @@ -26,8 +26,12 @@ export function localCoordsToRobotCoords(localPoint: Point, params: MapParams): // X-Axis: (Unscaled Pixel X + Offset X) * 50 const robotX = Math.round((localPoint.x / params.scaleFactor + params.left) * MM_PER_PIXEL); - // Y-Axis (Inverted Logic): ((H_px) + top_px - Y_px / s) * 50 - const robotY = Math.round((params.imageHeight + params.topMap - localPoint.y / params.scaleFactor) * MM_PER_PIXEL); + // Y-Axis (Inverted Logic): + // y = H - (C - RobotY)*S + // RobotY = C - (H - y)/S = Top + y/S + // Note: C includes H/S which cancels out H/S + + const robotY = Math.round((params.topMap + localPoint.y / params.scaleFactor) * MM_PER_PIXEL); return { x: robotX, y: robotY }; } @@ -42,8 +46,10 @@ export function robotCoordsToLocalCoords(robotPoint: Point, params: MapParams): // X-Axis: (mm / 50 - Offset px) * scale const worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * params.scaleFactor; - // Y-Axis (Inverted Logic): ((H_px) + top_px - Y_mm/50) * scale - const worldY = (params.imageHeight + params.topMap - robotPoint.y / MM_PER_PIXEL) * params.scaleFactor; + // Y-Axis (Inverted Logic to match Backend): H_scaled - ((H_unscaled + Top - Y_mm/50) * scale) + // This matches mapCreator.ts: dimensions.height - ... + const unscaledY = params.imageHeight / params.scaleFactor + params.topMap - robotPoint.y / MM_PER_PIXEL; + const worldY = params.imageHeight - unscaledY * params.scaleFactor; return { x: worldX, y: worldY }; } From b0893fcb0d0dc7b6067077153908ffcb0970120e Mon Sep 17 00:00:00 2001 From: copystring Date: Sat, 13 Dec 2025 01:50:55 +0100 Subject: [PATCH 2/3] fix: compile www frontend to apply map fixes --- src/www/coords.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/www/coords.ts b/src/www/coords.ts index 416d67e9fe..d09feeb3d4 100644 --- a/src/www/coords.ts +++ b/src/www/coords.ts @@ -26,12 +26,8 @@ export function localCoordsToRobotCoords(localPoint: Point, params: MapParams): // X-Axis: (Unscaled Pixel X + Offset X) * 50 const robotX = Math.round((localPoint.x / params.scaleFactor + params.left) * MM_PER_PIXEL); - // Y-Axis (Inverted Logic): - // y = H - (C - RobotY)*S - // RobotY = C - (H - y)/S = Top + y/S - // Note: C includes H/S which cancels out H/S - - const robotY = Math.round((params.topMap + localPoint.y / params.scaleFactor) * MM_PER_PIXEL); + // Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_px / s) * 50 + const robotY = Math.round((params.imageHeight / params.scaleFactor + params.topMap - localPoint.y / params.scaleFactor) * MM_PER_PIXEL); return { x: robotX, y: robotY }; } @@ -46,10 +42,8 @@ export function robotCoordsToLocalCoords(robotPoint: Point, params: MapParams): // X-Axis: (mm / 50 - Offset px) * scale const worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * params.scaleFactor; - // Y-Axis (Inverted Logic to match Backend): H_scaled - ((H_unscaled + Top - Y_mm/50) * scale) - // This matches mapCreator.ts: dimensions.height - ... - const unscaledY = params.imageHeight / params.scaleFactor + params.topMap - robotPoint.y / MM_PER_PIXEL; - const worldY = params.imageHeight - unscaledY * params.scaleFactor; + // Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_mm/50) * scale + const worldY = (params.imageHeight / params.scaleFactor + params.topMap - robotPoint.y / MM_PER_PIXEL) * params.scaleFactor; return { x: worldX, y: worldY }; } From ee6d789ee33c6ee63d47e7bbc3b99af196bcf904 Mon Sep 17 00:00:00 2001 From: copystring Date: Sat, 13 Dec 2025 03:44:03 +0100 Subject: [PATCH 3/3] fix(map): Ensure pixel-perfect map alignment and sync backend - Improved alignment for carpets and room names by correcting grid coordinate logic - Synced backend image generation with frontend visual standards (mop path opacity, alignment) - Refactored coordinate calculations to use shared constants and added regression tests for stability - Optimized mop path width for better visual clarity --- build/lib/buildInfo.js | 4 +- build/lib/buildInfo.js.map | 2 +- build/lib/mapCreator.js | 18 ++-- build/lib/mapCreator.js.map | 2 +- build/tsconfig.tsbuildinfo | 2 +- src/lib/mapCreator.ts | 18 ++-- src/www/coords.test.ts | 75 +++++++++------- src/www/coords.ts | 33 +++++-- src/www/map.ts | 171 ++++++++++++++++++------------------ www/coords.d.ts | 2 + www/coords.js | 29 ++++-- www/coords.js.map | 2 +- www/map.js | 159 +++++++++++++++++---------------- www/map.js.map | 2 +- 14 files changed, 290 insertions(+), 229 deletions(-) diff --git a/build/lib/buildInfo.js b/build/lib/buildInfo.js index 539bf52eaf..4e9d464ab8 100644 --- a/build/lib/buildInfo.js +++ b/build/lib/buildInfo.js @@ -2,7 +2,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.buildInfo = void 0; exports.buildInfo = { - buildDate: "13.12.2025, 01:36:06", - commitHash: "d37368ad (local changes)", + buildDate: "13.12.2025, 01:50:55", + commitHash: "b0893fcb (local changes)", }; //# sourceMappingURL=buildInfo.js.map \ No newline at end of file diff --git a/build/lib/buildInfo.js.map b/build/lib/buildInfo.js.map index d63fc398a1..7612486288 100644 --- a/build/lib/buildInfo.js.map +++ b/build/lib/buildInfo.js.map @@ -1 +1 @@ -{"version":3,"file":"buildInfo.js","sourceRoot":"","sources":["../../src/lib/buildInfo.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACxB,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE,0BAA0B;CACtC,CAAC","sourcesContent":["export const buildInfo = {\n\tbuildDate: \"13.12.2025, 01:36:06\",\n\tcommitHash: \"d37368ad (local changes)\",\n};\n"]} \ No newline at end of file +{"version":3,"file":"buildInfo.js","sourceRoot":"","sources":["../../src/lib/buildInfo.ts"],"names":[],"mappings":";;;AAAa,QAAA,SAAS,GAAG;IACxB,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE,0BAA0B;CACtC,CAAC","sourcesContent":["export const buildInfo = {\n\tbuildDate: \"13.12.2025, 01:50:55\",\n\tcommitHash: \"b0893fcb (local changes)\",\n};\n"]} \ No newline at end of file diff --git a/build/lib/mapCreator.js b/build/lib/mapCreator.js index 33420140eb..794812ef30 100644 --- a/build/lib/mapCreator.js +++ b/build/lib/mapCreator.js @@ -77,10 +77,16 @@ class MapCreator { return dimensions.height - Math.floor(px / (dimensions.width / VISUAL_BLOCK_SIZE)) * VISUAL_BLOCK_SIZE - VISUAL_BLOCK_SIZE; } robotXtoCanvasX(image, robotCoord) { - return (robotCoord - image.position.left) * VISUAL_BLOCK_SIZE; + // Calculate base X + const x = (robotCoord - image.position.left) * VISUAL_BLOCK_SIZE; + // Add centering offset (+1.5px) to align with pixel center + return x + VISUAL_BLOCK_SIZE / 2; } robotYtoCanvasY(image, robotCoord) { - return (image.dimensions.height / VISUAL_BLOCK_SIZE + image.position.top - robotCoord) * VISUAL_BLOCK_SIZE; + // Calculate base Y + const y = (image.dimensions.height / VISUAL_BLOCK_SIZE + image.position.top - robotCoord) * VISUAL_BLOCK_SIZE; + // Add centering offset (-1.5px) to align with pixel center + return y - VISUAL_BLOCK_SIZE / 2; } // -------------------- // Drawing Helpers @@ -158,8 +164,9 @@ class MapCreator { drawPathSegments(mainCtx, tempCtx, pathSegments, color, width, opacity, dashed = false) { if (!pathSegments || pathSegments.length === 0) return; - const offsetX = 4; - const offsetY = -4; + // No additional offsets required + const offsetX = 0; + const offsetY = 0; const w = tempCtx.canvas.width; const h = tempCtx.canvas.height; tempCtx.clearRect(0, 0, w, h); @@ -407,7 +414,8 @@ class MapCreator { const lwMain = Math.max(1, VISUAL_BLOCK_SIZE / 2); const tempCanvas = (0, canvas_1.createCanvas)(ctx.canvas.width, ctx.canvas.height); const tempCtx = tempCanvas.getContext("2d"); - this.drawPathSegments(ctx, tempCtx, pathSegments.mainPath, LEGACY_COLORS.path, lwMain, 0.5); + this.drawPathSegments(ctx, tempCtx, pathSegments.mopPath, "rgba(255, 255, 255, 1)", 6.5 * VISUAL_BLOCK_SIZE, 0.18); + this.drawPathSegments(ctx, tempCtx, pathSegments.mainPath, LEGACY_COLORS.path, lwMain, 1.0); } drawActiveZones(ctx, zones, image) { if (zones?.[0]) { diff --git a/build/lib/mapCreator.js.map b/build/lib/mapCreator.js.map index 41eeb5aa7d..74c4703563 100644 --- a/build/lib/mapCreator.js.map +++ b/build/lib/mapCreator.js.map @@ -1 +1 @@ -{"version":3,"file":"mapCreator.js","sourceRoot":"","sources":["../../src/lib/mapCreator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,4CAA6G;AAC7G,iDAA+D;AAC/D,iDAAmC;AACnC,yDAAmF;AACnF,uCAAyB;AACzB,2CAA6B;AAE7B,gFAAgF;AAChF,yBAAyB;AACzB,gFAAgF;AAEhF,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC,kCAAkC;AAE/D,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAEtF,MAAM,aAAa,GAAG;IACrB,KAAK,EAAE,SAAS;IAChB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,SAAS;CACf,CAAC;AA0BF,gFAAgF;AAChF,oBAAoB;AACpB,gFAAgF;AAEhF,MAAa,UAAU;IACtB,OAAO,CAAW;IAClB,MAAM,CAAqE;IAE3E,YAAY,OAAiB;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG;YACb,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,MAAM,EAAE,IAAI;SACZ,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,qBAAqB;IACrB,uBAAuB;IAEf,IAAI,CAAC,UAAsB,EAAE,EAAU;QAC9C,OAAO,CAAC,EAAE,GAAG,iBAAiB,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;IACpD,CAAC;IAEO,IAAI,CAAC,UAAsB,EAAE,EAAU;QAC9C,OAAO,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;IAC5H,CAAC;IAEO,eAAe,CAAC,KAAU,EAAE,UAAkB;QACrD,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC;IAC/D,CAAC;IAEO,eAAe,CAAC,KAAU,EAAE,UAAkB;QACrD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,iBAAiB,CAAC;IAC5G,CAAC;IAED,uBAAuB;IACvB,kBAAkB;IAClB,uBAAuB;IAEvB;;;OAGG;IACK,kBAAkB;QACzB,+CAA+C;QAC/C,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAiC,CAAC;QAE1E,2CAA2C;QAC3C,GAAG,CAAC,qBAAqB,GAAG,KAAK,CAAC;QAClC,IAAI,WAAW,IAAI,GAAG;YAAE,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;QAE/C,uCAAuC;QACvC,GAAG,CAAC,SAAS,GAAG,oBAAoB,CAAC;QAErC,MAAM,MAAM,GAAG,CAAC,CAAC;QAEjB,6BAA6B;QAC7B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC;YAC/C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;gBACpB,oCAAoC;gBACpC,qEAAqE;gBACrE,IAAI,GAAG,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,YAAY,CAAC;IACrB,CAAC;IAEO,oBAAoB,CAAC,aAAuB,EAAE,KAAa,EAAE,MAAc,EAAE,eAAuB;QAC3G,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,GAAG,cAAc;gBAAE,cAAc,GAAG,MAAM,CAAC;QACtD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,EAAE,cAAc,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;QAE9E,MAAM,MAAM,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvD,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,EAAE,GAAG,QAAQ,CAAC;YACjC,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,CAAC;YACzB,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;gBACpE,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;YAC7B,CAAC;QACF,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,GAAG,CAAC;gBAAE,SAAS;YACvB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;YAEhC,IAAI,IAAI,GAAG,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAExC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;gBAC/B,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACF,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxB,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC;IAEO,gBAAgB,CACvB,OAA0B,EAC1B,OAAiC,EACjC,YAA2B,EAC3B,KAAa,EACb,KAAa,EACb,OAAe,EACf,SAAkB,KAAK;QAEvB,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEvD,MAAM,OAAO,GAAG,CAAC,CAAC;QAClB,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC;QAEnB,MAAM,CAAC,GAAI,OAAe,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,MAAM,CAAC,GAAI,OAAe,CAAC,MAAM,CAAC,MAAM,CAAC;QAEzC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9B,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;QAC5B,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;QAC1B,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC1B,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC;QAE3B,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,WAAW,CAAC,CAAC,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QAED,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAChC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;gBAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;gBAChE,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjB,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC;QAC9B,OAAO,CAAC,SAAS,CAAE,OAAe,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IAEhB,KAAK,CAAC,SAAS,CAAC,OAAY,EAAE,SAA2B,EAAE;QACjE,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;QAEpD,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YAC/F,MAAM,WAAW,GAAG,IAAA,qBAAY,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACnD,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE3B,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEhF,0CAA0C;QAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,iBAAiB,CAAC;QACpD,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,iBAAiB,CAAC;QAErD,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7F,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAiC,CAAC;QAEpE,wBAAwB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE1D,mBAAmB;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE7F,0CAA0C;QAC1C,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE/D,iBAAiB;QACjB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAExD,gBAAgB;QAChB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE7B,uBAAuB;QACvB,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE1E,2BAA2B;QAC3B,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEvC,yBAAyB;QACzB,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAExE,oBAAoB;QACpB,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAEjE,mCAAmC;QACnC,IAAI,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QAE5E,sBAAsB;QACtB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAEnD,mDAAmD;QACnD,MAAM,sBAAsB,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAElD,oBAAoB;QACpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAE3D,OAAO,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;IAC5E,CAAC;IAEO,YAAY,CAAC,OAAY;QAChC,IAAI,OAAO,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,UAAU;gBAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;YAC/D,IAAI,OAAO,CAAC,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;YAChE,IAAI,OAAO,CAAC,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QAC7C,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,SAAkB;QAC1C,IAAI,cAAc,GAAG,MAAM,CAAC,kBAAkB,CAAC;QAC/C,QAAQ,SAAS,EAAE,CAAC;YACnB,KAAK,OAAO;gBACX,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBAC1C,MAAM;YACP,KAAK,QAAQ;gBACZ,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;gBACnC,MAAM;YACP,KAAK,MAAM;gBACV,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACjC,MAAM;YACP,KAAK,WAAW;gBACf,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;gBACtC,MAAM;YACP,KAAK,QAAQ;gBACZ,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC;gBACpC,MAAM;QACR,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAA,kBAAS,EAAC,cAAc,CAAC,EAAE,IAAA,kBAAS,EAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAA,kBAAS,EAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACjH,CAAC;IAEO,iBAAiB,CAAC,GAAsB,EAAE,KAAU;QAC3D,IAAI,MAAM,GAAG,CAAC,EACb,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAChC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;QAElC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC/C,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;gBACzD,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACnG,CAAC;YACD,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAC/B,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;oBACrC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;oBAC1C,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBAC1J,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;oBACrD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;oBAC7B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC/B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC/B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC9B,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;IAEO,YAAY,CAAC,GAAsB,EAAE,KAAU,EAAE,sBAAgC;QACxF,MAAM,YAAY,GAAwB,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACjD,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;gBACzC,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,EAAE,GAAG,QAAQ,CAAC;gBACjC,IAAI,MAAM,IAAI,aAAa;oBAAE,OAAO;gBACpC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAClD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBAAE,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACrG,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,aAAa,CAAC;YACjC,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACjI,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,UAAU;oBAAE,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YACtF,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,IAAI,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;wBAAE,YAAY,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACzE,CAAC;gBACD,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;oBAAE,YAAY,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9D,CAAC;YACD,MAAM,QAAQ,GAAG,IAAA,4CAA6B,EAAC,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAE3H,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,UAAU;oBAAE,OAAO;gBAC/C,MAAM,kBAAkB,GAAG,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACpE,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;gBACzD,IAAI,kBAAkB;oBAAE,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC/G,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;gBAC1B,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChB,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE;oBAC9C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;gBAC1D,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,MAAc,EAAE,SAA6B,CAAC;YAClD,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;gBACzC,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC;gBAClB,IAAI,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC1B,GAAG,CAAC,IAAI,EAAE,CAAC;wBACX,GAAG,CAAC,SAAS,EAAE,CAAC;wBAChB,GAAG,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;wBAC3F,SAAS,GAAG,MAAM,CAAC;oBACpB,CAAC;oBACD,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;oBAClB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;gBAClH,CAAC;YACF,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,YAAY,CAAC;IACrB,CAAC;IAEO,iBAAiB,CAAC,MAAc;QACvC,MAAM,WAAW,GAAG,IAAA,qBAAY,EAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAiC,CAAC;QACzE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,WAAW,CAAC,SAAS,EAAE,CAAC;IAChC,CAAC;IAEO,UAAU,CAAC,GAAsB,EAAE,SAAc,EAAE,KAAU;QACpE,IAAI,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,qBAAqB,GAAG,KAAK,CAAC;YAClC,IAAI,WAAW,IAAI,GAAG;gBAAE,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;YAE/C,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAE/C,SAAS,CAAC,OAAO,CAAC,CAAC,EAAO,EAAE,EAAE;gBAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC9C,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAEO,SAAS,CAAC,GAAsB,EAAE,OAAY;QACrD,MAAM,kBAAkB,GAAG,CAAC,UAA4B,EAAE,GAAQ,EAAa,EAAE;YAChF,OAAO;gBACN,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAChD,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aAChD,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,YAAY,GAAe,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC;YAC1E,CAAC,CAAC,IAAA,+BAAY,EAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,CAAC,KAAK,CAAC;YAC3G,CAAC,CAAC;gBACD,QAAQ,EAAE,CAAC,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC,EAAE,CAAC;gBAClB,aAAa,EAAE,CAAC,EAAE,CAAC;gBACnB,OAAO,EAAE,CAAC,EAAE,CAAC;gBACb,SAAS,EAAE,EAAE;gBACb,aAAa,EAAE,EAAE;gBACjB,cAAc,EAAE,EAAE;gBAClB,QAAQ,EAAE,EAAE;aACZ,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAElD,MAAM,UAAU,GAAG,IAAA,qBAAY,EAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7F,CAAC;IAEO,eAAe,CAAC,GAAsB,EAAE,KAAU,EAAE,KAAU;QACrE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,KAAK,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACzD,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACzD,GAAG,CAAC,SAAS,GAAG,qBAAqB,CAAC;gBACtC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;gBAC5B,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;gBAClB,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAEO,iBAAiB,CAAC,GAAsB,EAAE,aAAkB,EAAE,KAAU;QAC/E,IAAI,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACnC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAC5C,GAAG,CAAC,WAAW,GAAG,wBAAwB,CAAC;YAC3C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC;YAChE,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;YACtB,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,IAAI,KAAK,GAAG,CAAC,CAAC,EACb,KAAK,GAAG,CAAC,CAAC,CAAC;YACZ,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE;gBAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACrD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;oBACjB,GAAG,CAAC,SAAS,GAAG,wBAAwB,CAAC;oBACzC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC7E,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClB,CAAC;qBAAM,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;oBACvC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,KAAK,GAAG,CAAC,CAAC;gBACV,KAAK,GAAG,CAAC,CAAC;YACX,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpB,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAsB,EAAE,SAAc,EAAE,KAAU;QAC7E,MAAM,gBAAgB,GAA2B;YAChD,KAAK,EAAE,IAAI;YACX,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,GAAG;YACN,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;SACR,CAAC;QAEF,IAAI,SAAS,EAAE,CAAC;YACf,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;gBAChF,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;gBAEhF,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;gBAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sEAAsE,MAAM,MAAM,CAAC,CAAC;gBAE3H,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,uDAAuD,IAAI,eAAe,MAAM,YAAY,SAAS,EAAE,CAAC,CAAC;gBAChI,CAAC;gBAED,kDAAkD;gBAClD,MAAM,MAAM,GAAG,iBAAiB,GAAG,GAAG,CAAC,CAAC,iBAAiB;gBACzD,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtC,GAAG,CAAC,SAAS,GAAG,0BAA0B,CAAC,CAAC,yBAAyB;gBACrE,GAAG,CAAC,IAAI,EAAE,CAAC;gBACX,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,iBAAiB;gBACtC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC1B,GAAG,CAAC,MAAM,EAAE,CAAC;gBAEb,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC;wBACJ,MAAM,WAAW,GAAG,MAAM,IAAA,kBAAS,EAAC,SAAS,CAAC,CAAC;wBAC/C,MAAM,IAAI,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,oBAAoB;wBACxD,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpE,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,qCAAqC,SAAS,KAAK,CAAC,EAAE,CAAC,CAAC;oBAChF,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAEO,sBAAsB,CAAC,GAAsB,EAAE,OAAY,EAAE,QAAe,EAAE,UAAiB,EAAE,UAAiB;QACzH,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC9C,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;gBAChC,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;YAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC;YAChD,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;YAE9B,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3D,MAAM,SAAS,GAAG,iBAAiB,GAAG,CAAC,CAAC;gBAExC,GAAG,CAAC,IAAI,EAAE,CAAC;gBACX,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;gBACxC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC9E,GAAG,CAAC,OAAO,EAAE,CAAC;YACf,CAAC;QACF,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,iBAAiB,GAAG,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;YAC9B,GAAG,CAAC,SAAS,CACZ,UAAU,EACV,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAC3E,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,iBAAiB,GAAG,CAAC,CAAC,EACjG,IAAI,EACJ,IAAI,CACJ,CAAC;QACH,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,GAAsB,EAAE,YAAiB,EAAE,WAAgB;QAChF,IAAI,YAAY,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACnC,IAAI,MAAM,KAAK,CAAC;oBAAE,OAAO;gBACzB,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;gBAC9E,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,IAAI,OAAO,EAAE,CAAC;oBACb,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBACxE,QAAQ,GAAG,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;gBAChC,CAAC;gBACD,IAAI,QAAQ,EAAE,CAAC;oBACd,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;oBACrC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjE,GAAG,CAAC,IAAI,GAAG,QAAQ,iBAAiB,GAAG,CAAC,UAAU,CAAC;oBACnD,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC;oBACzB,GAAG,CAAC,YAAY,GAAG,QAAQ,CAAC;oBAC5B,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;oBAClB,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;oBAC1B,GAAG,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC3C,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;oBACxB,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC1C,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAEO,OAAO,CAAC,MAAc,EAAE,GAAsB,EAAE,MAA4E;QACnI,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QACpD,MAAM,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;QAE3C,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAE9C,MAAM,iBAAiB,GAAG,IAAA,qBAAY,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC/D,MAAM,cAAc,GAAG,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,eAAe,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACzE,cAAc,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEnD,OAAO,iBAAiB,CAAC,SAAS,EAAE,CAAC;IACtC,CAAC;IAEO,mBAAmB,CAAC,GAAsB,EAAE,OAAY;QAC/D,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,IAAY,EAAE,MAAc,EAAE,EAAE;YACxE,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACtB,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClG,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClG,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClG,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;gBACrB,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;gBACnD,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC;gBACzB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAC5C,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC;QACF,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;QACpF,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC3B,GAAG,CAAC,WAAW,GAAG,oBAAoB,CAAC;YACvC,GAAG,CAAC,SAAS,GAAG,CAAC,GAAG,iBAAiB,CAAC;YACtC,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,EAAE;gBAC3C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACjH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClH,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,MAAM,EAAE,CAAC;QACd,CAAC;IACF,CAAC;CACD;AAzoBD,gCAyoBC","sourcesContent":["import { Roborock } from \"../main\";\r\nimport { createCanvas, loadImage, Image, type Canvas, type CanvasRenderingContext2D } from \"@napi-rs/canvas\";\r\nimport { assignRoborockRoomColorsToHex } from \"./roomColoring\";\r\nimport * as Images from \"./images\";\r\nimport { processPaths, type PathResult, type PathPoint } from \"./pathProcessor.js\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants & Interfaces\r\n// -----------------------------------------------------------------------------\r\n\r\nconst OFFSET = 60;\r\nconst MAX_BLOCK_NUM = 32;\r\nconst VISUAL_BLOCK_SIZE = 3; // Replaces fixed map_scale with 3\r\n\r\nconst ORG_COLORS = [\"#C05A41\", \"#4579B5\", \"#017E82\", \"#BD7B00\", \"#434242\", \"#dfdfdf\"];\r\n\r\nconst LEGACY_COLORS = {\r\n\tfloor: \"#23465e\",\r\n\tobstacle: \"#2b2e30\",\r\n\tpath: \"#FFFFFF\",\r\n};\r\n\r\ninterface CanvasMapOptions {\r\n\tselectedMap?: any;\r\n\tmappedRooms?: any;\r\n\toptions?: {\r\n\t\tFLOORCOLOR?: string;\r\n\t\tWALLCOLOR?: string;\r\n\t\tPATHCOLOR?: string;\r\n\t\tnewmap?: boolean;\r\n\t\tROBOT?: string;\r\n\t};\r\n}\r\n\r\ninterface Dimensions {\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\n// Define a custom interface to handle missing type definitions in @napi-rs/canvas\r\ninterface ExtendedContext2D extends CanvasRenderingContext2D {\r\n\tdrawImage(image: Image | Canvas, dx: number, dy: number, dw?: number, dh?: number): void;\r\n\tcanvas: Canvas;\r\n\tantialias?: string;\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Map Creator Class\r\n// -----------------------------------------------------------------------------\r\n\r\nexport class MapCreator {\r\n\tadapter: Roborock;\r\n\tcolors: { floor: string; obstacle: string; path: string; newmap: boolean };\r\n\r\n\tconstructor(adapter: Roborock) {\r\n\t\tthis.adapter = adapter;\r\n\t\tthis.colors = {\r\n\t\t\tfloor: LEGACY_COLORS.floor,\r\n\t\t\tobstacle: LEGACY_COLORS.obstacle,\r\n\t\t\tpath: LEGACY_COLORS.path,\r\n\t\t\tnewmap: true,\r\n\t\t};\r\n\t}\r\n\r\n\t// --------------------\r\n\t// Coordinate Helpers\r\n\t// --------------------\r\n\r\n\tprivate getX(dimensions: Dimensions, px: number): number {\r\n\t\treturn (px * VISUAL_BLOCK_SIZE) % dimensions.width;\r\n\t}\r\n\r\n\tprivate getY(dimensions: Dimensions, px: number): number {\r\n\t\treturn dimensions.height - Math.floor(px / (dimensions.width / VISUAL_BLOCK_SIZE)) * VISUAL_BLOCK_SIZE - VISUAL_BLOCK_SIZE;\r\n\t}\r\n\r\n\tprivate robotXtoCanvasX(image: any, robotCoord: number): number {\r\n\t\treturn (robotCoord - image.position.left) * VISUAL_BLOCK_SIZE;\r\n\t}\r\n\r\n\tprivate robotYtoCanvasY(image: any, robotCoord: number): number {\r\n\t\treturn (image.dimensions.height / VISUAL_BLOCK_SIZE + image.position.top - robotCoord) * VISUAL_BLOCK_SIZE;\r\n\t}\r\n\r\n\t// --------------------\r\n\t// Drawing Helpers\r\n\t// --------------------\r\n\r\n\t/**\r\n\t * Creates a pre-rendered sprite for a single carpet tile.\r\n\t * Logic matches renderCarpetTest.js exactly.\r\n\t */\r\n\tprivate createCarpetSprite(): Canvas {\r\n\t\t// Create a tiny canvas just for one tile (3x3)\r\n\t\tconst spriteCanvas = createCanvas(VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\tconst ctx = spriteCanvas.getContext(\"2d\") as unknown as ExtendedContext2D;\r\n\r\n\t\t// Disable AA for the sprite generation too\r\n\t\tctx.imageSmoothingEnabled = false;\r\n\t\tif (\"antialias\" in ctx) ctx.antialias = \"none\";\r\n\r\n\t\t// Carpet color (semi-transparent dark)\r\n\t\tctx.fillStyle = \"rgba(0, 0, 0, 0.4)\";\r\n\r\n\t\tconst STRIDE = 3;\r\n\r\n\t\t// Draw the pattern ONCE here\r\n\t\tfor (let dx = 0; dx < VISUAL_BLOCK_SIZE; dx++) {\r\n\t\t\tfor (let dy = 0; dy < VISUAL_BLOCK_SIZE; dy++) {\r\n\t\t\t\tconst sum = dx + dy;\r\n\t\t\t\t// Diagonal pattern logic: x + y = k\r\n\t\t\t\t// We use offset 2 to center the diagonal line in a typical 3x3 block\r\n\t\t\t\tif (sum % STRIDE === 2) {\r\n\t\t\t\t\tctx.fillRect(dx, dy, 1, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn spriteCanvas;\r\n\t}\r\n\r\n\tprivate buildAdjacencyMatrix(segmentPixels: number[], width: number, height: number, maxIdFromCaller: number): number[][] {\r\n\t\tlet maxSegInPixels = 0;\r\n\t\tfor (const px of segmentPixels) {\r\n\t\t\tconst segnum = px >>> 21;\r\n\t\t\tif (segnum > maxSegInPixels) maxSegInPixels = segnum;\r\n\t\t}\r\n\t\tconst size = Math.max(maxIdFromCaller + 1, maxSegInPixels + 1, MAX_BLOCK_NUM);\r\n\r\n\t\tconst matrix: number[][] = Array.from({ length: size }, () => Array(size).fill(0));\r\n\t\tconst segMap = new Int16Array(width * height).fill(-1);\r\n\r\n\t\tfor (const px of segmentPixels) {\r\n\t\t\tconst pixelIndex = px & 0x1fffff;\r\n\t\t\tconst segnum = px >>> 21;\r\n\t\t\tif (pixelIndex >= 0 && pixelIndex < segMap.length && segnum < size) {\r\n\t\t\t\tsegMap[pixelIndex] = segnum;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < segMap.length; i++) {\r\n\t\t\tconst segA = segMap[i];\r\n\t\t\tif (segA < 0) continue;\r\n\t\t\tconst x = i % width;\r\n\t\t\tconst y = Math.floor(i / width);\r\n\r\n\t\t\tif (segA < size) matrix[segA][segA] = 1;\r\n\r\n\t\t\tif (y > 0) {\r\n\t\t\t\tconst segB = segMap[i - width];\r\n\t\t\t\tif (segB >= 0 && segA !== segB && segA < size && segB < size) {\r\n\t\t\t\t\tmatrix[segA][segB] = 1;\r\n\t\t\t\t\tmatrix[segB][segA] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (x > 0) {\r\n\t\t\t\tconst segB = segMap[i - 1];\r\n\t\t\t\tif (segB >= 0 && segA !== segB && segA < size && segB < size) {\r\n\t\t\t\t\tmatrix[segA][segB] = 1;\r\n\t\t\t\t\tmatrix[segB][segA] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn matrix;\r\n\t}\r\n\r\n\tprivate drawPathSegments(\r\n\t\tmainCtx: ExtendedContext2D,\r\n\t\ttempCtx: CanvasRenderingContext2D,\r\n\t\tpathSegments: PathPoint[][],\r\n\t\tcolor: string,\r\n\t\twidth: number,\r\n\t\topacity: number,\r\n\t\tdashed: boolean = false\r\n\t) {\r\n\t\tif (!pathSegments || pathSegments.length === 0) return;\r\n\r\n\t\tconst offsetX = 4;\r\n\t\tconst offsetY = -4;\r\n\r\n\t\tconst w = (tempCtx as any).canvas.width;\r\n\t\tconst h = (tempCtx as any).canvas.height;\r\n\r\n\t\ttempCtx.clearRect(0, 0, w, h);\r\n\r\n\t\ttempCtx.strokeStyle = color;\r\n\t\ttempCtx.lineWidth = width;\r\n\t\ttempCtx.lineCap = \"round\";\r\n\t\ttempCtx.lineJoin = \"round\";\r\n\r\n\t\tif (dashed) {\r\n\t\t\ttempCtx.setLineDash([VISUAL_BLOCK_SIZE, 2 * VISUAL_BLOCK_SIZE]);\r\n\t\t} else {\r\n\t\t\ttempCtx.setLineDash([]);\r\n\t\t}\r\n\r\n\t\ttempCtx.beginPath();\r\n\t\tpathSegments.forEach((segment) => {\r\n\t\t\tif (segment.length > 0) {\r\n\t\t\t\ttempCtx.moveTo(segment[0].x + offsetX, segment[0].y + offsetY);\r\n\t\t\t\tfor (let i = 1; i < segment.length; i++) {\r\n\t\t\t\t\ttempCtx.lineTo(segment[i].x + offsetX, segment[i].y + offsetY);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\ttempCtx.stroke();\r\n\r\n\t\tmainCtx.save();\r\n\t\tmainCtx.globalAlpha = opacity;\r\n\t\tmainCtx.drawImage((tempCtx as any).canvas, 0, 0);\r\n\t\tmainCtx.restore();\r\n\t}\r\n\r\n\t// --------------------\r\n\t// Main Map Generation\r\n\t// --------------------\r\n\r\n\tpublic async canvasMap(mapdata: any, params: CanvasMapOptions = {}): Promise<[string, string, string]> {\r\n\t\tconst { mappedRooms = null, options = {} } = params;\r\n\r\n\t\tif (!mapdata || !mapdata.IMAGE || !mapdata.IMAGE.dimensions) {\r\n\t\t\tthis.adapter.log.warn(`[MapCreator] Received invalid or empty map data, cannot generate map.`);\r\n\t\t\tconst errorCanvas = createCanvas(1, 1).toDataURL();\r\n\t\t\treturn [errorCanvas, errorCanvas, errorCanvas];\r\n\t\t}\r\n\r\n\t\tthis.applyOptions(options);\r\n\r\n\t\tconst [imgRobot, imgCharger, imgGoToPin] = await this.loadImages(options.ROBOT);\r\n\r\n\t\t// Use VISUAL_BLOCK_SIZE for scaling logic\r\n\t\tmapdata.IMAGE.dimensions.width *= VISUAL_BLOCK_SIZE;\r\n\t\tmapdata.IMAGE.dimensions.height *= VISUAL_BLOCK_SIZE;\r\n\r\n\t\tconst canvas = createCanvas(mapdata.IMAGE.dimensions.width, mapdata.IMAGE.dimensions.height);\r\n\t\tconst ctx = canvas.getContext(\"2d\") as unknown as ExtendedContext2D;\r\n\r\n\t\t// 1. Draw Floor & Walls\r\n\t\tconst bounds = this.drawFloorAndWalls(ctx, mapdata.IMAGE);\r\n\r\n\t\t// 2. Draw Segments\r\n\t\tconst segmentsData = this.drawSegments(ctx, mapdata.IMAGE, mapdata.CURRENTLY_CLEANED_BLOCKS);\r\n\r\n\t\t// --- SAVE CLEAN MAP (WITHOUT CARPET) ---\r\n\t\tconst cleanMapUncroppedBase64 = this.getCleanMapBase64(canvas);\r\n\r\n\t\t// 3. Draw Carpet\r\n\t\tthis.drawCarpet(ctx, mapdata.CARPET_MAP, mapdata.IMAGE);\r\n\r\n\t\t// 4. Draw Paths\r\n\t\tthis.drawPaths(ctx, mapdata);\r\n\r\n\t\t// 5. Draw Active Zones\r\n\t\tthis.drawActiveZones(ctx, mapdata.CURRENTLY_CLEANED_ZONES, mapdata.IMAGE);\r\n\r\n\t\t// 6. Draw Restricted Areas\r\n\t\tthis.drawRestrictedAreas(ctx, mapdata);\r\n\r\n\t\t// 7. Draw Predicted Path\r\n\t\tthis.drawPredictedPath(ctx, mapdata.GOTO_PREDICTED_PATH, mapdata.IMAGE);\r\n\r\n\t\t// 8. Draw Obstacles\r\n\t\tawait this.drawObstacles(ctx, mapdata.OBSTACLES2, mapdata.IMAGE);\r\n\r\n\t\t// 9. Draw Robot & Charger & Target\r\n\t\tthis.drawRobotChargerTarget(ctx, mapdata, imgRobot, imgCharger, imgGoToPin);\r\n\r\n\t\t// 10. Draw Room Names\r\n\t\tthis.drawRoomNames(ctx, segmentsData, mappedRooms);\r\n\r\n\t\t// --- Get full uncropped map (INCLUDES Carpet) ---\r\n\t\tconst fullMapUncroppedBase64 = canvas.toDataURL();\r\n\r\n\t\t// 11. Crop & Return\r\n\t\tconst croppedMapBase64 = this.cropMap(canvas, ctx, bounds);\r\n\r\n\t\treturn [cleanMapUncroppedBase64, fullMapUncroppedBase64, croppedMapBase64];\r\n\t}\r\n\r\n\tprivate applyOptions(options: any) {\r\n\t\tif (options) {\r\n\t\t\tif (options.FLOORCOLOR) this.colors.floor = options.FLOORCOLOR;\r\n\t\t\tif (options.WALLCOLOR) this.colors.obstacle = options.WALLCOLOR;\r\n\t\t\tif (options.PATHCOLOR) this.colors.path = options.PATHCOLOR;\r\n\t\t\tthis.colors.newmap = options.newmap ?? true;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async loadImages(robotType?: string) {\r\n\t\tlet robotImgSource = Images.IMG_ROBOT_ORIGINAL;\r\n\t\tswitch (robotType) {\r\n\t\t\tcase \"robot\":\r\n\t\t\t\trobotImgSource = Images.IMG_ROBOT_DEFAULT;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"robot1\":\r\n\t\t\t\trobotImgSource = Images.IMG_ROBOT1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"tank\":\r\n\t\t\t\trobotImgSource = Images.IMG_TANK;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"spaceship\":\r\n\t\t\t\trobotImgSource = Images.IMG_SPACESHIP;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"robot2\":\r\n\t\t\t\trobotImgSource = Images.IMG_ROBOT_2;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn Promise.all([loadImage(robotImgSource), loadImage(Images.IMG_CHARGER), loadImage(Images.IMG_GO_TO_PIN)]);\r\n\t}\r\n\r\n\tprivate drawFloorAndWalls(ctx: ExtendedContext2D, image: any) {\r\n\t\tlet maxtop = 0,\r\n\t\t\tmaxleft = 0,\r\n\t\t\tminleft = image.dimensions.width,\r\n\t\t\tmintop = image.dimensions.height;\r\n\r\n\t\tif (image.pixels.floor && image.pixels.floor.length > 0) {\r\n\t\t\tif (typeof image.pixels.floor[0] === \"number\") {\r\n\t\t\t\tminleft = image.pixels.floor[0] % image.dimensions.width;\r\n\t\t\t\tmintop = image.dimensions.height - 1 - Math.floor(image.pixels.floor[0] / image.dimensions.width);\r\n\t\t\t}\r\n\t\t\t[\"floor\", \"obstacle\"].forEach((key) => {\r\n\t\t\t\tif (!image.pixels[key]) return;\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\timage.pixels[key].forEach((px: any) => {\r\n\t\t\t\t\tconst x = this.getX(image.dimensions, px);\r\n\t\t\t\t\tconst y = this.getY(image.dimensions, px);\r\n\t\t\t\t\tctx.fillStyle = key === \"obstacle\" ? (this.colors.newmap ? ORG_COLORS[4] : this.colors.obstacle) : this.colors.newmap ? ORG_COLORS[5] : this.colors.floor;\r\n\t\t\t\t\tctx.rect(x, y, VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\t\t\t\tmaxtop = Math.max(maxtop, y);\r\n\t\t\t\t\tmaxleft = Math.max(maxleft, x);\r\n\t\t\t\t\tminleft = Math.min(minleft, x);\r\n\t\t\t\t\tmintop = Math.min(mintop, y);\r\n\t\t\t\t});\r\n\t\t\t\tctx.fill();\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn { minleft, mintop, maxleft, maxtop };\r\n\t}\r\n\r\n\tprivate drawSegments(ctx: ExtendedContext2D, image: any, currentlyCleanedBlocks: number[]) {\r\n\t\tconst segmentsData: Record = {};\r\n\t\tif (image.pixels.segments && this.colors.newmap) {\r\n\t\t\timage.pixels.segments.forEach((px: any) => {\r\n\t\t\t\tconst segnum = px >> 21;\r\n\t\t\t\tconst pixelIndex = px & 0x1fffff;\r\n\t\t\t\tif (segnum >= MAX_BLOCK_NUM) return;\r\n\t\t\t\tconst x = this.getX(image.dimensions, pixelIndex);\r\n\t\t\t\tconst y = this.getY(image.dimensions, pixelIndex);\r\n\t\t\t\tif (!segmentsData[segnum]) segmentsData[segnum] = { points: [], minX: x, maxX: x, minY: y, maxY: y };\r\n\t\t\t\tconst segment = segmentsData[segnum];\r\n\t\t\t\tsegment.points.push({ x, y });\r\n\t\t\t\tsegment.minX = Math.min(segment.minX, x);\r\n\t\t\t\tsegment.maxX = Math.max(segment.maxX, x);\r\n\t\t\t\tsegment.minY = Math.min(segment.minY, y);\r\n\t\t\t\tsegment.maxY = Math.max(segment.maxY, y);\r\n\t\t\t});\r\n\r\n\t\t\tconst segmentNums = Object.keys(segmentsData).map(Number);\r\n\t\t\tconst maxId = segmentNums.length ? Math.max(...segmentNums) : 0;\r\n\t\t\tconst matrixSize = MAX_BLOCK_NUM;\r\n\t\t\tconst adjacencyMatrix = this.buildAdjacencyMatrix(image.pixels.segments, image.dimensions.width, image.dimensions.height, maxId);\r\n\t\t\tconst pointsCount = new Array(matrixSize).fill(0);\r\n\t\t\tfor (const segStr of Object.keys(segmentsData)) {\r\n\t\t\t\tconst seg = Number(segStr);\r\n\t\t\t\tif (seg >= 0 && seg < matrixSize) pointsCount[seg] = segmentsData[seg].points.length;\r\n\t\t\t}\r\n\t\t\tconst neighborInfo = new Array(matrixSize * matrixSize).fill(0);\r\n\t\t\tfor (let i = 0; i < matrixSize; i++) {\r\n\t\t\t\tfor (let j = 0; j < matrixSize; j++) {\r\n\t\t\t\t\tif (adjacencyMatrix[i]?.[j] === 1) neighborInfo[i * matrixSize + j] = 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (pointsCount[i] > 0) neighborInfo[i * matrixSize + i] = 1;\r\n\t\t\t}\r\n\t\t\tconst coloring = assignRoborockRoomColorsToHex({ maxBlockNum: matrixSize, neighborInfo, pointsCount }, { oneBased: true });\r\n\r\n\t\t\tObject.keys(segmentsData).forEach((segStr) => {\r\n\t\t\t\tconst segnum = Number(segStr);\r\n\t\t\t\tif (segnum < 0 || segnum >= matrixSize) return;\r\n\t\t\t\tconst isCurrentlyCleaned = currentlyCleanedBlocks?.includes(segnum);\r\n\t\t\t\tlet fillColor = coloring.colorHex?.[segnum] || \"#CCCCCC\";\r\n\t\t\t\tif (isCurrentlyCleaned) fillColor = segnum >= 0 && segnum < ORG_COLORS.length ? ORG_COLORS[segnum] : \"#AA0000\";\r\n\t\t\t\tctx.fillStyle = fillColor;\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tsegmentsData[segnum].points.forEach((p: any) => {\r\n\t\t\t\t\tctx.rect(p.x, p.y, VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\t\t\t});\r\n\t\t\t\tctx.fill();\r\n\t\t\t});\r\n\t\t} else if (image.pixels.segments) {\r\n\t\t\tlet segnum: number, lastcolor: number | undefined;\r\n\t\t\tctx.beginPath();\r\n\t\t\timage.pixels.segments.forEach((px: any) => {\r\n\t\t\t\tsegnum = px >> 21;\r\n\t\t\t\tif (currentlyCleanedBlocks?.includes(segnum)) {\r\n\t\t\t\t\tif (segnum !== lastcolor) {\r\n\t\t\t\t\t\tctx.fill();\r\n\t\t\t\t\t\tctx.beginPath();\r\n\t\t\t\t\t\tctx.fillStyle = segnum >= 0 && segnum < ORG_COLORS.length ? ORG_COLORS[segnum] : \"#CCCCCC\";\r\n\t\t\t\t\t\tlastcolor = segnum;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpx = px & 0xfffff;\r\n\t\t\t\t\tctx.rect(this.getX(image.dimensions, px), this.getY(image.dimensions, px), VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tctx.fill();\r\n\t\t}\r\n\t\treturn segmentsData;\r\n\t}\r\n\r\n\tprivate getCleanMapBase64(canvas: Canvas) {\r\n\t\tconst cleanCanvas = createCanvas(canvas.width, canvas.height);\r\n\t\tconst ctx = cleanCanvas.getContext(\"2d\") as unknown as ExtendedContext2D;\r\n\t\tctx.drawImage(canvas, 0, 0);\r\n\t\treturn cleanCanvas.toDataURL();\r\n\t}\r\n\r\n\tprivate drawCarpet(ctx: ExtendedContext2D, carpetMap: any, image: any) {\r\n\t\tif (carpetMap && image.dimensions.width > 0) {\r\n\t\t\tctx.imageSmoothingEnabled = false;\r\n\t\t\tif (\"antialias\" in ctx) ctx.antialias = \"none\";\r\n\r\n\t\t\tconst carpetSprite = this.createCarpetSprite();\r\n\r\n\t\t\tcarpetMap.forEach((px: any) => {\r\n\t\t\t\tconst x_pos = this.getX(image.dimensions, px);\r\n\t\t\t\tconst y_pos = this.getY(image.dimensions, px);\r\n\t\t\t\tctx.drawImage(carpetSprite, x_pos, y_pos);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawPaths(ctx: ExtendedContext2D, mapdata: any) {\r\n\t\tconst robotToScaledPixel = (robotCoord: [number, number], img: any): PathPoint => {\r\n\t\t\treturn {\r\n\t\t\t\tx: this.robotXtoCanvasX(img, robotCoord[0] / 50),\r\n\t\t\t\ty: this.robotYtoCanvasY(img, robotCoord[1] / 50),\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\tconst pathSegments: PathResult = (mapdata.PATH?.points && mapdata.MOP_PATH)\r\n\t\t\t? processPaths(mapdata.PATH.points, mapdata.MOP_PATH, robotToScaledPixel, VISUAL_BLOCK_SIZE, mapdata.IMAGE)\r\n\t\t\t: {\r\n\t\t\t\tmainPath: [[]],\r\n\t\t\t\tbackwashPath: [[]],\r\n\t\t\t\tpureCleanPath: [[]],\r\n\t\t\t\tmopPath: [[]],\r\n\t\t\t\tmainPathD: \"\",\r\n\t\t\t\tbackwashPathD: \"\",\r\n\t\t\t\tpureCleanPathD: \"\",\r\n\t\t\t\tmopPathD: \"\",\r\n\t\t\t};\r\n\r\n\t\tconst lwMain = Math.max(1, VISUAL_BLOCK_SIZE / 2);\r\n\r\n\t\tconst tempCanvas = createCanvas(ctx.canvas.width, ctx.canvas.height);\r\n\t\tconst tempCtx = tempCanvas.getContext(\"2d\");\r\n\r\n\t\tthis.drawPathSegments(ctx, tempCtx, pathSegments.mainPath, LEGACY_COLORS.path, lwMain, 0.5);\r\n\t}\r\n\r\n\tprivate drawActiveZones(ctx: ExtendedContext2D, zones: any, image: any) {\r\n\t\tif (zones?.[0]) {\r\n\t\t\tzones.forEach((coord: any) => {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(image, coord[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(image, coord[1] / 50);\r\n\t\t\t\tconst w = this.robotXtoCanvasX(image, coord[2] / 50) - x;\r\n\t\t\t\tconst h = this.robotYtoCanvasY(image, coord[3] / 50) - y;\r\n\t\t\t\tctx.fillStyle = \"rgba(46,139,87,0.1)\";\r\n\t\t\t\tctx.fillRect(x, y, w, h);\r\n\t\t\t\tctx.strokeStyle = \"#2e8b57\";\r\n\t\t\t\tctx.lineWidth = 4;\r\n\t\t\t\tctx.strokeRect(x, y, w, h);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawPredictedPath(ctx: ExtendedContext2D, predictedPath: any, image: any) {\r\n\t\tif (predictedPath?.points?.length) {\r\n\t\t\tctx.lineWidth = (3 * VISUAL_BLOCK_SIZE) / 2;\r\n\t\t\tctx.strokeStyle = \"rgba(255, 255, 255, 1)\";\r\n\t\t\tctx.setLineDash([3 * VISUAL_BLOCK_SIZE, 3 * VISUAL_BLOCK_SIZE]);\r\n\t\t\tctx.lineCap = \"round\";\r\n\t\t\tctx.beginPath();\r\n\t\t\tlet lastX = -1,\r\n\t\t\t\tlastY = -1;\r\n\t\t\tpredictedPath.points.forEach((coord: any, index: number) => {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(image, coord[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(image, coord[1] / 50);\r\n\t\t\t\tif (index === 0) {\r\n\t\t\t\t\tctx.fillStyle = \"rgba(255, 255, 255, 1)\";\r\n\t\t\t\t\tctx.fillRect(x, y, (1 * VISUAL_BLOCK_SIZE) / 2, (1 * VISUAL_BLOCK_SIZE) / 2);\r\n\t\t\t\t\tctx.moveTo(x, y);\r\n\t\t\t\t} else if (x !== lastX || y !== lastY) {\r\n\t\t\t\t\tctx.lineTo(x, y);\r\n\t\t\t\t}\r\n\t\t\t\tlastX = x;\r\n\t\t\t\tlastY = y;\r\n\t\t\t});\r\n\t\t\tctx.stroke();\r\n\t\t\tctx.setLineDash([]);\r\n\t\t\tctx.lineCap = \"butt\";\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async drawObstacles(ctx: ExtendedContext2D, obstacles: any, image: any) {\r\n\t\tconst OBSTACLE_MAPPING: Record = {\r\n\t\t\t\"-99\": \"99\",\r\n\t\t\t0: \"0\",\r\n\t\t\t1: \"1\",\r\n\t\t\t2: \"2\",\r\n\t\t\t3: \"3\",\r\n\t\t\t4: \"3\",\r\n\t\t\t5: \"5_cn\",\r\n\t\t\t9: \"9\",\r\n\t\t\t10: \"10\",\r\n\t\t\t18: \"18\",\r\n\t\t\t25: \"25\",\r\n\t\t\t26: \"26\",\r\n\t\t\t27: \"26\",\r\n\t\t\t34: \"10\",\r\n\t\t\t42: \"18\",\r\n\t\t\t48: \"48\",\r\n\t\t\t49: \"49\",\r\n\t\t\t50: \"50\",\r\n\t\t\t51: \"51\",\r\n\t\t\t54: \"54\",\r\n\t\t\t65: \"65\",\r\n\t\t\t67: \"67\",\r\n\t\t\t69: \"69\",\r\n\t\t\t70: \"70\",\r\n\t\t\t99: \"99\",\r\n\t\t};\r\n\r\n\t\tif (obstacles) {\r\n\t\t\tfor (const obstacle of obstacles) {\r\n\t\t\t\tconst type = obstacle[2];\r\n\t\t\t\tconst x = this.robotXtoCanvasX(image, obstacle[0] / 50) + VISUAL_BLOCK_SIZE / 2;\r\n\t\t\t\tconst y = this.robotYtoCanvasY(image, obstacle[1] / 50) + VISUAL_BLOCK_SIZE / 2;\r\n\r\n\t\t\t\tconst suffix = OBSTACLE_MAPPING[type] || \"18\";\r\n\t\t\t\tconst imagePath = path.join(__dirname, `../../www/images/projects_comroborocktanos_resources_obstacle_new_p${suffix}.png`);\r\n\r\n\t\t\t\tif (!fs.existsSync(imagePath)) {\r\n\t\t\t\t\tthis.adapter.log.warn(`[MapCreator] Could not find obstacle image for type ${type} (mapped to ${suffix}). Path: ${imagePath}`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Draw background circle (Grey with white border)\r\n\t\t\t\tconst radius = VISUAL_BLOCK_SIZE * 3.5; // Reduced radius\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.arc(x, y, radius, 0, 2 * Math.PI);\r\n\t\t\t\tctx.fillStyle = \"rgba(100, 100, 100, 0.2)\"; // Grey, more transparent\r\n\t\t\t\tctx.fill();\r\n\t\t\t\tctx.lineWidth = 0.5; // Thinner border\r\n\t\t\t\tctx.strokeStyle = \"white\";\r\n\t\t\t\tctx.stroke();\r\n\r\n\t\t\t\tif (fs.existsSync(imagePath)) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tconst obstacleImg = await loadImage(imagePath);\r\n\t\t\t\t\t\tconst size = VISUAL_BLOCK_SIZE * 5; // Reduced icon size\r\n\t\t\t\t\t\tctx.drawImage(obstacleImg, x - size / 2, y - size / 2, size, size);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tthis.adapter.log.error(`[MapCreator] Failed to load image ${imagePath}: ${e}`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawRobotChargerTarget(ctx: ExtendedContext2D, mapdata: any, imgRobot: Image, imgCharger: Image, imgGoToPin: Image) {\r\n\t\tif (mapdata.CHARGER_LOCATION) {\r\n\t\t\tconst pos = mapdata.CHARGER_LOCATION.position;\r\n\t\t\tif (pos?.[0] && pos?.[1]) {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(mapdata.IMAGE, pos[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(mapdata.IMAGE, pos[1] / 50);\r\n\t\t\t\tconst w = VISUAL_BLOCK_SIZE * 3;\r\n\t\t\t\tconst h = VISUAL_BLOCK_SIZE * 3;\r\n\t\t\t\tctx.drawImage(imgCharger, x - w / 2, y - h / 2, w, h);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mapdata.ROBOT_POSITION) {\r\n\t\t\tconst pos = mapdata.ROBOT_POSITION.position;\r\n\t\t\tconst angle = mapdata.ROBOT_POSITION.angle ?? 0;\r\n\t\t\tconst drawAngle = -angle + 90;\r\n\r\n\t\t\tif (pos?.[0] && pos?.[1]) {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(mapdata.IMAGE, pos[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(mapdata.IMAGE, pos[1] / 50);\r\n\t\t\t\tconst robotSize = VISUAL_BLOCK_SIZE * 5;\r\n\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate((drawAngle * Math.PI) / 180);\r\n\t\t\t\tctx.drawImage(imgRobot, -robotSize / 2, -robotSize / 2, robotSize, robotSize);\r\n\t\t\t\tctx.restore();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mapdata.GOTO_TARGET?.[0] && mapdata.GOTO_TARGET?.[1]) {\r\n\t\t\tconst pinW = VISUAL_BLOCK_SIZE * 3;\r\n\t\t\tconst pinH = (pinW / 29) * 24;\r\n\t\t\tctx.drawImage(\r\n\t\t\t\timgGoToPin,\r\n\t\t\t\tthis.robotXtoCanvasX(mapdata.IMAGE, mapdata.GOTO_TARGET[0] / 50) - pinW / 2,\r\n\t\t\t\tthis.robotYtoCanvasY(mapdata.IMAGE, mapdata.GOTO_TARGET[1] / 50) - (pinH + VISUAL_BLOCK_SIZE / 2),\r\n\t\t\t\tpinW,\r\n\t\t\t\tpinH\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawRoomNames(ctx: ExtendedContext2D, segmentsData: any, mappedRooms: any) {\r\n\t\tif (segmentsData && mappedRooms) {\r\n\t\t\tconst roomIDsAll = this.adapter.http_api.getMatchedRoomIDs(false);\r\n\t\t\tObject.keys(segmentsData).forEach((segnumStr) => {\r\n\t\t\t\tconst segnum = parseInt(segnumStr);\r\n\t\t\t\tif (segnum === 0) return;\r\n\t\t\t\tconst mapping = mappedRooms.find(([id]: [string]) => parseInt(id) === segnum);\r\n\t\t\t\tlet roomName = \"\";\r\n\t\t\t\tif (mapping) {\r\n\t\t\t\t\tconst roomID = mapping[1];\r\n\t\t\t\t\tconst roomObj = roomIDsAll.find((r) => String(r.id) === String(roomID));\r\n\t\t\t\t\troomName = roomObj?.name || \"\";\r\n\t\t\t\t}\r\n\t\t\t\tif (roomName) {\r\n\t\t\t\t\tconst segment = segmentsData[segnum];\r\n\t\t\t\t\tconst centerX = segment.minX + (segment.maxX - segment.minX) / 2;\r\n\t\t\t\t\tconst centerY = segment.minY + (segment.maxY - segment.minY) / 2;\r\n\t\t\t\t\tctx.font = `bold ${VISUAL_BLOCK_SIZE * 6}px Arial`;\r\n\t\t\t\t\tctx.textAlign = \"center\";\r\n\t\t\t\t\tctx.textBaseline = \"middle\";\r\n\t\t\t\t\tctx.lineWidth = 1;\r\n\t\t\t\t\tctx.strokeStyle = \"white\";\r\n\t\t\t\t\tctx.strokeText(roomName, centerX, centerY);\r\n\t\t\t\t\tctx.fillStyle = \"black\";\r\n\t\t\t\t\tctx.fillText(roomName, centerX, centerY);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate cropMap(canvas: Canvas, ctx: ExtendedContext2D, bounds: { minleft: number; mintop: number; maxleft: number; maxtop: number }) {\r\n\t\tconst { minleft, mintop, maxleft, maxtop } = bounds;\r\n\t\tconst cropW = maxleft - minleft + 2 * OFFSET;\r\n\t\tconst cropH = maxtop - mintop + 2 * OFFSET;\r\n\r\n\t\tif (cropW <= 0 || cropH <= 0 || !isFinite(cropW) || !isFinite(cropH)) {\r\n\t\t\treturn canvas.toDataURL();\r\n\t\t}\r\n\r\n\t\tconst sx = Math.max(0, minleft - OFFSET);\r\n\t\tconst sy = Math.max(0, mintop - OFFSET);\r\n\t\tconst maxWidth = canvas.width - sx;\r\n\t\tconst maxHeight = canvas.height - sy;\r\n\t\tconst finalCropW = Math.min(cropW, maxWidth);\r\n\t\tconst finalCropH = Math.min(cropH, maxHeight);\r\n\r\n\t\tconst canvasTrimmedFull = createCanvas(finalCropW, finalCropH);\r\n\t\tconst ctxTrimmedFull = canvasTrimmedFull.getContext(\"2d\");\r\n\t\tconst trimmedDataFull = ctx.getImageData(sx, sy, finalCropW, finalCropH);\r\n\t\tctxTrimmedFull.putImageData(trimmedDataFull, 0, 0);\r\n\r\n\t\treturn canvasTrimmedFull.toDataURL();\r\n\t}\r\n\r\n\tprivate drawRestrictedAreas(ctx: ExtendedContext2D, mapdata: any) {\r\n\t\tconst drawRectArea = (zones: number[][], fill: string, stroke: string) => {\r\n\t\t\tif (!zones) return;\r\n\t\t\tzones.forEach((zone) => {\r\n\t\t\t\tconst x1 = this.robotXtoCanvasX(mapdata.IMAGE, Math.min(zone[0], zone[2], zone[4], zone[6]) / 50);\r\n\t\t\t\tconst y1 = this.robotYtoCanvasY(mapdata.IMAGE, Math.max(zone[1], zone[3], zone[5], zone[7]) / 50);\r\n\t\t\t\tconst x2 = this.robotXtoCanvasX(mapdata.IMAGE, Math.max(zone[0], zone[2], zone[4], zone[6]) / 50);\r\n\t\t\t\tconst y2 = this.robotYtoCanvasY(mapdata.IMAGE, Math.min(zone[1], zone[3], zone[5], zone[7]) / 50);\r\n\t\t\t\tconst minX = Math.min(x1, x2);\r\n\t\t\t\tconst minY = Math.min(y1, y2);\r\n\t\t\t\tconst maxX = Math.max(x1, x2);\r\n\t\t\t\tconst maxY = Math.max(y1, y2);\r\n\t\t\t\tctx.fillStyle = fill;\r\n\t\t\t\tctx.fillRect(minX, minY, maxX - minX, maxY - minY);\r\n\t\t\t\tctx.strokeStyle = stroke;\r\n\t\t\t\tctx.lineWidth = (1 * VISUAL_BLOCK_SIZE) / 2;\r\n\t\t\t\tctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\r\n\t\t\t});\r\n\t\t};\r\n\t\tdrawRectArea(mapdata.FORBIDDEN_ZONES, \"rgba(255, 0, 0, 0.5)\", \"rgba(255, 0, 0, 1)\");\r\n\t\tdrawRectArea(mapdata.NO_MOP_ZONE, \"rgba(0, 0, 255, 0.5)\", \"rgba(0, 0, 255, 1)\");\r\n\t\tif (mapdata.VIRTUAL_WALLS) {\r\n\t\t\tctx.strokeStyle = \"rgba(255, 0, 0, 1)\";\r\n\t\t\tctx.lineWidth = 1 * VISUAL_BLOCK_SIZE;\r\n\t\t\tctx.beginPath();\r\n\t\t\tmapdata.VIRTUAL_WALLS.forEach((wall: any) => {\r\n\t\t\t\tctx.moveTo(this.robotXtoCanvasX(mapdata.IMAGE, wall[0] / 50), this.robotYtoCanvasY(mapdata.IMAGE, wall[1] / 50));\r\n\t\t\t\tctx.lineTo(this.robotXtoCanvasX(mapdata.IMAGE, wall[2] / 50), this.robotYtoCanvasY(mapdata.IMAGE, wall[3] / 50));\r\n\t\t\t});\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t}\r\n}"]} \ No newline at end of file +{"version":3,"file":"mapCreator.js","sourceRoot":"","sources":["../../src/lib/mapCreator.ts"],"names":[],"mappings":"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","sourcesContent":["import { Roborock } from \"../main\";\r\nimport { createCanvas, loadImage, Image, type Canvas, type CanvasRenderingContext2D } from \"@napi-rs/canvas\";\r\nimport { assignRoborockRoomColorsToHex } from \"./roomColoring\";\r\nimport * as Images from \"./images\";\r\nimport { processPaths, type PathResult, type PathPoint } from \"./pathProcessor.js\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants & Interfaces\r\n// -----------------------------------------------------------------------------\r\n\r\nconst OFFSET = 60;\r\nconst MAX_BLOCK_NUM = 32;\r\nconst VISUAL_BLOCK_SIZE = 3; // Replaces fixed map_scale with 3\r\n\r\nconst ORG_COLORS = [\"#C05A41\", \"#4579B5\", \"#017E82\", \"#BD7B00\", \"#434242\", \"#dfdfdf\"];\r\n\r\nconst LEGACY_COLORS = {\r\n\tfloor: \"#23465e\",\r\n\tobstacle: \"#2b2e30\",\r\n\tpath: \"#FFFFFF\",\r\n};\r\n\r\ninterface CanvasMapOptions {\r\n\tselectedMap?: any;\r\n\tmappedRooms?: any;\r\n\toptions?: {\r\n\t\tFLOORCOLOR?: string;\r\n\t\tWALLCOLOR?: string;\r\n\t\tPATHCOLOR?: string;\r\n\t\tnewmap?: boolean;\r\n\t\tROBOT?: string;\r\n\t};\r\n}\r\n\r\ninterface Dimensions {\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\n// Define a custom interface to handle missing type definitions in @napi-rs/canvas\r\ninterface ExtendedContext2D extends CanvasRenderingContext2D {\r\n\tdrawImage(image: Image | Canvas, dx: number, dy: number, dw?: number, dh?: number): void;\r\n\tcanvas: Canvas;\r\n\tantialias?: string;\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Map Creator Class\r\n// -----------------------------------------------------------------------------\r\n\r\nexport class MapCreator {\r\n\tadapter: Roborock;\r\n\tcolors: { floor: string; obstacle: string; path: string; newmap: boolean };\r\n\r\n\tconstructor(adapter: Roborock) {\r\n\t\tthis.adapter = adapter;\r\n\t\tthis.colors = {\r\n\t\t\tfloor: LEGACY_COLORS.floor,\r\n\t\t\tobstacle: LEGACY_COLORS.obstacle,\r\n\t\t\tpath: LEGACY_COLORS.path,\r\n\t\t\tnewmap: true,\r\n\t\t};\r\n\t}\r\n\r\n\t// --------------------\r\n\t// Coordinate Helpers\r\n\t// --------------------\r\n\r\n\tprivate getX(dimensions: Dimensions, px: number): number {\r\n\t\treturn (px * VISUAL_BLOCK_SIZE) % dimensions.width;\r\n\t}\r\n\r\n\tprivate getY(dimensions: Dimensions, px: number): number {\r\n\t\treturn dimensions.height - Math.floor(px / (dimensions.width / VISUAL_BLOCK_SIZE)) * VISUAL_BLOCK_SIZE - VISUAL_BLOCK_SIZE;\r\n\t}\r\n\r\n\tprivate robotXtoCanvasX(image: any, robotCoord: number): number {\r\n\t\t// Calculate base X\r\n\t\tconst x = (robotCoord - image.position.left) * VISUAL_BLOCK_SIZE;\r\n\t\t// Add centering offset (+1.5px) to align with pixel center\r\n\t\treturn x + VISUAL_BLOCK_SIZE / 2;\r\n\t}\r\n\r\n\tprivate robotYtoCanvasY(image: any, robotCoord: number): number {\r\n\t\t// Calculate base Y\r\n\t\tconst y = (image.dimensions.height / VISUAL_BLOCK_SIZE + image.position.top - robotCoord) * VISUAL_BLOCK_SIZE;\r\n\t\t// Add centering offset (-1.5px) to align with pixel center\r\n\t\treturn y - VISUAL_BLOCK_SIZE / 2;\r\n\t}\r\n\r\n\t// --------------------\r\n\t// Drawing Helpers\r\n\t// --------------------\r\n\r\n\t/**\r\n\t * Creates a pre-rendered sprite for a single carpet tile.\r\n\t * Logic matches renderCarpetTest.js exactly.\r\n\t */\r\n\tprivate createCarpetSprite(): Canvas {\r\n\t\t// Create a tiny canvas just for one tile (3x3)\r\n\t\tconst spriteCanvas = createCanvas(VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\tconst ctx = spriteCanvas.getContext(\"2d\") as unknown as ExtendedContext2D;\r\n\r\n\t\t// Disable AA for the sprite generation too\r\n\t\tctx.imageSmoothingEnabled = false;\r\n\t\tif (\"antialias\" in ctx) ctx.antialias = \"none\";\r\n\r\n\t\t// Carpet color (semi-transparent dark)\r\n\t\tctx.fillStyle = \"rgba(0, 0, 0, 0.4)\";\r\n\r\n\t\tconst STRIDE = 3;\r\n\r\n\t\t// Draw the pattern ONCE here\r\n\t\tfor (let dx = 0; dx < VISUAL_BLOCK_SIZE; dx++) {\r\n\t\t\tfor (let dy = 0; dy < VISUAL_BLOCK_SIZE; dy++) {\r\n\t\t\t\tconst sum = dx + dy;\r\n\t\t\t\t// Diagonal pattern logic: x + y = k\r\n\t\t\t\t// We use offset 2 to center the diagonal line in a typical 3x3 block\r\n\t\t\t\tif (sum % STRIDE === 2) {\r\n\t\t\t\t\tctx.fillRect(dx, dy, 1, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn spriteCanvas;\r\n\t}\r\n\r\n\tprivate buildAdjacencyMatrix(segmentPixels: number[], width: number, height: number, maxIdFromCaller: number): number[][] {\r\n\t\tlet maxSegInPixels = 0;\r\n\t\tfor (const px of segmentPixels) {\r\n\t\t\tconst segnum = px >>> 21;\r\n\t\t\tif (segnum > maxSegInPixels) maxSegInPixels = segnum;\r\n\t\t}\r\n\t\tconst size = Math.max(maxIdFromCaller + 1, maxSegInPixels + 1, MAX_BLOCK_NUM);\r\n\r\n\t\tconst matrix: number[][] = Array.from({ length: size }, () => Array(size).fill(0));\r\n\t\tconst segMap = new Int16Array(width * height).fill(-1);\r\n\r\n\t\tfor (const px of segmentPixels) {\r\n\t\t\tconst pixelIndex = px & 0x1fffff;\r\n\t\t\tconst segnum = px >>> 21;\r\n\t\t\tif (pixelIndex >= 0 && pixelIndex < segMap.length && segnum < size) {\r\n\t\t\t\tsegMap[pixelIndex] = segnum;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < segMap.length; i++) {\r\n\t\t\tconst segA = segMap[i];\r\n\t\t\tif (segA < 0) continue;\r\n\t\t\tconst x = i % width;\r\n\t\t\tconst y = Math.floor(i / width);\r\n\r\n\t\t\tif (segA < size) matrix[segA][segA] = 1;\r\n\r\n\t\t\tif (y > 0) {\r\n\t\t\t\tconst segB = segMap[i - width];\r\n\t\t\t\tif (segB >= 0 && segA !== segB && segA < size && segB < size) {\r\n\t\t\t\t\tmatrix[segA][segB] = 1;\r\n\t\t\t\t\tmatrix[segB][segA] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (x > 0) {\r\n\t\t\t\tconst segB = segMap[i - 1];\r\n\t\t\t\tif (segB >= 0 && segA !== segB && segA < size && segB < size) {\r\n\t\t\t\t\tmatrix[segA][segB] = 1;\r\n\t\t\t\t\tmatrix[segB][segA] = 1;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn matrix;\r\n\t}\r\n\r\n\tprivate drawPathSegments(\r\n\t\tmainCtx: ExtendedContext2D,\r\n\t\ttempCtx: CanvasRenderingContext2D,\r\n\t\tpathSegments: PathPoint[][],\r\n\t\tcolor: string,\r\n\t\twidth: number,\r\n\t\topacity: number,\r\n\t\tdashed: boolean = false\r\n\t) {\r\n\t\tif (!pathSegments || pathSegments.length === 0) return;\r\n\r\n\t\t// No additional offsets required\r\n\t\tconst offsetX = 0;\r\n\t\tconst offsetY = 0;\r\n\r\n\t\tconst w = (tempCtx as any).canvas.width;\r\n\t\tconst h = (tempCtx as any).canvas.height;\r\n\r\n\t\ttempCtx.clearRect(0, 0, w, h);\r\n\r\n\t\ttempCtx.strokeStyle = color;\r\n\t\ttempCtx.lineWidth = width;\r\n\t\ttempCtx.lineCap = \"round\";\r\n\t\ttempCtx.lineJoin = \"round\";\r\n\r\n\t\tif (dashed) {\r\n\t\t\ttempCtx.setLineDash([VISUAL_BLOCK_SIZE, 2 * VISUAL_BLOCK_SIZE]);\r\n\t\t} else {\r\n\t\t\ttempCtx.setLineDash([]);\r\n\t\t}\r\n\r\n\t\ttempCtx.beginPath();\r\n\t\tpathSegments.forEach((segment) => {\r\n\t\t\tif (segment.length > 0) {\r\n\t\t\t\ttempCtx.moveTo(segment[0].x + offsetX, segment[0].y + offsetY);\r\n\t\t\t\tfor (let i = 1; i < segment.length; i++) {\r\n\t\t\t\t\ttempCtx.lineTo(segment[i].x + offsetX, segment[i].y + offsetY);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t\ttempCtx.stroke();\r\n\r\n\t\tmainCtx.save();\r\n\t\tmainCtx.globalAlpha = opacity;\r\n\t\tmainCtx.drawImage((tempCtx as any).canvas, 0, 0);\r\n\t\tmainCtx.restore();\r\n\t}\r\n\r\n\t// --------------------\r\n\t// Main Map Generation\r\n\t// --------------------\r\n\r\n\tpublic async canvasMap(mapdata: any, params: CanvasMapOptions = {}): Promise<[string, string, string]> {\r\n\t\tconst { mappedRooms = null, options = {} } = params;\r\n\r\n\t\tif (!mapdata || !mapdata.IMAGE || !mapdata.IMAGE.dimensions) {\r\n\t\t\tthis.adapter.log.warn(`[MapCreator] Received invalid or empty map data, cannot generate map.`);\r\n\t\t\tconst errorCanvas = createCanvas(1, 1).toDataURL();\r\n\t\t\treturn [errorCanvas, errorCanvas, errorCanvas];\r\n\t\t}\r\n\r\n\t\tthis.applyOptions(options);\r\n\r\n\t\tconst [imgRobot, imgCharger, imgGoToPin] = await this.loadImages(options.ROBOT);\r\n\r\n\t\t// Use VISUAL_BLOCK_SIZE for scaling logic\r\n\t\tmapdata.IMAGE.dimensions.width *= VISUAL_BLOCK_SIZE;\r\n\t\tmapdata.IMAGE.dimensions.height *= VISUAL_BLOCK_SIZE;\r\n\r\n\t\tconst canvas = createCanvas(mapdata.IMAGE.dimensions.width, mapdata.IMAGE.dimensions.height);\r\n\t\tconst ctx = canvas.getContext(\"2d\") as unknown as ExtendedContext2D;\r\n\r\n\t\t// 1. Draw Floor & Walls\r\n\t\tconst bounds = this.drawFloorAndWalls(ctx, mapdata.IMAGE);\r\n\r\n\t\t// 2. Draw Segments\r\n\t\tconst segmentsData = this.drawSegments(ctx, mapdata.IMAGE, mapdata.CURRENTLY_CLEANED_BLOCKS);\r\n\r\n\t\t// --- SAVE CLEAN MAP (WITHOUT CARPET) ---\r\n\t\tconst cleanMapUncroppedBase64 = this.getCleanMapBase64(canvas);\r\n\r\n\t\t// 3. Draw Carpet\r\n\t\tthis.drawCarpet(ctx, mapdata.CARPET_MAP, mapdata.IMAGE);\r\n\r\n\t\t// 4. Draw Paths\r\n\t\tthis.drawPaths(ctx, mapdata);\r\n\r\n\t\t// 5. Draw Active Zones\r\n\t\tthis.drawActiveZones(ctx, mapdata.CURRENTLY_CLEANED_ZONES, mapdata.IMAGE);\r\n\r\n\t\t// 6. Draw Restricted Areas\r\n\t\tthis.drawRestrictedAreas(ctx, mapdata);\r\n\r\n\t\t// 7. Draw Predicted Path\r\n\t\tthis.drawPredictedPath(ctx, mapdata.GOTO_PREDICTED_PATH, mapdata.IMAGE);\r\n\r\n\t\t// 8. Draw Obstacles\r\n\t\tawait this.drawObstacles(ctx, mapdata.OBSTACLES2, mapdata.IMAGE);\r\n\r\n\t\t// 9. Draw Robot & Charger & Target\r\n\t\tthis.drawRobotChargerTarget(ctx, mapdata, imgRobot, imgCharger, imgGoToPin);\r\n\r\n\t\t// 10. Draw Room Names\r\n\t\tthis.drawRoomNames(ctx, segmentsData, mappedRooms);\r\n\r\n\t\t// --- Get full uncropped map (INCLUDES Carpet) ---\r\n\t\tconst fullMapUncroppedBase64 = canvas.toDataURL();\r\n\r\n\t\t// 11. Crop & Return\r\n\t\tconst croppedMapBase64 = this.cropMap(canvas, ctx, bounds);\r\n\r\n\t\treturn [cleanMapUncroppedBase64, fullMapUncroppedBase64, croppedMapBase64];\r\n\t}\r\n\r\n\tprivate applyOptions(options: any) {\r\n\t\tif (options) {\r\n\t\t\tif (options.FLOORCOLOR) this.colors.floor = options.FLOORCOLOR;\r\n\t\t\tif (options.WALLCOLOR) this.colors.obstacle = options.WALLCOLOR;\r\n\t\t\tif (options.PATHCOLOR) this.colors.path = options.PATHCOLOR;\r\n\t\t\tthis.colors.newmap = options.newmap ?? true;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async loadImages(robotType?: string) {\r\n\t\tlet robotImgSource = Images.IMG_ROBOT_ORIGINAL;\r\n\t\tswitch (robotType) {\r\n\t\t\tcase \"robot\":\r\n\t\t\t\trobotImgSource = Images.IMG_ROBOT_DEFAULT;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"robot1\":\r\n\t\t\t\trobotImgSource = Images.IMG_ROBOT1;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"tank\":\r\n\t\t\t\trobotImgSource = Images.IMG_TANK;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"spaceship\":\r\n\t\t\t\trobotImgSource = Images.IMG_SPACESHIP;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \"robot2\":\r\n\t\t\t\trobotImgSource = Images.IMG_ROBOT_2;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\treturn Promise.all([loadImage(robotImgSource), loadImage(Images.IMG_CHARGER), loadImage(Images.IMG_GO_TO_PIN)]);\r\n\t}\r\n\r\n\tprivate drawFloorAndWalls(ctx: ExtendedContext2D, image: any) {\r\n\t\tlet maxtop = 0,\r\n\t\t\tmaxleft = 0,\r\n\t\t\tminleft = image.dimensions.width,\r\n\t\t\tmintop = image.dimensions.height;\r\n\r\n\t\tif (image.pixels.floor && image.pixels.floor.length > 0) {\r\n\t\t\tif (typeof image.pixels.floor[0] === \"number\") {\r\n\t\t\t\tminleft = image.pixels.floor[0] % image.dimensions.width;\r\n\t\t\t\tmintop = image.dimensions.height - 1 - Math.floor(image.pixels.floor[0] / image.dimensions.width);\r\n\t\t\t}\r\n\t\t\t[\"floor\", \"obstacle\"].forEach((key) => {\r\n\t\t\t\tif (!image.pixels[key]) return;\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\timage.pixels[key].forEach((px: any) => {\r\n\t\t\t\t\tconst x = this.getX(image.dimensions, px);\r\n\t\t\t\t\tconst y = this.getY(image.dimensions, px);\r\n\t\t\t\t\tctx.fillStyle = key === \"obstacle\" ? (this.colors.newmap ? ORG_COLORS[4] : this.colors.obstacle) : this.colors.newmap ? ORG_COLORS[5] : this.colors.floor;\r\n\t\t\t\t\tctx.rect(x, y, VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\t\t\t\tmaxtop = Math.max(maxtop, y);\r\n\t\t\t\t\tmaxleft = Math.max(maxleft, x);\r\n\t\t\t\t\tminleft = Math.min(minleft, x);\r\n\t\t\t\t\tmintop = Math.min(mintop, y);\r\n\t\t\t\t});\r\n\t\t\t\tctx.fill();\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn { minleft, mintop, maxleft, maxtop };\r\n\t}\r\n\r\n\tprivate drawSegments(ctx: ExtendedContext2D, image: any, currentlyCleanedBlocks: number[]) {\r\n\t\tconst segmentsData: Record = {};\r\n\t\tif (image.pixels.segments && this.colors.newmap) {\r\n\t\t\timage.pixels.segments.forEach((px: any) => {\r\n\t\t\t\tconst segnum = px >> 21;\r\n\t\t\t\tconst pixelIndex = px & 0x1fffff;\r\n\t\t\t\tif (segnum >= MAX_BLOCK_NUM) return;\r\n\t\t\t\tconst x = this.getX(image.dimensions, pixelIndex);\r\n\t\t\t\tconst y = this.getY(image.dimensions, pixelIndex);\r\n\t\t\t\tif (!segmentsData[segnum]) segmentsData[segnum] = { points: [], minX: x, maxX: x, minY: y, maxY: y };\r\n\t\t\t\tconst segment = segmentsData[segnum];\r\n\t\t\t\tsegment.points.push({ x, y });\r\n\t\t\t\tsegment.minX = Math.min(segment.minX, x);\r\n\t\t\t\tsegment.maxX = Math.max(segment.maxX, x);\r\n\t\t\t\tsegment.minY = Math.min(segment.minY, y);\r\n\t\t\t\tsegment.maxY = Math.max(segment.maxY, y);\r\n\t\t\t});\r\n\r\n\t\t\tconst segmentNums = Object.keys(segmentsData).map(Number);\r\n\t\t\tconst maxId = segmentNums.length ? Math.max(...segmentNums) : 0;\r\n\t\t\tconst matrixSize = MAX_BLOCK_NUM;\r\n\t\t\tconst adjacencyMatrix = this.buildAdjacencyMatrix(image.pixels.segments, image.dimensions.width, image.dimensions.height, maxId);\r\n\t\t\tconst pointsCount = new Array(matrixSize).fill(0);\r\n\t\t\tfor (const segStr of Object.keys(segmentsData)) {\r\n\t\t\t\tconst seg = Number(segStr);\r\n\t\t\t\tif (seg >= 0 && seg < matrixSize) pointsCount[seg] = segmentsData[seg].points.length;\r\n\t\t\t}\r\n\t\t\tconst neighborInfo = new Array(matrixSize * matrixSize).fill(0);\r\n\t\t\tfor (let i = 0; i < matrixSize; i++) {\r\n\t\t\t\tfor (let j = 0; j < matrixSize; j++) {\r\n\t\t\t\t\tif (adjacencyMatrix[i]?.[j] === 1) neighborInfo[i * matrixSize + j] = 1;\r\n\t\t\t\t}\r\n\t\t\t\tif (pointsCount[i] > 0) neighborInfo[i * matrixSize + i] = 1;\r\n\t\t\t}\r\n\t\t\tconst coloring = assignRoborockRoomColorsToHex({ maxBlockNum: matrixSize, neighborInfo, pointsCount }, { oneBased: true });\r\n\r\n\t\t\tObject.keys(segmentsData).forEach((segStr) => {\r\n\t\t\t\tconst segnum = Number(segStr);\r\n\t\t\t\tif (segnum < 0 || segnum >= matrixSize) return;\r\n\t\t\t\tconst isCurrentlyCleaned = currentlyCleanedBlocks?.includes(segnum);\r\n\t\t\t\tlet fillColor = coloring.colorHex?.[segnum] || \"#CCCCCC\";\r\n\t\t\t\tif (isCurrentlyCleaned) fillColor = segnum >= 0 && segnum < ORG_COLORS.length ? ORG_COLORS[segnum] : \"#AA0000\";\r\n\t\t\t\tctx.fillStyle = fillColor;\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tsegmentsData[segnum].points.forEach((p: any) => {\r\n\t\t\t\t\tctx.rect(p.x, p.y, VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\t\t\t});\r\n\t\t\t\tctx.fill();\r\n\t\t\t});\r\n\t\t} else if (image.pixels.segments) {\r\n\t\t\tlet segnum: number, lastcolor: number | undefined;\r\n\t\t\tctx.beginPath();\r\n\t\t\timage.pixels.segments.forEach((px: any) => {\r\n\t\t\t\tsegnum = px >> 21;\r\n\t\t\t\tif (currentlyCleanedBlocks?.includes(segnum)) {\r\n\t\t\t\t\tif (segnum !== lastcolor) {\r\n\t\t\t\t\t\tctx.fill();\r\n\t\t\t\t\t\tctx.beginPath();\r\n\t\t\t\t\t\tctx.fillStyle = segnum >= 0 && segnum < ORG_COLORS.length ? ORG_COLORS[segnum] : \"#CCCCCC\";\r\n\t\t\t\t\t\tlastcolor = segnum;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpx = px & 0xfffff;\r\n\t\t\t\t\tctx.rect(this.getX(image.dimensions, px), this.getY(image.dimensions, px), VISUAL_BLOCK_SIZE, VISUAL_BLOCK_SIZE);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tctx.fill();\r\n\t\t}\r\n\t\treturn segmentsData;\r\n\t}\r\n\r\n\tprivate getCleanMapBase64(canvas: Canvas) {\r\n\t\tconst cleanCanvas = createCanvas(canvas.width, canvas.height);\r\n\t\tconst ctx = cleanCanvas.getContext(\"2d\") as unknown as ExtendedContext2D;\r\n\t\tctx.drawImage(canvas, 0, 0);\r\n\t\treturn cleanCanvas.toDataURL();\r\n\t}\r\n\r\n\tprivate drawCarpet(ctx: ExtendedContext2D, carpetMap: any, image: any) {\r\n\t\tif (carpetMap && image.dimensions.width > 0) {\r\n\t\t\tctx.imageSmoothingEnabled = false;\r\n\t\t\tif (\"antialias\" in ctx) ctx.antialias = \"none\";\r\n\r\n\t\t\tconst carpetSprite = this.createCarpetSprite();\r\n\r\n\t\t\tcarpetMap.forEach((px: any) => {\r\n\t\t\t\tconst x_pos = this.getX(image.dimensions, px);\r\n\t\t\t\tconst y_pos = this.getY(image.dimensions, px);\r\n\t\t\t\tctx.drawImage(carpetSprite, x_pos, y_pos);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawPaths(ctx: ExtendedContext2D, mapdata: any) {\r\n\t\tconst robotToScaledPixel = (robotCoord: [number, number], img: any): PathPoint => {\r\n\t\t\treturn {\r\n\t\t\t\tx: this.robotXtoCanvasX(img, robotCoord[0] / 50),\r\n\t\t\t\ty: this.robotYtoCanvasY(img, robotCoord[1] / 50),\r\n\t\t\t};\r\n\t\t};\r\n\r\n\t\tconst pathSegments: PathResult = (mapdata.PATH?.points && mapdata.MOP_PATH)\r\n\t\t\t? processPaths(mapdata.PATH.points, mapdata.MOP_PATH, robotToScaledPixel, VISUAL_BLOCK_SIZE, mapdata.IMAGE)\r\n\t\t\t: {\r\n\t\t\t\tmainPath: [[]],\r\n\t\t\t\tbackwashPath: [[]],\r\n\t\t\t\tpureCleanPath: [[]],\r\n\t\t\t\tmopPath: [[]],\r\n\t\t\t\tmainPathD: \"\",\r\n\t\t\t\tbackwashPathD: \"\",\r\n\t\t\t\tpureCleanPathD: \"\",\r\n\t\t\t\tmopPathD: \"\",\r\n\t\t\t};\r\n\r\n\t\tconst lwMain = Math.max(1, VISUAL_BLOCK_SIZE / 2);\r\n\r\n\t\tconst tempCanvas = createCanvas(ctx.canvas.width, ctx.canvas.height);\r\n\t\tconst tempCtx = tempCanvas.getContext(\"2d\");\r\n\r\n\t\tthis.drawPathSegments(ctx, tempCtx, pathSegments.mopPath, \"rgba(255, 255, 255, 1)\", 6.5 * VISUAL_BLOCK_SIZE, 0.18);\r\n\t\tthis.drawPathSegments(ctx, tempCtx, pathSegments.mainPath, LEGACY_COLORS.path, lwMain, 1.0);\r\n\t}\r\n\r\n\tprivate drawActiveZones(ctx: ExtendedContext2D, zones: any, image: any) {\r\n\t\tif (zones?.[0]) {\r\n\t\t\tzones.forEach((coord: any) => {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(image, coord[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(image, coord[1] / 50);\r\n\t\t\t\tconst w = this.robotXtoCanvasX(image, coord[2] / 50) - x;\r\n\t\t\t\tconst h = this.robotYtoCanvasY(image, coord[3] / 50) - y;\r\n\t\t\t\tctx.fillStyle = \"rgba(46,139,87,0.1)\";\r\n\t\t\t\tctx.fillRect(x, y, w, h);\r\n\t\t\t\tctx.strokeStyle = \"#2e8b57\";\r\n\t\t\t\tctx.lineWidth = 4;\r\n\t\t\t\tctx.strokeRect(x, y, w, h);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawPredictedPath(ctx: ExtendedContext2D, predictedPath: any, image: any) {\r\n\t\tif (predictedPath?.points?.length) {\r\n\t\t\tctx.lineWidth = (3 * VISUAL_BLOCK_SIZE) / 2;\r\n\t\t\tctx.strokeStyle = \"rgba(255, 255, 255, 1)\";\r\n\t\t\tctx.setLineDash([3 * VISUAL_BLOCK_SIZE, 3 * VISUAL_BLOCK_SIZE]);\r\n\t\t\tctx.lineCap = \"round\";\r\n\t\t\tctx.beginPath();\r\n\t\t\tlet lastX = -1,\r\n\t\t\t\tlastY = -1;\r\n\t\t\tpredictedPath.points.forEach((coord: any, index: number) => {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(image, coord[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(image, coord[1] / 50);\r\n\t\t\t\tif (index === 0) {\r\n\t\t\t\t\tctx.fillStyle = \"rgba(255, 255, 255, 1)\";\r\n\t\t\t\t\tctx.fillRect(x, y, (1 * VISUAL_BLOCK_SIZE) / 2, (1 * VISUAL_BLOCK_SIZE) / 2);\r\n\t\t\t\t\tctx.moveTo(x, y);\r\n\t\t\t\t} else if (x !== lastX || y !== lastY) {\r\n\t\t\t\t\tctx.lineTo(x, y);\r\n\t\t\t\t}\r\n\t\t\t\tlastX = x;\r\n\t\t\t\tlastY = y;\r\n\t\t\t});\r\n\t\t\tctx.stroke();\r\n\t\t\tctx.setLineDash([]);\r\n\t\t\tctx.lineCap = \"butt\";\r\n\t\t}\r\n\t}\r\n\r\n\tprivate async drawObstacles(ctx: ExtendedContext2D, obstacles: any, image: any) {\r\n\t\tconst OBSTACLE_MAPPING: Record = {\r\n\t\t\t\"-99\": \"99\",\r\n\t\t\t0: \"0\",\r\n\t\t\t1: \"1\",\r\n\t\t\t2: \"2\",\r\n\t\t\t3: \"3\",\r\n\t\t\t4: \"3\",\r\n\t\t\t5: \"5_cn\",\r\n\t\t\t9: \"9\",\r\n\t\t\t10: \"10\",\r\n\t\t\t18: \"18\",\r\n\t\t\t25: \"25\",\r\n\t\t\t26: \"26\",\r\n\t\t\t27: \"26\",\r\n\t\t\t34: \"10\",\r\n\t\t\t42: \"18\",\r\n\t\t\t48: \"48\",\r\n\t\t\t49: \"49\",\r\n\t\t\t50: \"50\",\r\n\t\t\t51: \"51\",\r\n\t\t\t54: \"54\",\r\n\t\t\t65: \"65\",\r\n\t\t\t67: \"67\",\r\n\t\t\t69: \"69\",\r\n\t\t\t70: \"70\",\r\n\t\t\t99: \"99\",\r\n\t\t};\r\n\r\n\t\tif (obstacles) {\r\n\t\t\tfor (const obstacle of obstacles) {\r\n\t\t\t\tconst type = obstacle[2];\r\n\t\t\t\tconst x = this.robotXtoCanvasX(image, obstacle[0] / 50) + VISUAL_BLOCK_SIZE / 2;\r\n\t\t\t\tconst y = this.robotYtoCanvasY(image, obstacle[1] / 50) + VISUAL_BLOCK_SIZE / 2;\r\n\r\n\t\t\t\tconst suffix = OBSTACLE_MAPPING[type] || \"18\";\r\n\t\t\t\tconst imagePath = path.join(__dirname, `../../www/images/projects_comroborocktanos_resources_obstacle_new_p${suffix}.png`);\r\n\r\n\t\t\t\tif (!fs.existsSync(imagePath)) {\r\n\t\t\t\t\tthis.adapter.log.warn(`[MapCreator] Could not find obstacle image for type ${type} (mapped to ${suffix}). Path: ${imagePath}`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Draw background circle (Grey with white border)\r\n\t\t\t\tconst radius = VISUAL_BLOCK_SIZE * 3.5; // Reduced radius\r\n\t\t\t\tctx.beginPath();\r\n\t\t\t\tctx.arc(x, y, radius, 0, 2 * Math.PI);\r\n\t\t\t\tctx.fillStyle = \"rgba(100, 100, 100, 0.2)\"; // Grey, more transparent\r\n\t\t\t\tctx.fill();\r\n\t\t\t\tctx.lineWidth = 0.5; // Thinner border\r\n\t\t\t\tctx.strokeStyle = \"white\";\r\n\t\t\t\tctx.stroke();\r\n\r\n\t\t\t\tif (fs.existsSync(imagePath)) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tconst obstacleImg = await loadImage(imagePath);\r\n\t\t\t\t\t\tconst size = VISUAL_BLOCK_SIZE * 5; // Reduced icon size\r\n\t\t\t\t\t\tctx.drawImage(obstacleImg, x - size / 2, y - size / 2, size, size);\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tthis.adapter.log.error(`[MapCreator] Failed to load image ${imagePath}: ${e}`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawRobotChargerTarget(ctx: ExtendedContext2D, mapdata: any, imgRobot: Image, imgCharger: Image, imgGoToPin: Image) {\r\n\t\tif (mapdata.CHARGER_LOCATION) {\r\n\t\t\tconst pos = mapdata.CHARGER_LOCATION.position;\r\n\t\t\tif (pos?.[0] && pos?.[1]) {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(mapdata.IMAGE, pos[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(mapdata.IMAGE, pos[1] / 50);\r\n\t\t\t\tconst w = VISUAL_BLOCK_SIZE * 3;\r\n\t\t\t\tconst h = VISUAL_BLOCK_SIZE * 3;\r\n\t\t\t\tctx.drawImage(imgCharger, x - w / 2, y - h / 2, w, h);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mapdata.ROBOT_POSITION) {\r\n\t\t\tconst pos = mapdata.ROBOT_POSITION.position;\r\n\t\t\tconst angle = mapdata.ROBOT_POSITION.angle ?? 0;\r\n\t\t\tconst drawAngle = -angle + 90;\r\n\r\n\t\t\tif (pos?.[0] && pos?.[1]) {\r\n\t\t\t\tconst x = this.robotXtoCanvasX(mapdata.IMAGE, pos[0] / 50);\r\n\t\t\t\tconst y = this.robotYtoCanvasY(mapdata.IMAGE, pos[1] / 50);\r\n\t\t\t\tconst robotSize = VISUAL_BLOCK_SIZE * 5;\r\n\r\n\t\t\t\tctx.save();\r\n\t\t\t\tctx.translate(x, y);\r\n\t\t\t\tctx.rotate((drawAngle * Math.PI) / 180);\r\n\t\t\t\tctx.drawImage(imgRobot, -robotSize / 2, -robotSize / 2, robotSize, robotSize);\r\n\t\t\t\tctx.restore();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (mapdata.GOTO_TARGET?.[0] && mapdata.GOTO_TARGET?.[1]) {\r\n\t\t\tconst pinW = VISUAL_BLOCK_SIZE * 3;\r\n\t\t\tconst pinH = (pinW / 29) * 24;\r\n\t\t\tctx.drawImage(\r\n\t\t\t\timgGoToPin,\r\n\t\t\t\tthis.robotXtoCanvasX(mapdata.IMAGE, mapdata.GOTO_TARGET[0] / 50) - pinW / 2,\r\n\t\t\t\tthis.robotYtoCanvasY(mapdata.IMAGE, mapdata.GOTO_TARGET[1] / 50) - (pinH + VISUAL_BLOCK_SIZE / 2),\r\n\t\t\t\tpinW,\r\n\t\t\t\tpinH\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate drawRoomNames(ctx: ExtendedContext2D, segmentsData: any, mappedRooms: any) {\r\n\t\tif (segmentsData && mappedRooms) {\r\n\t\t\tconst roomIDsAll = this.adapter.http_api.getMatchedRoomIDs(false);\r\n\t\t\tObject.keys(segmentsData).forEach((segnumStr) => {\r\n\t\t\t\tconst segnum = parseInt(segnumStr);\r\n\t\t\t\tif (segnum === 0) return;\r\n\t\t\t\tconst mapping = mappedRooms.find(([id]: [string]) => parseInt(id) === segnum);\r\n\t\t\t\tlet roomName = \"\";\r\n\t\t\t\tif (mapping) {\r\n\t\t\t\t\tconst roomID = mapping[1];\r\n\t\t\t\t\tconst roomObj = roomIDsAll.find((r) => String(r.id) === String(roomID));\r\n\t\t\t\t\troomName = roomObj?.name || \"\";\r\n\t\t\t\t}\r\n\t\t\t\tif (roomName) {\r\n\t\t\t\t\tconst segment = segmentsData[segnum];\r\n\t\t\t\t\tconst centerX = segment.minX + (segment.maxX - segment.minX) / 2;\r\n\t\t\t\t\tconst centerY = segment.minY + (segment.maxY - segment.minY) / 2;\r\n\t\t\t\t\tctx.font = `bold ${VISUAL_BLOCK_SIZE * 6}px Arial`;\r\n\t\t\t\t\tctx.textAlign = \"center\";\r\n\t\t\t\t\tctx.textBaseline = \"middle\";\r\n\t\t\t\t\tctx.lineWidth = 1;\r\n\t\t\t\t\tctx.strokeStyle = \"white\";\r\n\t\t\t\t\tctx.strokeText(roomName, centerX, centerY);\r\n\t\t\t\t\tctx.fillStyle = \"black\";\r\n\t\t\t\t\tctx.fillText(roomName, centerX, centerY);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate cropMap(canvas: Canvas, ctx: ExtendedContext2D, bounds: { minleft: number; mintop: number; maxleft: number; maxtop: number }) {\r\n\t\tconst { minleft, mintop, maxleft, maxtop } = bounds;\r\n\t\tconst cropW = maxleft - minleft + 2 * OFFSET;\r\n\t\tconst cropH = maxtop - mintop + 2 * OFFSET;\r\n\r\n\t\tif (cropW <= 0 || cropH <= 0 || !isFinite(cropW) || !isFinite(cropH)) {\r\n\t\t\treturn canvas.toDataURL();\r\n\t\t}\r\n\r\n\t\tconst sx = Math.max(0, minleft - OFFSET);\r\n\t\tconst sy = Math.max(0, mintop - OFFSET);\r\n\t\tconst maxWidth = canvas.width - sx;\r\n\t\tconst maxHeight = canvas.height - sy;\r\n\t\tconst finalCropW = Math.min(cropW, maxWidth);\r\n\t\tconst finalCropH = Math.min(cropH, maxHeight);\r\n\r\n\t\tconst canvasTrimmedFull = createCanvas(finalCropW, finalCropH);\r\n\t\tconst ctxTrimmedFull = canvasTrimmedFull.getContext(\"2d\");\r\n\t\tconst trimmedDataFull = ctx.getImageData(sx, sy, finalCropW, finalCropH);\r\n\t\tctxTrimmedFull.putImageData(trimmedDataFull, 0, 0);\r\n\r\n\t\treturn canvasTrimmedFull.toDataURL();\r\n\t}\r\n\r\n\tprivate drawRestrictedAreas(ctx: ExtendedContext2D, mapdata: any) {\r\n\t\tconst drawRectArea = (zones: number[][], fill: string, stroke: string) => {\r\n\t\t\tif (!zones) return;\r\n\t\t\tzones.forEach((zone) => {\r\n\t\t\t\tconst x1 = this.robotXtoCanvasX(mapdata.IMAGE, Math.min(zone[0], zone[2], zone[4], zone[6]) / 50);\r\n\t\t\t\tconst y1 = this.robotYtoCanvasY(mapdata.IMAGE, Math.max(zone[1], zone[3], zone[5], zone[7]) / 50);\r\n\t\t\t\tconst x2 = this.robotXtoCanvasX(mapdata.IMAGE, Math.max(zone[0], zone[2], zone[4], zone[6]) / 50);\r\n\t\t\t\tconst y2 = this.robotYtoCanvasY(mapdata.IMAGE, Math.min(zone[1], zone[3], zone[5], zone[7]) / 50);\r\n\t\t\t\tconst minX = Math.min(x1, x2);\r\n\t\t\t\tconst minY = Math.min(y1, y2);\r\n\t\t\t\tconst maxX = Math.max(x1, x2);\r\n\t\t\t\tconst maxY = Math.max(y1, y2);\r\n\t\t\t\tctx.fillStyle = fill;\r\n\t\t\t\tctx.fillRect(minX, minY, maxX - minX, maxY - minY);\r\n\t\t\t\tctx.strokeStyle = stroke;\r\n\t\t\t\tctx.lineWidth = (1 * VISUAL_BLOCK_SIZE) / 2;\r\n\t\t\t\tctx.strokeRect(minX, minY, maxX - minX, maxY - minY);\r\n\t\t\t});\r\n\t\t};\r\n\t\tdrawRectArea(mapdata.FORBIDDEN_ZONES, \"rgba(255, 0, 0, 0.5)\", \"rgba(255, 0, 0, 1)\");\r\n\t\tdrawRectArea(mapdata.NO_MOP_ZONE, \"rgba(0, 0, 255, 0.5)\", \"rgba(0, 0, 255, 1)\");\r\n\t\tif (mapdata.VIRTUAL_WALLS) {\r\n\t\t\tctx.strokeStyle = \"rgba(255, 0, 0, 1)\";\r\n\t\t\tctx.lineWidth = 1 * VISUAL_BLOCK_SIZE;\r\n\t\t\tctx.beginPath();\r\n\t\t\tmapdata.VIRTUAL_WALLS.forEach((wall: any) => {\r\n\t\t\t\tctx.moveTo(this.robotXtoCanvasX(mapdata.IMAGE, wall[0] / 50), this.robotYtoCanvasY(mapdata.IMAGE, wall[1] / 50));\r\n\t\t\t\tctx.lineTo(this.robotXtoCanvasX(mapdata.IMAGE, wall[2] / 50), this.robotYtoCanvasY(mapdata.IMAGE, wall[3] / 50));\r\n\t\t\t});\r\n\t\t\tctx.stroke();\r\n\t\t}\r\n\t}\r\n}"]} \ No newline at end of file diff --git a/build/tsconfig.tsbuildinfo b/build/tsconfig.tsbuildinfo index 81384ed38a..0976f20ed6 100644 --- a/build/tsconfig.tsbuildinfo +++ b/build/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.es2024.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2024.collection.d.ts","../node_modules/typescript/lib/lib.es2024.object.d.ts","../node_modules/typescript/lib/lib.es2024.promise.d.ts","../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2024.string.d.ts","../node_modules/typescript/lib/lib.esnext.array.d.ts","../node_modules/typescript/lib/lib.esnext.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.promise.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../node_modules/typescript/lib/lib.esnext.float16.d.ts","../node_modules/typescript/lib/lib.esnext.error.d.ts","../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/@iobroker/adapter-core/build/esm/exitcodes.d.ts","../node_modules/@iobroker/types/build/utils.d.ts","../node_modules/@iobroker/types/build/objects.d.ts","../node_modules/@iobroker/types/build/config.d.ts","../node_modules/@iobroker/types/build/shared.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/blob.d.ts","../node_modules/@types/node/web-globals/console.d.ts","../node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/encoding.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/utility.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client-stats.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/h2c-client.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-call-history.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/snapshot-agent.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cache-interceptor.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/web-globals/importmeta.d.ts","../node_modules/@types/node/web-globals/messaging.d.ts","../node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/@types/node/web-globals/performance.d.ts","../node_modules/@types/node/web-globals/storage.d.ts","../node_modules/@types/node/web-globals/streams.d.ts","../node_modules/@types/node/web-globals/timers.d.ts","../node_modules/@types/node/web-globals/url.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/inspector/promises.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/path/posix.d.ts","../node_modules/@types/node/path/win32.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/quic.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/test/reporters.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@alcalzone/pak/node_modules/execa/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/package-manager.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/npm/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-berry/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-classic/index.d.ts","../node_modules/@alcalzone/pak/build/lib/pak.d.ts","../node_modules/@alcalzone/pak/build/index.d.ts","../node_modules/@iobroker/types/build/types.d.ts","../node_modules/@iobroker/types/public.d.ts","../node_modules/@iobroker/types/index.d.ts","../node_modules/@iobroker/adapter-core/build/esm/controllertools.d.ts","../node_modules/@iobroker/adapter-core/build/esm/utils.d.ts","../node_modules/@iobroker/adapter-core/build/esm/i18n.d.ts","../node_modules/@iobroker/adapter-core/build/esm/tokenrefresher.d.ts","../node_modules/@iobroker/adapter-core/build/esm/index.d.ts","../node_modules/go2rtc-static/dist/index.d.ts","../node_modules/jszip/index.d.ts","../src/lib/roborock_package_helper.ts","../src/lib/features/features.enum.ts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-ca.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-cn.d.cts","../node_modules/zod/v4/locales/zh-tw.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/index.d.cts","../src/lib/features/basedevicefeatures.ts","../node_modules/@napi-rs/canvas/index.d.ts","../src/lib/roomcoloring.ts","../src/lib/images.ts","../src/lib/pathprocessor.ts","../src/lib/mapcreator.ts","../src/lib/mapdataparser.ts","../node_modules/eventemitter3/index.d.ts","../node_modules/p-queue/dist/queue.d.ts","../node_modules/p-queue/dist/options.d.ts","../node_modules/p-queue/dist/priority-queue.d.ts","../node_modules/p-timeout/index.d.ts","../node_modules/p-queue/dist/index.d.ts","../node_modules/binary-parser/dist/binary_parser.d.ts","../node_modules/crc-32/types/index.d.ts","../node_modules/@types/node-forge/index.d.ts","../src/lib/cryptoengine.ts","../src/lib/messageparser.ts","../src/lib/requestshandler.ts","../node_modules/axios/index.d.ts","../src/lib/apitypes.ts","../src/lib/httpapi.ts","../node_modules/ping/types/parser/base.d.ts","../node_modules/ping/types/ping-sys.d.ts","../node_modules/ping/types/ping-promise.d.ts","../node_modules/ping/types/index.d.ts","../src/lib/localapi.ts","../node_modules/mqtt-packet/types/index.d.ts","../node_modules/@types/readable-stream/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/mqtt/build/lib/shared.d.ts","../node_modules/mqtt/build/lib/store.d.ts","../node_modules/mqtt/build/lib/default-message-id-provider.d.ts","../node_modules/mqtt/build/lib/typedemitter.d.ts","../node_modules/worker-factory/build/es2019/helpers/is-supporting-transferables.d.ts","../node_modules/worker-factory/build/es2019/types/destroy-worker-function.d.ts","../node_modules/worker-factory/build/es2019/types/message.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-with-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-without-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver.d.ts","../node_modules/worker-factory/build/es2019/types/typed-array.d.ts","../node_modules/worker-factory/build/es2019/types/value-map.d.ts","../node_modules/worker-factory/build/es2019/types/value.d.ts","../node_modules/worker-factory/build/es2019/types/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/types/worker-implementation.d.ts","../node_modules/worker-factory/build/es2019/types/worker-message.d.ts","../node_modules/worker-factory/build/es2019/types/index.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-event.d.ts","../node_modules/worker-factory/build/es2019/interfaces/default-worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-response.d.ts","../node_modules/worker-factory/build/es2019/interfaces/notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/receiver.d.ts","../node_modules/worker-factory/build/es2019/interfaces/request.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-array.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-map.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-error-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-result-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/index.d.ts","../node_modules/worker-factory/build/es2019/module.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-actions.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/default-broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/worker-event.d.ts","../node_modules/broker-factory/build/es2019/interfaces/index.d.ts","../node_modules/broker-factory/build/es2019/types/broker-implementation.d.ts","../node_modules/broker-factory/build/es2019/types/index.d.ts","../node_modules/broker-factory/build/es2019/module.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/worker-timers-broker-definition.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/index.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-loader.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-wrapper.d.ts","../node_modules/worker-timers-broker/build/es2019/types/index.d.ts","../node_modules/worker-timers-broker/build/es2019/module.d.ts","../node_modules/worker-timers/build/es2019/module.d.ts","../node_modules/mqtt/build/lib/get-timer.d.ts","../node_modules/mqtt/build/lib/keepalivemanager.d.ts","../node_modules/mqtt/build/lib/client.d.ts","../node_modules/mqtt/build/lib/unique-message-id-provider.d.ts","../node_modules/mqtt/build/lib/connect/index.d.ts","../node_modules/mqtt/build/lib/handlers/ack.d.ts","../node_modules/mqtt/build/mqtt.d.ts","../node_modules/mqtt/build/index.d.ts","../src/lib/mqttapi.ts","../src/lib/sockethandler.ts","../src/lib/features/vacuum/vacuumconstants.ts","../src/lib/producthelper.ts","../src/lib/features/vacuum/basevacuumfeatures.ts","../src/lib/features/fallbackfeatures.ts","../src/lib/features/vacuum/a08_features.ts","../src/lib/features/vacuum/a10_features.ts","../src/lib/features/vacuum/a15_features.ts","../src/lib/features/vacuum/a19_features.ts","../src/lib/features/vacuum/a27_features.ts","../src/lib/features/vacuum/a38_features.ts","../src/lib/features/vacuum/a40_features.ts","../src/lib/features/vacuum/a51_features.ts","../src/lib/features/vacuum/a62_features.ts","../src/lib/features/vacuum/a65_features.ts","../src/lib/features/vacuum/a70_features.ts","../src/lib/features/vacuum/a72_features.ts","../src/lib/features/vacuum/a73_features.ts","../src/lib/features/vacuum/a75_features.ts","../src/lib/features/vacuum/s4_features.ts","../src/lib/features/vacuum/s5e_features.ts","../src/lib/features/vacuum/s6_features.ts","../src/lib/features/vacuum/a87_features.ts","../src/lib/features/vacuum/a101_features.ts","../src/lib/features/vacuum/a97_features.ts","../src/lib/features/vacuum/a104_features.ts","../src/lib/features/vacuum/a135_features.ts","../src/lib/features/vacuum/a117_features.ts","../src/lib/features/vacuum/a21_features.ts","../src/lib/features/vacuum/a144_features.ts","../src/lib/features/vacuum/a147_features.ts","../src/lib/features/vacuum/a187_features.ts","../src/lib/features/vacuum/a156_features.ts","../src/lib/features/vacuum/a168_features.ts","../src/lib/features/vacuum/a159_features.ts","../src/lib/features/vacuum/a179_features.ts","../src/lib/features/vacuum/index.ts","../src/lib/devicemanager.ts","../src/lib/buildinfo.ts","../src/main.ts","../src/types.d.ts","../node_modules/@types/chai/index.d.ts","../src/lib/cryptoengine.test.ts","../src/lib/mapdataparser.test.ts","../src/lib/messageparser.test.ts","../src/lib/roomcoloring.test.ts","../src/lib/types.d.ts","../node_modules/@types/sinonjs__fake-timers/index.d.ts","../node_modules/@types/sinon/index.d.ts","../src/lib/features/vacuum/basevacuumfeatures.test.ts","../src/lib/mock/mockadapter.ts","../src/lib/mock/mockdata.ts","../src/lib/mock/mockrobot.ts","../src/lib/mock/commands.test.ts","../src/lib/mock/errorhandling.test.ts","../src/lib/mock/features.test.ts","../src/lib/mock/maps.test.ts","../src/lib/mock/mockrobot.test.ts","../src/lib/mock/protocol.test.ts","../src/lib/mock/queue.test.ts","../src/lib/mock/schedules.test.ts","../src/lib/mock/statemachine.test.ts","../src/lib/mock/typecheck.test.ts","../node_modules/@types/mocha/index.d.ts"],"fileIdsList":[[90,153,158,159,161,165,168,170,171,172,174,184,208,211,215,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,210,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,212,213,214,316,428],[90,153,154,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[83,90,153,158,159,161,165,168,170,171,172,174,184,208,219,220,221,222,223,316,428],[84,90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[84,85,86,90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,216,316,428],[87,90,153,158,159,161,165,168,170,171,172,174,184,208,218,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,217,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,189,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,428],[90,150,151,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,208,316,428],[90,153,154,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,153,154,155,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,153,157,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,198,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,160,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,162,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,163,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,192,208,316,428],[90,140,153,158,159,161,164,165,167,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,167,168,170,171,172,174,184,189,198,201,208,316,428],[90,153,158,159,161,165,167,168,169,170,171,172,174,184,189,198,201,208,316,428],[88,89,90,91,92,93,94,95,96,97,98,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,201,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,179,184,208,316,428],[90,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,181,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,182,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,185,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,186,202,205,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,191,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,190,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,202,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,193,208,316,428],[90,150,153,158,159,161,165,168,170,171,172,174,184,189,195,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,194,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,199,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,200,208,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,182,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,204,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,205,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,206,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,140,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,179,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,197,208,316,428],[90,140,153,158,159,161,164,165,166,168,170,171,172,174,179,184,189,192,201,204,205,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,435],[90,153,158,159,161,164,165,167,168,169,170,171,172,174,184,189,198,201,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,365,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,364,365,366,367,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,370,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,369,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,385,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,208,316,328,329,330,331,332,333,334,379,380,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,378,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,379,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,328,329,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,328,329,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,333,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,332,333,379,380,381,382,383,384,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,308,309,310,311,312,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,310,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,324,325,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,326,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,323,326,428],[90,106,109,112,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,105,106,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,198,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,105,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,100,101,102,104,108,153,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,117,125,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,134,135,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,104,109,153,158,159,161,165,168,170,171,172,174,184,192,201,208,209,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,100,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,104,105,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,130,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,117,118,119,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,108,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,103,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,113,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,113,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,112,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,101,105,109,117,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,109,134,153,158,159,161,165,168,170,171,172,174,184,192,207,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,352,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,350,351,352,353,354,355,356,357,358,359,360,361,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,347,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,335,347,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,336,337,338,339,340,341,342,343,344,345,346,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,338,339,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,341,342,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,340,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,372,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,373,376,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,374,375,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,373,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,377,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,299,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,294,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,285,291,292,293,294,295,296,297,298,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,292,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,293,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,233,234,235,286,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,232,233,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,231,232,233,234,235,236,237,285,286,287,288,289,290,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,231,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,286,289,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,390,391,392,424,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,436],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,301,316,389,390,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,320,321,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,302,303,304,305,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,307,316,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,300,316,317,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,438,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,429,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,439],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,319,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,321,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,306,307,313,316,318,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,226,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,303,316,428,429],[90,153,154,158,159,161,165,168,170,171,172,174,184,208,224,225,227,228,301,316,319,322,327,387,388,425,426,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d56c0e4c924ce29ca57641d45823206c6b3d3c7846aecb32b3ae6cdd6ac27bf","impliedFormat":99},{"version":"e12a40ba307d38757b6f0637958d945de7442dbd0986fd3e4f7a61cc65b3bc61","impliedFormat":1},{"version":"a8ea473ecfe448bf0962c10195cda747b8a211894dbc29d87693137a8ba76b45","affectsGlobalScope":true,"impliedFormat":1},{"version":"af8f9eee362acd79cf4cb6ee04928614ae8ce683293a1f52db2e010e09813ca8","impliedFormat":1},{"version":"892c6b419a485b3297fdb93546e8a1efaef193f0530d45b20c521ce5de709e72","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"836b1d038d400811f265b04c758e1ef0fb64d915499a4ef590acc54761875075","affectsGlobalScope":true,"impliedFormat":1},{"version":"961cf7535b9c521cd634055b1b6ac49b94d055f0b573ce7fdc4cfaddab080b7c","impliedFormat":1},{"version":"806a8c6daae69e5695e7200d9eca6bc1e4298f38d90edda3ce67a794da31a24f","impliedFormat":1},{"version":"ac86245c2f31335bfd52cbe7fc760f9fc4f165387875869a478a6d9616a95e72","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"718d94d1b710af019cbfaab4a8dc5240503fd5b5938905262d45bdef79318378","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"2ca2bca6845a7234eff5c3d192727a068fca72ac565f3c819c6b04ccc83dadc0","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"6c00f77f0335ae0c18bd45a6c7c9c97c9625fb7e5dd6d5936eadf70718bce52e","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"e60efae9fe48a2955f66bf4cbf0f082516185b877daf50d9c5e2a009660a7714","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"cd9189eacf0f9143b8830e9d6769335aa6d902c04195f04145bcbf19e7f26fcb","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"da51964a650a3b8d775267a55e8a590b1eb6bb605cc3f6d10830370d77135557","impliedFormat":1},{"version":"c59ab0fda36f7cdc43ef1102659954735c80c6fb721ecc2bee0019db838d3d85","impliedFormat":1},{"version":"deeaf7b68c688b0a700bb8f3f175683263c8bb3a8d4932fc44d95d56402f4fca","impliedFormat":1},{"version":"4deacd1de0cc7b1ec1d7b97e1910a809b6e4742e9b3f62e70b0f8e5c60667058","impliedFormat":1},{"version":"132aac02cd3d0c950769ea248072647dfe8fbfb4441974fba85165ed700a872f","impliedFormat":1},{"version":"41e1718c5738cd9261acc61439f2156ed3b8a3267de9805e55b3cf7d839f5063","impliedFormat":1},{"version":"4e20f9be439bf149c8f336a7d9efb1dcc785a29d8cbb73efa279f8bf883a7058","impliedFormat":1},{"version":"216d7f8df962491193db3384dbbfbfacba0c6e00b3488e02262b41477e37938f","impliedFormat":1},{"version":"f551846d1f55ed48a545475cdae88a96c4906dfca3d4a7d0d5f890525ff50e16","affectsGlobalScope":true,"impliedFormat":1},{"version":"65e317467fee99daf166f7dc075afee41630be25ee750a2fe12a2e55a400b338","impliedFormat":1},{"version":"20dbfa41a3d60775a1151e8f64f3fc2125bcf8709036c7940883fb81a25c181b","impliedFormat":99},{"version":"4e3bc8765904f6aea80e664e7b9297ee4e429984ffbff4c638337f4179458426","impliedFormat":99},{"version":"745b107f0bf4f023a275ebad8c11284d8ae5a589a9d2b924e256d969ca864eed","impliedFormat":99},{"version":"3076c73202d40cdeb6bed55d310e67aac1a93b8e55e5a8a217580fed5dfebdc0","impliedFormat":99},{"version":"e2622304b712eabade00b70dfc03ee4581d1b1570c208c9aafb060e7adac78ec","impliedFormat":99},{"version":"ad8a18bc463768101a4d30f3117cea1e73381eb0ec12a23b7d61208dc852438e","impliedFormat":1},{"version":"522cb15ff9bef5a65c2f3dbd10dbba9e7ecae4de32f90f5c0b4198132be63ae4","impliedFormat":1},{"version":"8479fb227ff6a33943e5a4227d2775999733790a809a3f6d7a18b2cc729af70d","signature":"e9dbca0921e577b79fd297d8c299d86949d8ab08bca10e37bd0a4cb6b1abcebe"},{"version":"60c1a59abc6c8fffdcd9803214f36373ee53d6cb9e9acedabe227036c8da97de","signature":"bf0b67854361dae40cc55a337248ab28ebfad49654e57caf4764c0d3cdb920d8"},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"d48904eee50b64e6c906aae902322aedbf1a85ea24ceb79959d3b4e69e309ab7","impliedFormat":1},{"version":"1ff91526fcdd634148c655ef86e912a273ce6a0239e2505701561f086678262b","impliedFormat":1},{"version":"2955c932ecc11e23d079a3f15ec2b39ac89c03e4d0e21c3459d3141e1c62eb1b","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"7952419455ca298776db0005b9b5b75571d484d526a29bfbdf041652213bce6f","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"568b463d762d0df07ed10081293715069168ad7cf6308525a3bb93777b127845","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"328947a02b94edefe4de88b5cb96408ff86c07a32911c15ad67f6d61275a114c","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"85021a58f728318a9c83977a8a3a09196dcfc61345e0b8bbbb39422c1594f36b","impliedFormat":1},{"version":"d91805544905a40fbd639ba1b85f65dc13d6996a07034848d634aa9edb63479e","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"4ff0c68ba32a51dec9c9d4f8a491d4bee22c88454ee7fa417a637c4af1eceab1","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"2fbc91ba70096f93f57e22d1f0af22b707dbb3f9f5692cc4f1200861d3b75d88","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"a5c37e47417c9a67ad39480d67521921eec20236a70fc9416bc7789aa44f7eed","signature":"aa22e7085c56b854de71ec9f3566a95da24b594d2e4d4e4ab2591586988203ce"},{"version":"a9b74f5e1715d0d7bc26c2f41e19f27605dc4c7f6e3303c3e8029d40dda5fa63","impliedFormat":1},{"version":"af04cf2a8c6f2a2ca8f032c98310d69bf0a0139980d29b363b65ade0d853168b","signature":"732a75f120c13e0d5d14f48259ac18ab2a94f879d9871f84e2b3d4b8660fa91f"},{"version":"547ff64d06a2d7a60a9529edd75cd8ae6b676a0bb96490207886643839492988","signature":"4ad73857e4f16234efc80829d886d8fafb646f6681729e4ea869dafee50094b0"},{"version":"295dfb856b055146ea1f3318ea19c38ca21629eef54a71a5d35d3085512c0e84","signature":"57dc09407435b60b7b89206b1567a5bb25d682a59c09cbb9c65c569079dda275"},{"version":"a4ef2d07f561e7e5b401d91bf9e53e33bd6759b811477ae5b87139d0811a7cdb","signature":"b720afaa5a92e286a1d5230c5af67e1fd6598219b73497d3eba2bbff4d984e83"},{"version":"d78c2ec58d5e4e86dc662e9f124b3c5f8db6cb3cd64820d357f4cda7cb6cce6b","signature":"971350525207d09b8b25480bedb9997a4da410f0cb8a60a5e9ef4da3a76ec49e"},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"ee8fcb09c02b9731957ae073ade2a78507b981e89c90ec37e7d91e8a4cd88e03","impliedFormat":99},{"version":"9e13456a7d8b7717b16044b1ecbd9e4760d335c5ecaf8967b236f8fa41318cb2","impliedFormat":99},{"version":"0ba90ee789528702e657fdfccfab87166648ce6705481ff56df9e1ad1dc9ef68","impliedFormat":99},{"version":"12a547397ef8c6bef7a46c20677520a43b2b633856408ba255625f7a5b93726f","impliedFormat":99},{"version":"aa294f6435de6f3d544c25eb8ecfbdb02eea0b52440e6c8fa70765dabe0a8f7a","impliedFormat":99},{"version":"2f00058a1c35652a558b39e4e78bae3c7e05dacb279d2002d5076f6dc371231c","impliedFormat":1},{"version":"e1e1e8a8d9b7e290797e25d3d73903f77ab2ded8b18618318d162c1ba2817e19","impliedFormat":1},{"version":"7fadb2778688ebf3fd5b8d04f63d5bf27a43a3e420bc80732d3c6239067d1a4b","impliedFormat":1},{"version":"a83242b7882cbc771e77513ce6752260e35d7e39c0e2ea043121875b48935a1a","signature":"c9eaf52d56c014f4a727c434496fcc4891af97982c2d89e1ef40c4fe259cd990"},{"version":"7b72f7d69e2576a3a1f00b5db3dd957c39488da3b2b80577e16725124df783d9","signature":"6b21d159652a34b4659fd8a920c8691c35860bc35fa302cb529c3d985a6653e4"},{"version":"e3d4e9a24b2c610c59dd9533eac26c4b2ba2a78ec995eeb234a636986f465156","signature":"76593ba3be31edfde36adf1bc33dca2364a2ca4c00d16bd5d5f1ef27fe8d8f02"},{"version":"1c9800fbae1b443d77672e6d3e715df7280479b7c41f08cb790e750f01b50d90","impliedFormat":99},{"version":"b4a7efd03bf5dae9816fa79a9964457c81d2aaa369ee7606402c5b7a9c8b2a3e","signature":"8a0fcce6dab9ddc6b0e309223b3cb2f699d5736669c1f8a65a6e0b7c7de98583"},{"version":"5e7e961796539a5cdc8417f8cd730593487cc2615c5cd5c50f50e8766f5cfa23","signature":"f42a55ae4cbab9f13002c4f8f945e2349462c6d9083ab7bd1792defee9ce317f"},{"version":"34779325c6b34e0c7966c2d1602b15cd6de8d56efb672ed2f8ee4bcb3fea6c25","impliedFormat":1},{"version":"88e980c953e6180527f7e572fbca98cab8458623dbe85868505e0920ec0207fc","impliedFormat":1},{"version":"524cdd6f29e66f9eb568b09db597b94561266d32eb1041aab8af8337efa4d116","impliedFormat":1},{"version":"62c39ca2a3880c7fe75786fb4cd5722731deb48272ac8e16a888fca60a6e3014","impliedFormat":1},{"version":"4d4d05b44285e2fabfd447662ced74ab397c8956b17534bd533e78ca70523a89","signature":"7ada549417c66eb7bfae9c1b2805f19c37348821d7290a08fa4335d43e758d5d"},{"version":"8174710d254034998a325526caffbe2a85182f493491b49a2ff443027e1edc42","impliedFormat":1},{"version":"a6a859ff4b9a8a65e24bb1afd1a56296a88502f35a460c16631ddb4c5d435d81","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"8b56c1d50bc2cc8edac185291ce3ecd2e366d1f1d6718a377b0a008c40140d4a","impliedFormat":1},{"version":"529bbfc5a152cc988e3889eb4cdaef2cc5e300bc30cd61b76f4bd95094170b66","impliedFormat":1},{"version":"fe7a0a744b32b5ece036d9964d9f13bbd49b41f1acb88ec52581855e05fb81f0","impliedFormat":1},{"version":"f5958982fb8d178282ae264d74bcd3a3253a2680f1ed9d61ab808d59a931b0cc","impliedFormat":1},{"version":"8c25b088dcc5e1b699fd6bf49e98d5eae8294d01db43bedc7bed3632eed2d123","impliedFormat":1},{"version":"0d8e093e0fefd5592cde3ee8684cf5d72208559d3394691ce4225b66797d0ccf","impliedFormat":1},{"version":"e4bede85425b4d1c00417170aa7d3f9deee64a872b65b6e979fd476937327718","impliedFormat":1},{"version":"afcb36480aab479f3708bf344a2bf837b04727164b50300b83d6d44d5dfbadc4","impliedFormat":1},{"version":"37c5b27fbda2688158884095b272debe61302286fe5a6dbb029be1bf00b2647d","impliedFormat":1},{"version":"8944244f3eea9766b45b5c50e353c185ff100d33372aa8ea0fa1ec0b2434312c","impliedFormat":1},{"version":"d8a68546789280f9cc972607b0204abba12f6503aa66de51a181c4ec15ae0dda","impliedFormat":1},{"version":"790eb52f6c673e44c8e6158c24410e240bd5061204d3c5b775884aab45a11bd5","impliedFormat":1},{"version":"4a7dffc1c5eafc0c91a0a00fdec024099dac76ca8ef37f06d95e8a8bba489de3","impliedFormat":1},{"version":"b7a02414d6128ec02d76de5f2f8fc70cb00b7d746b32e9aec23f8808cd1202ea","impliedFormat":1},{"version":"13ffd164aeda0bf61256d5e4d309bef434ed32d2d1e32eec4416b1af8e7df4fa","impliedFormat":1},{"version":"7c6e02bb36510ab742ab46393b41df82d2e7a59366df3dbc4503dc4b740da684","impliedFormat":1},{"version":"1465a061f05e061c6640a6a693c31e7446e0b68cc58899b67460e85e51a85aab","impliedFormat":1},{"version":"c41007d08773f66dd2936b55ca42f76f2e8eb5cbdf075aa14843b5a2d19f1275","impliedFormat":1},{"version":"0040147eeca1a25dd7876b2517658935d0962d714adf952b37a5dfe6575a2a75","impliedFormat":1},{"version":"4aaa31cda049c1c8176b17865735abe2fcac498626a5de10a297d29f661f6b42","impliedFormat":1},{"version":"b4be5ae6cf425c81acf21f762e17e1e342328ecd023f4bcefefc47891954de3e","impliedFormat":1},{"version":"0fe5ecc966c8d695030ed651904c6bb816717650516f2453d6e1c97784fcbe6b","impliedFormat":1},{"version":"9f9aa39db46ce9236e1f0796b9678fdca3dd575c501f3babc5873aaefe691fb0","impliedFormat":1},{"version":"769dc05c2bbaf01cb1a224d71f2f9b028949e7282541023c3d48d88aab76df81","impliedFormat":1},{"version":"c549cd957879a126d09665683f8582c715916a9990b3271796ecde433c2329da","impliedFormat":1},{"version":"cfbc348145d9949321f05d5f13fd7b65e2c92aa48621b5702fefe08f47f08a83","impliedFormat":1},{"version":"eb410e862798fc66cfe8da3cabcf8216ba817a725a95b6f6d5427c27ce3007b5","impliedFormat":1},{"version":"781d60ecb967dc2fcf49d5adfe0d77b073fe560d02a0de488fc1e291bbbfe2c3","impliedFormat":1},{"version":"fd955a375470a31b0e788ae58ffc5f1eadb3aaa48320815da81ff83ac039d578","impliedFormat":1},{"version":"4e3e977058703e69e3c3cd20c0ec64bcea48f909e64636a7dfe5e4ad508a9de9","impliedFormat":1},{"version":"41e6f7585fa89dcb8a278fcdfafdbc732cf596cd2314da8ef646782ba72322cd","impliedFormat":1},{"version":"0fd7b6969fb0dcb918a42c1f0b4e302b225a25e5d14915e503a3ffab5639292a","impliedFormat":1},{"version":"c091709121218131ab15e301d858666b7bf780dcd4f67161b84cb01cbebd7955","impliedFormat":1},{"version":"fedf564b673fb0cf6d462e37cd12c234fbe3d88923398724d0bb3fea56221d8e","impliedFormat":1},{"version":"0a00bff7d5e28a2785e690efecf56fa92d6081cdca8d2e8ba4e8b569089b9615","impliedFormat":1},{"version":"3f4daa8074fb0dff7c730985b7dfea828308e62b83650c263914c839851e7cff","impliedFormat":1},{"version":"f568ea3a8f9f6a96d741132e6172e76d1ee844efb4d0febc199730fd8373de12","impliedFormat":1},{"version":"96a01ce9115baca4647c77e25d4ccb20d506f68ab4a52f72fb0304094360e730","impliedFormat":1},{"version":"187cd844e9a6ef5247dcc9df18d7617ab4a734d00edddccf8ea7f37496700aef","impliedFormat":1},{"version":"6e5d2a482d576b9fc29ff3dabbc050ebac0a28e95521701c756e3b839ece38a9","impliedFormat":1},{"version":"a130d95545948a5539c3af75038154956805445f70e74cc99e8fcc90963764ec","impliedFormat":1},{"version":"3ab551e2d557e783d3aeb42bc84370bd38b137ed9f077f97eb31f49afe26db8f","impliedFormat":1},{"version":"fd8236c51f2515f4b11a746132aa1416f9b95d5c2e95630ff60708432c7940bc","impliedFormat":1},{"version":"2da076dd4eecc0c0f23292f0278a04ddc5224f921e6e8f97617cbf7b41717afc","impliedFormat":1},{"version":"f09a30043ac10a4e63de656f399bfa15e4ef4cf73118058a23474de3f1d4be73","impliedFormat":1},{"version":"925233a805205ce31ed53dd71851f143e7661c8f0c1e35aa41c7ed22a4a4bb52","impliedFormat":1},{"version":"664e1fb73a01ea6c7ede041c9da3573f74a963e2c355797ab5d00725beda0dd8","impliedFormat":1},{"version":"5b2e86d7ecd453e7e80270d92210a97160a63a9d2913b673ebc3d7097a289089","impliedFormat":1},{"version":"42638193b815f0bfa1f594c46f303b8e3a045e95affabc5c38405af06b0d2726","impliedFormat":1},{"version":"908dd1c9ded5ff5e471a30d08199544c4bf0c9e880a2fd60af51960ad31186f7","impliedFormat":1},{"version":"e1667177ab030fba7a784c8fe2dbe446e1ea6284758be955d9acfce4f7d88c8e","impliedFormat":1},{"version":"f287b2f8099b74b1f51211168a7dac65b3c5f0a433641fcadee223835ddea091","impliedFormat":1},{"version":"13a70ff4ebcda2c8096c4779a94e5047968fcce30ff11deba878cf07263e2b2c","impliedFormat":1},{"version":"a088d467b0c5922b72c597ff72d07057453c38db1cf05c4652998b3212f8561e","impliedFormat":1},{"version":"b8a71ed67fea0b21aa004bd3fe6c512f5358206be5c8ffb498a250fe41478a69","impliedFormat":1},{"version":"baa19a7a4df948ede8d9913ee128ff0c5948907619495ce58a90a8f1180056fb","impliedFormat":1},{"version":"eefcad1724cc01cccd3010c999b432ae5708653dc6e340ac854b0c006c431147","signature":"547ee2fc67d9614b6fedb32c74e620662788259fb99f14c1d572072a138d6334"},{"version":"cdcfafe23eb9b5dffb14920dea268341a39c0579f253a08da70d78c062e1388e","signature":"71837c482b51cff5a7ef82169458282e659872567f3a43d450f0f6a4bf344fe5"},{"version":"0c81cba34d29a923a4d7de38fc49ae44d8d5162e628129b8e9c7b300031578d6","signature":"fed4ae0c1742affa8ff74d9002582dcc6e6e34c6854f45f6939164f9834d162a"},{"version":"83a8891d5d4a65f52d4944b96f94b5d38076ec5a2ac59faac23d4b0ff5ac9688","signature":"396022d70f875b546e6765bff6ee0cca94783f69d8eb67cb3159186d34607081"},{"version":"fb64f88311febcb3f6138669769fdd0f9fd568778e127bb83ec72058ea22c7f4","signature":"df2b3bc9cd2d3e9d53a47f8979080d798a0cffbf9bd2c0331c22a5a7851c2a9a"},{"version":"8fab5748be05467cb561536b889d25bb65e929d0bf62eedc809a1c8215e095fd","signature":"4a7fa5946a4677a9d9940c218156afbccdd4cc4139494804321ca851b2a060b8"},{"version":"b46d699ed2ec947881ce83d32ffbb3ef5865420b473e684082804c98e13eaf05","signature":"938a1dbd6d0c49ab3e6424cb422dd1ec04bd799f8114cf2879592531c949a320"},{"version":"2b6134bc03966f8d3c5c7ba9810481b7d90dd4652808e29ae0b960d9042c1996","signature":"7e1deacbf78e794d095385b0da0095ec3a4d77647faedb6a412c8770145b97e4"},{"version":"e597bf4ba17a99ba8a95fd9b8b600632cd600b592d1e551369aa33d1cb36d155","signature":"14e4ff11aa25354ea1d10a85cf5a8cfb84d36c9d1a5377c35efbb095e3d4a8c2"},{"version":"83b124c9c5448ac70b7d1803da9721484ef4f6313566e3ed6519287186d4ec85","signature":"7e531419774a3d2c321ccffd3e3168de599b62df755c274636645c6204f8afdb"},{"version":"1e46745c9411767f0a080c9ae8da207e3b64ae674dbdb4c7c59d6b3578e99bdd","signature":"de974eff56c3d8605aed40681f0aa7b41625593699518afe5f9b602fc8251241"},{"version":"d2702c0e26fad0fa5f8c27c5ee21d5dd925f1ece442468be9836f3ba8a8b72b7","signature":"9fd8ab44c802f1f1917a6fdac3e7b8665b949d0ca5a41bf12527d71aa9394c18"},{"version":"3d3898c906518e61a7771d2b4e1d760f2b9603ad0c6842a26de2c2c61c3eb780","signature":"da658a053d894fe7d09999ce433c723913c034fa0f33d0c2dea5bc864186fc16"},{"version":"03cffcc9007577f806a696218d98ef25058d5f80e98e5f4a4b2d30115cab2eb2","signature":"fbffb99a754a5d3b8145b10e9d8613111c8baf377df820ebe61f330c5e120905"},{"version":"4da2c9fa61755caa002e250a659abc8f47d326a2d50fad3d3e681942921ca09c","signature":"67cd6d15f025f6c440f8d21200a6304c81228d654b55ddcf9b7d83d7decd2abf"},{"version":"aba891d2f093ee2c63684f4cf93538a0c2a7354b8d5c68e9fd026eaf5f088eba","signature":"dad577e08368c9f056b907bed9f204e62b0218964f4cb781dc9dd09cead9594b"},{"version":"9591e532c8161b6558a5ad278e89ebb2459b23db90d6503633625714dd550d17","signature":"37e7f3eede83ee563132092bdb1f49b8bb48bf20af2eb6e567c3789978c253be"},{"version":"1bdafdd367723b48e6bf36cd922ca80f0c1243495ef2a334ec133b613d9289f3","signature":"074bcbf06c4fd920ecea4be4a3672596c590d9d2d22c0c6752ede0b7704a82e6"},{"version":"fe068cc57c7024898ddbbec8afc861f70599418a0432cefc34f987c16525c2e2","signature":"b683a9c029c89f5ee76117854d1d6a9ed4028f9b644a5bae399b00584538e1d6"},{"version":"54223f3e9feff7bfa86a919a7cb01619554e38209a29c3d1c4ab2b4a87cf7441","signature":"8c6d489fcf83b162225fc03a7e267e158478ea8b716bc59dea747e04c9b460b0"},{"version":"3b204ce75621b401f70a65c4eee1fedbdbdd258718152140116dc1d97cd50c6f","signature":"e2cde99cd2da4d5f746def0403859882abb1c2d33a33c4397bee680817624f8d"},{"version":"66fea30c9286005b38d2453ffb00ebdc31e415e1ed076d6d8b242a5636e2d996","signature":"12b395303350c28b8faaee1fbac3efb3000df7506e0f5dcdfb70072c0bc5d57a"},{"version":"3e7ecac52940427ac55ff3732217eef3657271860a68c0383badc9c4be93fb5a","signature":"a885687ab177c32fef9137530c46c377cd070f78f0a2dde7e9e0f5351ea49ca9"},{"version":"1c221cf45665efce803648feb81d021eda8c19e7cf62cd22cb582c776f5fb492","signature":"803387a6e4080c884a07897daa60764e067ab005eeb28871393d96321c5181b9"},{"version":"0f52965d797a66a86433b5d21018f6a933b8778bd746c34e15c42aeeaa5242a1","signature":"4acf01107fc8ba6dd53f0826dfa6045d47cd095778b76cb3a65b76eb199a79a2"},{"version":"fe63c6696cde4462504953b6dcae55ced887719bedb223437691b0639c47d1f7","signature":"87c311f30be6508c25811ac3c33c7dfe7078288c96f92f619b0e6f5bf4eb9d4c"},{"version":"efd3f5f350bbb5354d39baff90495e67c29bdb088d52294f0106dd06019f2c5a","signature":"9a6789159a2b28e537eae47ae1e6064ccb0c1d833e3e0cf99fb985b808f36508"},{"version":"9a7e285f541d2f697dbad3130fd99b35c5b46a44c463745af7d0d0b5ad8e8e3f","signature":"b728a0a3ff33276960bee90fb000aea1129e5dfafd1e83f16c4bf2b9bb191e48"},{"version":"f8b109007ce44d343d31066d4a1b26d921c04aeb627ed80292fcf806a2f823a0","signature":"b856d5a0cfa6429db8b594b1340479cd8fd8aac38e34cdcd2e64d744a6002985"},{"version":"515f42aaa0d3411ba9ccc86c253583f6de9a6e3d6d548964cfa2d4b0ebdf8cf5","signature":"d50dbd6b718c5700b4729c7467d2a9e6bf40d45cc9e26145b80492c05a2bfd21"},{"version":"db3a143d6c0833bcd7971346c45739ed7cee5b8945e050267e9e61b5a5b949e3","signature":"a93ae1e1b1207294b997c5cea7466faa2fb86903dd4503be4f287f8682c5e9bd"},{"version":"2d6fdf0611ba569a0aa8dc0650b842721d2f5d6e966ffb9e29a01cbbe9967c06","signature":"4c128135f041d17915f75e4824a0b4eb6e5b8729441c2e74ef603a40f25d3c54"},{"version":"2b2dab1fefa18016532d2bdf3c705ca644573675b8a4ffaa661aa8cca3d113cb","signature":"219e33c8add31838c77d1dd99414fd52b9cc1c26dbeafbb7c671ee3196cbe16a"},{"version":"4c446a8a6b53b4733542b6ebb8b4767d390f55695570240253bf43f3dc4649ab","signature":"563c8c8f4cf6f3362841c1f425426723cfe3a3da0296edb247068d47a80afb67"},{"version":"8259dce3472c26f512965026ec04754f357787413d21244030c60ff1f7b16720","signature":"c0fca7e32830ee81d7e644ebf2d29412cceca074fea09095bd2f0f9c828bfaac"},{"version":"cd5ea046dea7297b6cb9977f07ca3027a883b005e65d26448aa3fc4563d483ca","signature":"e4b4f8cfb4fd94ffb50c7ba040e42a0167cc59f5fda6159d8d629fa22fe7044d"},{"version":"b5945af70d0d60ff0f6ff207fa18973712387963f7dba16efa1e9e10ce611a94","signature":"ead8db7dede5e1275b82fdf896f0f5582a394b8a922f30a22478484032a90cf7"},{"version":"f84ee6684444f1addab5a377967a517acb4bc4906a9889cc0e7f7a1d5a063bc6","signature":"7b07da36378a22a8600a98b89725d9167ce0573efa787a5c6a62feeb5645f63a"},{"version":"955e0b81ea64892d73fc9406cd4792adfb637c7113daa00de5c11e7f8098da35","signature":"8d5a71cde6d35033e2e1e01fdf0a445146cc90424d468fc2c578d15eaf11aaec"},{"version":"b13cf2dfb973b3ad3e9448a9a219e1d36e8c3ea105a0da3041bb4b207d825e02","signature":"124f7d0a32ad65b42a792727bc44631075662a4ec7c838bc50f582eb8af951b3"},{"version":"6164b7c72b1d676fa7c197b45f86ba4f03e6ce9ef65525ffaa71c21ca7551ccb","signature":"4c36844aa8702df686c1fe6cfcef41e4367b253dc46ee9acc832b1c288294b79"},"8f6acfbf0c5bb3eaf96aca99418f374f34697a025138013e5349705dd2c423fd",{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"a356997414bbba2a82fa683ed636c9c117810d8a4813ce316bc0e44d42379345","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6eca705d784aa2e8b74b7b20c4e0fd024938509ea69734650260e588a7ea59c7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d059c0bc02432c05b0a23248696198a3ee8f6e6ae13893700da879f88d078b20","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"724df2d1a86c3aead77b1fca726a5e81e4ea5085d936191791e5472b3f3ce0d4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"79c7dc6362f393b13ea113a6bb7fdbd244d5a9913b03ec5f4fe29b8a99b5e7c5","affectsGlobalScope":true},{"version":"baf3507287629018d38c88e2636dd041550c70620bb774127011eb6dc3b361c0","impliedFormat":1},{"version":"6175dda01fddf3684d6261d97d169d86b024eceb2cc20041936c068789230f8f","impliedFormat":1},{"version":"a6a55e87340abd0dfbc19ed6ea74ca452e87a55773a10190ee80017e2cbab6ee","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2cd3901fbe4b0eae51b613f2ea0bfe1d41fef7558a432a6925352ddf80dab292","signature":"b1bd501692ab4fb4b1663e8c1a5a470d88356845dcb6e483f39078acc4773a69"},{"version":"5146a9443a3faed571dbbbb08413ddb282d4c014ef3d41522deb0e56f047bb34","signature":"eb18d9b92488eaa6b4842f09bca865250c972e7d7d9b9bd4353a16e36f549cdf"},{"version":"4adb4e9de3b5df0ddd82d976df05f4ac96324f785c6149d68be98f14e9381a35","signature":"d565ce61f91e5a05f0a0609fec062029bd18465b07d2b481b09d8d163d041283"},{"version":"e6db1b5431c965ec9c046b50d2fe05754c1068031e5c6b4f1b35b8cd42035c54","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3898fbfaf2614a88e6d809efc2f12ffb14a19a205e1b0f4ddbcc275c60a6a473","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"63e56b51b29b814906f0399fda1144ff1414925bc3f9b52e470a6f405286a193","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2a9957c2aeeb52c8a3aa2fca0435c2868e0d279ca05ea1a59ac8953e37f2519b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3da6e5c3cf41bea4d1d43c73fcf55204f0e226567429c2d4b0ec23e0bd165492","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f5386fc09037cb6c337eb978484628c9ed50b4e227a6b05c2e6116b221d5d4c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bc4ef2a994d41d7fcd3c39f91d9f583c4ebd0f6737904446171deaaa274a8973","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"36d94f0d4392c0162d752b4e50c037938bbffd4432855e2e09882fcff10424a0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"02a646dee15586ef298172044b52c6723c7f6a45bf038e58a6e6962f02574ae9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ec84642c703600865d04a5574e5b45f1bb8f9ebb890033d2218c05acf0e52191","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1}],"root":[227,228,301,[303,307],[317,319],321,322,327,[387,428],[430,434],[437,450]],"options":{"allowJs":false,"checkJs":false,"composite":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"inlineSources":true,"module":1,"newLine":1,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[216,1],[212,2],[211,3],[213,2],[214,2],[215,4],[210,5],[220,6],[83,6],[222,6],[224,7],[223,6],[221,6],[86,6],[85,8],[87,9],[217,10],[84,6],[219,11],[218,12],[302,13],[429,6],[451,6],[316,14],[150,15],[151,15],[152,16],[90,17],[153,18],[154,19],[155,20],[88,6],[156,21],[157,22],[158,23],[159,24],[160,25],[161,26],[162,26],[163,27],[164,28],[165,29],[166,30],[91,6],[89,6],[167,31],[168,32],[169,33],[209,34],[170,24],[171,35],[172,24],[173,36],[174,37],[175,38],[176,39],[177,39],[178,39],[179,40],[180,41],[181,42],[182,43],[183,18],[184,44],[185,44],[186,45],[187,6],[188,6],[189,46],[190,47],[191,46],[192,48],[193,49],[194,50],[195,51],[196,52],[197,53],[198,23],[199,54],[200,55],[201,56],[202,57],[203,58],[204,59],[205,60],[206,61],[92,24],[93,6],[94,62],[95,6],[96,6],[97,63],[98,6],[141,64],[142,65],[143,66],[144,66],[145,67],[146,6],[147,18],[148,68],[149,65],[207,69],[208,70],[329,71],[436,72],[435,6],[330,73],[320,6],[314,74],[364,75],[365,6],[366,76],[368,77],[367,75],[371,78],[369,79],[370,80],[99,6],[315,6],[308,6],[225,6],[226,74],[328,6],[386,81],[381,82],[383,83],[333,6],[379,84],[384,85],[380,86],[331,87],[332,88],[334,6],[382,89],[385,90],[313,91],[310,92],[311,93],[309,6],[312,6],[326,94],[323,95],[325,96],[324,96],[81,6],[82,6],[13,6],[14,6],[16,6],[15,6],[2,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[3,6],[25,6],[26,6],[4,6],[27,6],[31,6],[28,6],[29,6],[30,6],[32,6],[33,6],[34,6],[5,6],[35,6],[36,6],[37,6],[38,6],[6,6],[42,6],[39,6],[40,6],[41,6],[43,6],[7,6],[44,6],[49,6],[50,6],[45,6],[46,6],[47,6],[48,6],[8,6],[54,6],[51,6],[52,6],[53,6],[55,6],[9,6],[56,6],[57,6],[58,6],[60,6],[59,6],[61,6],[62,6],[10,6],[63,6],[64,6],[65,6],[11,6],[66,6],[67,6],[68,6],[69,6],[70,6],[1,6],[71,6],[72,6],[12,6],[76,6],[74,6],[79,6],[78,6],[73,6],[77,6],[75,6],[80,6],[117,97],[129,98],[115,99],[130,70],[139,100],[106,101],[107,102],[105,103],[138,74],[133,104],[137,105],[109,106],[126,107],[108,108],[136,109],[103,110],[104,104],[110,111],[111,6],[116,105],[114,111],[101,112],[140,113],[131,114],[120,115],[119,111],[121,116],[124,117],[118,118],[122,119],[134,74],[112,120],[113,121],[125,122],[102,70],[128,123],[127,111],[123,124],[132,6],[100,6],[135,125],[335,6],[350,126],[349,127],[351,127],[353,128],[354,128],[352,6],[362,129],[355,130],[356,6],[357,130],[358,130],[359,130],[348,130],[360,128],[361,130],[363,131],[336,6],[347,132],[338,133],[339,133],[340,134],[337,135],[341,6],[342,135],[343,136],[344,135],[345,137],[346,135],[373,138],[372,139],[377,140],[376,141],[374,142],[375,142],[378,143],[300,144],[295,145],[298,146],[296,146],[292,145],[299,147],[297,146],[293,148],[294,149],[288,150],[233,151],[235,152],[287,6],[234,153],[291,154],[289,6],[236,151],[237,6],[286,155],[232,156],[229,6],[290,157],[230,158],[231,6],[238,159],[239,159],[240,159],[241,159],[242,159],[243,159],[244,159],[245,159],[246,159],[247,159],[248,159],[249,159],[250,159],[252,159],[251,159],[253,159],[254,159],[255,159],[285,160],[256,159],[257,159],[258,159],[259,159],[260,159],[261,159],[262,159],[263,159],[264,159],[265,159],[266,159],[267,159],[268,159],[270,159],[269,159],[271,159],[272,159],[273,159],[274,159],[275,159],[276,159],[277,159],[278,159],[279,159],[280,159],[281,159],[284,159],[282,159],[283,159],[321,6],[426,6],[430,161],[317,6],[425,162],[301,163],[392,164],[228,6],[393,164],[411,164],[413,164],[394,164],[415,164],[414,164],[417,164],[418,164],[420,164],[422,164],[395,164],[421,164],[423,164],[419,164],[396,164],[416,164],[397,164],[398,164],[399,164],[400,164],[401,164],[402,164],[403,164],[404,164],[405,164],[406,164],[410,164],[412,164],[437,165],[391,166],[424,167],[407,168],[408,164],[409,164],[389,6],[322,169],[304,6],[327,170],[306,171],[431,172],[307,170],[432,173],[318,174],[441,175],[442,175],[443,175],[444,175],[438,6],[439,6],[445,176],[440,177],[446,178],[447,179],[448,175],[449,175],[450,175],[387,170],[305,6],[390,180],[319,181],[227,182],[433,183],[303,6],[388,170],[434,6],[427,184],[428,185]],"latestChangedDtsFile":"./lib/mock/typeCheck.test.d.ts","version":"5.9.3"} \ No newline at end of file +{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.es2024.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2024.collection.d.ts","../node_modules/typescript/lib/lib.es2024.object.d.ts","../node_modules/typescript/lib/lib.es2024.promise.d.ts","../node_modules/typescript/lib/lib.es2024.regexp.d.ts","../node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2024.string.d.ts","../node_modules/typescript/lib/lib.esnext.array.d.ts","../node_modules/typescript/lib/lib.esnext.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.promise.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.esnext.iterator.d.ts","../node_modules/typescript/lib/lib.esnext.float16.d.ts","../node_modules/typescript/lib/lib.esnext.error.d.ts","../node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/@iobroker/adapter-core/build/esm/exitcodes.d.ts","../node_modules/@iobroker/types/build/utils.d.ts","../node_modules/@iobroker/types/build/objects.d.ts","../node_modules/@iobroker/types/build/config.d.ts","../node_modules/@iobroker/types/build/shared.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/blob.d.ts","../node_modules/@types/node/web-globals/console.d.ts","../node_modules/@types/node/web-globals/crypto.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/encoding.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/utility.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client-stats.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/h2c-client.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-call-history.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/snapshot-agent.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/cache-interceptor.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/web-globals/importmeta.d.ts","../node_modules/@types/node/web-globals/messaging.d.ts","../node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/@types/node/web-globals/performance.d.ts","../node_modules/@types/node/web-globals/storage.d.ts","../node_modules/@types/node/web-globals/streams.d.ts","../node_modules/@types/node/web-globals/timers.d.ts","../node_modules/@types/node/web-globals/url.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/inspector/promises.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/path/posix.d.ts","../node_modules/@types/node/path/win32.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/quic.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/test/reporters.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/util/types.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/@alcalzone/pak/node_modules/execa/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/package-manager.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/npm/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-berry/index.d.ts","../node_modules/@alcalzone/pak/build/lib/package-managers/yarn-classic/index.d.ts","../node_modules/@alcalzone/pak/build/lib/pak.d.ts","../node_modules/@alcalzone/pak/build/index.d.ts","../node_modules/@iobroker/types/build/types.d.ts","../node_modules/@iobroker/types/public.d.ts","../node_modules/@iobroker/types/index.d.ts","../node_modules/@iobroker/adapter-core/build/esm/controllertools.d.ts","../node_modules/@iobroker/adapter-core/build/esm/utils.d.ts","../node_modules/@iobroker/adapter-core/build/esm/i18n.d.ts","../node_modules/@iobroker/adapter-core/build/esm/tokenrefresher.d.ts","../node_modules/@iobroker/adapter-core/build/esm/index.d.ts","../node_modules/go2rtc-static/dist/index.d.ts","../node_modules/jszip/index.d.ts","../src/lib/roborock_package_helper.ts","../src/lib/features/features.enum.ts","../node_modules/zod/v4/core/standard-schema.d.cts","../node_modules/zod/v4/core/util.d.cts","../node_modules/zod/v4/core/versions.d.cts","../node_modules/zod/v4/core/schemas.d.cts","../node_modules/zod/v4/core/checks.d.cts","../node_modules/zod/v4/core/errors.d.cts","../node_modules/zod/v4/core/core.d.cts","../node_modules/zod/v4/core/parse.d.cts","../node_modules/zod/v4/core/regexes.d.cts","../node_modules/zod/v4/locales/ar.d.cts","../node_modules/zod/v4/locales/az.d.cts","../node_modules/zod/v4/locales/be.d.cts","../node_modules/zod/v4/locales/bg.d.cts","../node_modules/zod/v4/locales/ca.d.cts","../node_modules/zod/v4/locales/cs.d.cts","../node_modules/zod/v4/locales/da.d.cts","../node_modules/zod/v4/locales/de.d.cts","../node_modules/zod/v4/locales/en.d.cts","../node_modules/zod/v4/locales/eo.d.cts","../node_modules/zod/v4/locales/es.d.cts","../node_modules/zod/v4/locales/fa.d.cts","../node_modules/zod/v4/locales/fi.d.cts","../node_modules/zod/v4/locales/fr.d.cts","../node_modules/zod/v4/locales/fr-ca.d.cts","../node_modules/zod/v4/locales/he.d.cts","../node_modules/zod/v4/locales/hu.d.cts","../node_modules/zod/v4/locales/id.d.cts","../node_modules/zod/v4/locales/is.d.cts","../node_modules/zod/v4/locales/it.d.cts","../node_modules/zod/v4/locales/ja.d.cts","../node_modules/zod/v4/locales/ka.d.cts","../node_modules/zod/v4/locales/kh.d.cts","../node_modules/zod/v4/locales/km.d.cts","../node_modules/zod/v4/locales/ko.d.cts","../node_modules/zod/v4/locales/lt.d.cts","../node_modules/zod/v4/locales/mk.d.cts","../node_modules/zod/v4/locales/ms.d.cts","../node_modules/zod/v4/locales/nl.d.cts","../node_modules/zod/v4/locales/no.d.cts","../node_modules/zod/v4/locales/ota.d.cts","../node_modules/zod/v4/locales/ps.d.cts","../node_modules/zod/v4/locales/pl.d.cts","../node_modules/zod/v4/locales/pt.d.cts","../node_modules/zod/v4/locales/ru.d.cts","../node_modules/zod/v4/locales/sl.d.cts","../node_modules/zod/v4/locales/sv.d.cts","../node_modules/zod/v4/locales/ta.d.cts","../node_modules/zod/v4/locales/th.d.cts","../node_modules/zod/v4/locales/tr.d.cts","../node_modules/zod/v4/locales/ua.d.cts","../node_modules/zod/v4/locales/uk.d.cts","../node_modules/zod/v4/locales/ur.d.cts","../node_modules/zod/v4/locales/vi.d.cts","../node_modules/zod/v4/locales/zh-cn.d.cts","../node_modules/zod/v4/locales/zh-tw.d.cts","../node_modules/zod/v4/locales/yo.d.cts","../node_modules/zod/v4/locales/index.d.cts","../node_modules/zod/v4/core/registries.d.cts","../node_modules/zod/v4/core/doc.d.cts","../node_modules/zod/v4/core/api.d.cts","../node_modules/zod/v4/core/json-schema.d.cts","../node_modules/zod/v4/core/to-json-schema.d.cts","../node_modules/zod/v4/core/index.d.cts","../node_modules/zod/v4/classic/errors.d.cts","../node_modules/zod/v4/classic/parse.d.cts","../node_modules/zod/v4/classic/schemas.d.cts","../node_modules/zod/v4/classic/checks.d.cts","../node_modules/zod/v4/classic/compat.d.cts","../node_modules/zod/v4/classic/iso.d.cts","../node_modules/zod/v4/classic/coerce.d.cts","../node_modules/zod/v4/classic/external.d.cts","../node_modules/zod/index.d.cts","../src/lib/features/basedevicefeatures.ts","../node_modules/@napi-rs/canvas/index.d.ts","../src/lib/roomcoloring.ts","../src/lib/images.ts","../src/lib/pathprocessor.ts","../src/lib/mapcreator.ts","../src/lib/mapdataparser.ts","../node_modules/eventemitter3/index.d.ts","../node_modules/p-queue/dist/queue.d.ts","../node_modules/p-queue/dist/options.d.ts","../node_modules/p-queue/dist/priority-queue.d.ts","../node_modules/p-timeout/index.d.ts","../node_modules/p-queue/dist/index.d.ts","../node_modules/binary-parser/dist/binary_parser.d.ts","../node_modules/crc-32/types/index.d.ts","../node_modules/@types/node-forge/index.d.ts","../src/lib/cryptoengine.ts","../src/lib/messageparser.ts","../src/lib/requestshandler.ts","../node_modules/axios/index.d.ts","../src/lib/apitypes.ts","../src/lib/httpapi.ts","../node_modules/ping/types/parser/base.d.ts","../node_modules/ping/types/ping-sys.d.ts","../node_modules/ping/types/ping-promise.d.ts","../node_modules/ping/types/index.d.ts","../src/lib/localapi.ts","../node_modules/mqtt-packet/types/index.d.ts","../node_modules/@types/readable-stream/index.d.ts","../node_modules/@types/ws/index.d.ts","../node_modules/mqtt/build/lib/shared.d.ts","../node_modules/mqtt/build/lib/store.d.ts","../node_modules/mqtt/build/lib/default-message-id-provider.d.ts","../node_modules/mqtt/build/lib/typedemitter.d.ts","../node_modules/worker-factory/build/es2019/helpers/is-supporting-transferables.d.ts","../node_modules/worker-factory/build/es2019/types/destroy-worker-function.d.ts","../node_modules/worker-factory/build/es2019/types/message.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-with-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver-without-params.d.ts","../node_modules/worker-factory/build/es2019/types/message-receiver.d.ts","../node_modules/worker-factory/build/es2019/types/typed-array.d.ts","../node_modules/worker-factory/build/es2019/types/value-map.d.ts","../node_modules/worker-factory/build/es2019/types/value.d.ts","../node_modules/worker-factory/build/es2019/types/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/types/worker-implementation.d.ts","../node_modules/worker-factory/build/es2019/types/worker-message.d.ts","../node_modules/worker-factory/build/es2019/types/index.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/broker-event.d.ts","../node_modules/worker-factory/build/es2019/interfaces/default-worker-definition.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/error-response.d.ts","../node_modules/worker-factory/build/es2019/interfaces/notification.d.ts","../node_modules/worker-factory/build/es2019/interfaces/receiver.d.ts","../node_modules/worker-factory/build/es2019/interfaces/request.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-array.d.ts","../node_modules/worker-factory/build/es2019/interfaces/value-map.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-error-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/worker-result-message.d.ts","../node_modules/worker-factory/build/es2019/interfaces/index.d.ts","../node_modules/worker-factory/build/es2019/module.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-actions.d.ts","../node_modules/broker-factory/build/es2019/interfaces/broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/default-broker-definition.d.ts","../node_modules/broker-factory/build/es2019/interfaces/worker-event.d.ts","../node_modules/broker-factory/build/es2019/interfaces/index.d.ts","../node_modules/broker-factory/build/es2019/types/broker-implementation.d.ts","../node_modules/broker-factory/build/es2019/types/index.d.ts","../node_modules/broker-factory/build/es2019/module.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/worker-timers-broker-definition.d.ts","../node_modules/worker-timers-broker/build/es2019/interfaces/index.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-loader.d.ts","../node_modules/worker-timers-broker/build/es2019/types/worker-timers-broker-wrapper.d.ts","../node_modules/worker-timers-broker/build/es2019/types/index.d.ts","../node_modules/worker-timers-broker/build/es2019/module.d.ts","../node_modules/worker-timers/build/es2019/module.d.ts","../node_modules/mqtt/build/lib/get-timer.d.ts","../node_modules/mqtt/build/lib/keepalivemanager.d.ts","../node_modules/mqtt/build/lib/client.d.ts","../node_modules/mqtt/build/lib/unique-message-id-provider.d.ts","../node_modules/mqtt/build/lib/connect/index.d.ts","../node_modules/mqtt/build/lib/handlers/ack.d.ts","../node_modules/mqtt/build/mqtt.d.ts","../node_modules/mqtt/build/index.d.ts","../src/lib/mqttapi.ts","../src/lib/sockethandler.ts","../src/lib/features/vacuum/vacuumconstants.ts","../src/lib/producthelper.ts","../src/lib/features/vacuum/basevacuumfeatures.ts","../src/lib/features/fallbackfeatures.ts","../src/lib/features/vacuum/a08_features.ts","../src/lib/features/vacuum/a10_features.ts","../src/lib/features/vacuum/a15_features.ts","../src/lib/features/vacuum/a19_features.ts","../src/lib/features/vacuum/a27_features.ts","../src/lib/features/vacuum/a38_features.ts","../src/lib/features/vacuum/a40_features.ts","../src/lib/features/vacuum/a51_features.ts","../src/lib/features/vacuum/a62_features.ts","../src/lib/features/vacuum/a65_features.ts","../src/lib/features/vacuum/a70_features.ts","../src/lib/features/vacuum/a72_features.ts","../src/lib/features/vacuum/a73_features.ts","../src/lib/features/vacuum/a75_features.ts","../src/lib/features/vacuum/s4_features.ts","../src/lib/features/vacuum/s5e_features.ts","../src/lib/features/vacuum/s6_features.ts","../src/lib/features/vacuum/a87_features.ts","../src/lib/features/vacuum/a101_features.ts","../src/lib/features/vacuum/a97_features.ts","../src/lib/features/vacuum/a104_features.ts","../src/lib/features/vacuum/a135_features.ts","../src/lib/features/vacuum/a117_features.ts","../src/lib/features/vacuum/a21_features.ts","../src/lib/features/vacuum/a144_features.ts","../src/lib/features/vacuum/a147_features.ts","../src/lib/features/vacuum/a187_features.ts","../src/lib/features/vacuum/a156_features.ts","../src/lib/features/vacuum/a168_features.ts","../src/lib/features/vacuum/a159_features.ts","../src/lib/features/vacuum/a179_features.ts","../src/lib/features/vacuum/index.ts","../src/lib/devicemanager.ts","../src/lib/buildinfo.ts","../src/main.ts","../src/types.d.ts","../node_modules/@types/chai/index.d.ts","../src/lib/cryptoengine.test.ts","../src/lib/mapdataparser.test.ts","../src/lib/messageparser.test.ts","../src/lib/roomcoloring.test.ts","../src/lib/types.d.ts","../node_modules/@types/sinonjs__fake-timers/index.d.ts","../node_modules/@types/sinon/index.d.ts","../src/lib/features/vacuum/basevacuumfeatures.test.ts","../src/lib/mock/mockadapter.ts","../src/lib/mock/mockdata.ts","../src/lib/mock/mockrobot.ts","../src/lib/mock/commands.test.ts","../src/lib/mock/errorhandling.test.ts","../src/lib/mock/features.test.ts","../src/lib/mock/maps.test.ts","../src/lib/mock/mockrobot.test.ts","../src/lib/mock/protocol.test.ts","../src/lib/mock/queue.test.ts","../src/lib/mock/schedules.test.ts","../src/lib/mock/statemachine.test.ts","../src/lib/mock/typecheck.test.ts","../node_modules/@types/mocha/index.d.ts"],"fileIdsList":[[90,153,158,159,161,165,168,170,171,172,174,184,208,211,215,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,210,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,211,212,213,214,316,428],[90,153,154,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[83,90,153,158,159,161,165,168,170,171,172,174,184,208,219,220,221,222,223,316,428],[84,90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[84,85,86,90,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,216,316,428],[87,90,153,158,159,161,165,168,170,171,172,174,184,208,218,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,217,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,189,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,428],[90,150,151,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,208,316,428],[90,153,154,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,153,154,155,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,153,157,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,198,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,160,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,162,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,163,164,165,168,170,171,172,174,184,208,316,428],[90,152,153,158,159,161,164,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,166,168,170,171,172,174,184,189,192,208,316,428],[90,140,153,158,159,161,164,165,167,168,170,171,172,174,184,189,201,208,316,428],[90,153,158,159,161,164,165,167,168,170,171,172,174,184,189,198,201,208,316,428],[90,153,158,159,161,165,167,168,169,170,171,172,174,184,189,198,201,208,316,428],[88,89,90,91,92,93,94,95,96,97,98,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,201,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,175,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,179,184,208,316,428],[90,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,181,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,182,184,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,185,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,186,202,205,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,189,191,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,190,192,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,192,202,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,193,208,316,428],[90,150,153,158,159,161,165,168,170,171,172,174,184,189,195,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,194,208,316,428],[90,153,158,159,161,164,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,196,197,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,199,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,200,208,316,428],[90,153,158,159,161,165,167,168,170,171,172,174,182,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,203,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,204,208,316,428],[90,153,158,159,161,165,168,170,171,172,173,174,184,205,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,206,208,316,428],[90,153,156,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,202,208,316,428],[90,140,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,179,184,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,197,208,316,428],[90,140,153,158,159,161,164,165,166,168,170,171,172,174,179,184,189,192,201,204,205,207,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,435],[90,153,158,159,161,164,165,167,168,169,170,171,172,174,184,189,198,201,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,365,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,364,365,366,367,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,370,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,363,368,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,369,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,385,428],[90,153,158,159,161,165,167,168,170,171,172,174,184,208,316,328,329,330,331,332,333,334,379,380,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,378,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,379,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,189,208,316,328,329,381,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,328,329,331,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,333,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,331,332,333,379,380,381,382,383,384,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,308,309,310,311,312,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,309,310,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,324,325,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,326,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,323,326,428],[90,106,109,112,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,113,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,105,106,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,198,208,316,428],[90,103,153,158,159,161,165,168,170,171,172,174,184,208,209,316,428],[90,105,109,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,100,101,102,104,108,153,158,159,161,164,165,168,170,171,172,174,184,189,201,208,316,428],[90,109,117,125,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,107,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,134,135,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,104,109,153,158,159,161,165,168,170,171,172,174,184,192,201,208,209,316,428],[90,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,100,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,104,105,107,108,109,110,111,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,135,136,137,138,139,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,130,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,117,118,119,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,108,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,101,103,109,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,113,118,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,113,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,107,109,112,153,158,159,161,165,168,170,171,172,174,184,201,208,316,428],[90,101,105,109,117,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,109,127,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,120,153,158,159,161,165,168,170,171,172,174,184,208,316,428],[90,103,109,134,153,158,159,161,165,168,170,171,172,174,184,192,207,208,209,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,352,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,348,349,350,351,352,353,354,355,356,357,358,359,360,361,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,347,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,335,347,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,336,337,338,339,340,341,342,343,344,345,346,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,337,338,339,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,341,342,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,340,362,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,372,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,373,376,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,374,375,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,371,373,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,377,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,299,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,294,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,285,291,292,293,294,295,296,297,298,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,292,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,291,293,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,233,234,235,286,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,232,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,232,233,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,230,231,232,233,234,235,236,237,285,286,287,288,289,290,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,229,230,231,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,286,289,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,232,233,234,235,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,234,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,316,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,390,391,392,424,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,436],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,300,301,316,389,390,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,316,391,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,317,320,321,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,176,184,208,302,303,304,305,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,307,316,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429],[90,153,158,159,161,165,168,170,171,172,174,184,208,300,316,317,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,391,428,429,438,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,429,440],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,428,439],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,318,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,316,319,428,429,438],[90,153,158,159,161,165,168,170,171,172,174,184,208,228,316,321,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,301,306,307,313,316,318,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,226,316,427,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,303,316,428,429],[90,153,154,158,159,161,165,168,170,171,172,174,184,208,224,225,227,228,301,316,319,322,327,387,388,425,426,428],[90,153,158,159,161,165,168,170,171,172,174,184,208,316]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"0d56c0e4c924ce29ca57641d45823206c6b3d3c7846aecb32b3ae6cdd6ac27bf","impliedFormat":99},{"version":"e12a40ba307d38757b6f0637958d945de7442dbd0986fd3e4f7a61cc65b3bc61","impliedFormat":1},{"version":"a8ea473ecfe448bf0962c10195cda747b8a211894dbc29d87693137a8ba76b45","affectsGlobalScope":true,"impliedFormat":1},{"version":"af8f9eee362acd79cf4cb6ee04928614ae8ce683293a1f52db2e010e09813ca8","impliedFormat":1},{"version":"892c6b419a485b3297fdb93546e8a1efaef193f0530d45b20c521ce5de709e72","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"dd0109710de4cd93e245121ab86d8c66d20f3ead80074b68e9c3e349c4f53342","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"cf83d90d5faf27b994c2e79af02e32b555dbfe42cd9bd1571445f2168d1f4e2d","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"0e28335ac43f4d94dd2fe6d9e6fa6813570640839addd10d309d7985f33a6308","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"836b1d038d400811f265b04c758e1ef0fb64d915499a4ef590acc54761875075","affectsGlobalScope":true,"impliedFormat":1},{"version":"961cf7535b9c521cd634055b1b6ac49b94d055f0b573ce7fdc4cfaddab080b7c","impliedFormat":1},{"version":"806a8c6daae69e5695e7200d9eca6bc1e4298f38d90edda3ce67a794da31a24f","impliedFormat":1},{"version":"ac86245c2f31335bfd52cbe7fc760f9fc4f165387875869a478a6d9616a95e72","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"9d96a7ce809392ff2cb99691acf7c62e632fe56897356ba013b689277aca3619","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"27c0a08e343c6a0ae17bd13ba6d44a9758236dc904cd5e4b43456996cd51f520","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"6f80e51ba310608cd71bcdc09a171d7bbfb3b316048601c9ec215ce16a8dcfbc","impliedFormat":1},{"version":"718d94d1b710af019cbfaab4a8dc5240503fd5b5938905262d45bdef79318378","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"2ca2bca6845a7234eff5c3d192727a068fca72ac565f3c819c6b04ccc83dadc0","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"17d06eb5709839c7ce719f0c38ada6f308fb433f2cd6d8c87b35856e07400950","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"6c00f77f0335ae0c18bd45a6c7c9c97c9625fb7e5dd6d5936eadf70718bce52e","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"586eaf66bace2e731cee0ddfbfac326ad74a83c1acfeac4afb2db85ad23226c7","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"d1a14d87cedcf4f0b8173720d6eb29cc02878bf2b6dabf9c9d9cee742f275368","impliedFormat":1},{"version":"e60efae9fe48a2955f66bf4cbf0f082516185b877daf50d9c5e2a009660a7714","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"cd9189eacf0f9143b8830e9d6769335aa6d902c04195f04145bcbf19e7f26fcb","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"da51964a650a3b8d775267a55e8a590b1eb6bb605cc3f6d10830370d77135557","impliedFormat":1},{"version":"c59ab0fda36f7cdc43ef1102659954735c80c6fb721ecc2bee0019db838d3d85","impliedFormat":1},{"version":"deeaf7b68c688b0a700bb8f3f175683263c8bb3a8d4932fc44d95d56402f4fca","impliedFormat":1},{"version":"4deacd1de0cc7b1ec1d7b97e1910a809b6e4742e9b3f62e70b0f8e5c60667058","impliedFormat":1},{"version":"132aac02cd3d0c950769ea248072647dfe8fbfb4441974fba85165ed700a872f","impliedFormat":1},{"version":"41e1718c5738cd9261acc61439f2156ed3b8a3267de9805e55b3cf7d839f5063","impliedFormat":1},{"version":"4e20f9be439bf149c8f336a7d9efb1dcc785a29d8cbb73efa279f8bf883a7058","impliedFormat":1},{"version":"216d7f8df962491193db3384dbbfbfacba0c6e00b3488e02262b41477e37938f","impliedFormat":1},{"version":"f551846d1f55ed48a545475cdae88a96c4906dfca3d4a7d0d5f890525ff50e16","affectsGlobalScope":true,"impliedFormat":1},{"version":"65e317467fee99daf166f7dc075afee41630be25ee750a2fe12a2e55a400b338","impliedFormat":1},{"version":"20dbfa41a3d60775a1151e8f64f3fc2125bcf8709036c7940883fb81a25c181b","impliedFormat":99},{"version":"4e3bc8765904f6aea80e664e7b9297ee4e429984ffbff4c638337f4179458426","impliedFormat":99},{"version":"745b107f0bf4f023a275ebad8c11284d8ae5a589a9d2b924e256d969ca864eed","impliedFormat":99},{"version":"3076c73202d40cdeb6bed55d310e67aac1a93b8e55e5a8a217580fed5dfebdc0","impliedFormat":99},{"version":"e2622304b712eabade00b70dfc03ee4581d1b1570c208c9aafb060e7adac78ec","impliedFormat":99},{"version":"ad8a18bc463768101a4d30f3117cea1e73381eb0ec12a23b7d61208dc852438e","impliedFormat":1},{"version":"522cb15ff9bef5a65c2f3dbd10dbba9e7ecae4de32f90f5c0b4198132be63ae4","impliedFormat":1},{"version":"8479fb227ff6a33943e5a4227d2775999733790a809a3f6d7a18b2cc729af70d","signature":"e9dbca0921e577b79fd297d8c299d86949d8ab08bca10e37bd0a4cb6b1abcebe"},{"version":"60c1a59abc6c8fffdcd9803214f36373ee53d6cb9e9acedabe227036c8da97de","signature":"bf0b67854361dae40cc55a337248ab28ebfad49654e57caf4764c0d3cdb920d8"},{"version":"309ebd217636d68cf8784cbc3272c16fb94fb8e969e18b6fe88c35200340aef1","impliedFormat":1},{"version":"d48904eee50b64e6c906aae902322aedbf1a85ea24ceb79959d3b4e69e309ab7","impliedFormat":1},{"version":"1ff91526fcdd634148c655ef86e912a273ce6a0239e2505701561f086678262b","impliedFormat":1},{"version":"2955c932ecc11e23d079a3f15ec2b39ac89c03e4d0e21c3459d3141e1c62eb1b","impliedFormat":1},{"version":"8d67b13da77316a8a2fabc21d340866ddf8a4b99e76a6c951cc45189142df652","impliedFormat":1},{"version":"7952419455ca298776db0005b9b5b75571d484d526a29bfbdf041652213bce6f","impliedFormat":1},{"version":"21360500b20e0ec570f26f1cbb388c155ede043698970f316969840da4f16465","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"f6f827cd43e92685f194002d6b52a9408309cda1cec46fb7ca8489a95cbd2fd4","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"26384fb401f582cae1234213c3dc75fdc80e3d728a0a1c55b405be8a0c6dddbe","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"568b463d762d0df07ed10081293715069168ad7cf6308525a3bb93777b127845","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"328947a02b94edefe4de88b5cb96408ff86c07a32911c15ad67f6d61275a114c","impliedFormat":1},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"85021a58f728318a9c83977a8a3a09196dcfc61345e0b8bbbb39422c1594f36b","impliedFormat":1},{"version":"d91805544905a40fbd639ba1b85f65dc13d6996a07034848d634aa9edb63479e","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"4ff0c68ba32a51dec9c9d4f8a491d4bee22c88454ee7fa417a637c4af1eceab1","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"2fbc91ba70096f93f57e22d1f0af22b707dbb3f9f5692cc4f1200861d3b75d88","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},{"version":"a5c37e47417c9a67ad39480d67521921eec20236a70fc9416bc7789aa44f7eed","signature":"aa22e7085c56b854de71ec9f3566a95da24b594d2e4d4e4ab2591586988203ce"},{"version":"a9b74f5e1715d0d7bc26c2f41e19f27605dc4c7f6e3303c3e8029d40dda5fa63","impliedFormat":1},{"version":"af04cf2a8c6f2a2ca8f032c98310d69bf0a0139980d29b363b65ade0d853168b","signature":"732a75f120c13e0d5d14f48259ac18ab2a94f879d9871f84e2b3d4b8660fa91f"},{"version":"547ff64d06a2d7a60a9529edd75cd8ae6b676a0bb96490207886643839492988","signature":"4ad73857e4f16234efc80829d886d8fafb646f6681729e4ea869dafee50094b0"},{"version":"295dfb856b055146ea1f3318ea19c38ca21629eef54a71a5d35d3085512c0e84","signature":"57dc09407435b60b7b89206b1567a5bb25d682a59c09cbb9c65c569079dda275"},{"version":"a706561973648446f793b9f12ddaf5e7f16a95986c797977b4847705e13101db","signature":"b720afaa5a92e286a1d5230c5af67e1fd6598219b73497d3eba2bbff4d984e83"},{"version":"d78c2ec58d5e4e86dc662e9f124b3c5f8db6cb3cd64820d357f4cda7cb6cce6b","signature":"971350525207d09b8b25480bedb9997a4da410f0cb8a60a5e9ef4da3a76ec49e"},{"version":"27679e96d1bd38c5938178aaf4abe8627493090b63d6bae2ce8436e6a87ebe4d","impliedFormat":1},{"version":"ee8fcb09c02b9731957ae073ade2a78507b981e89c90ec37e7d91e8a4cd88e03","impliedFormat":99},{"version":"9e13456a7d8b7717b16044b1ecbd9e4760d335c5ecaf8967b236f8fa41318cb2","impliedFormat":99},{"version":"0ba90ee789528702e657fdfccfab87166648ce6705481ff56df9e1ad1dc9ef68","impliedFormat":99},{"version":"12a547397ef8c6bef7a46c20677520a43b2b633856408ba255625f7a5b93726f","impliedFormat":99},{"version":"aa294f6435de6f3d544c25eb8ecfbdb02eea0b52440e6c8fa70765dabe0a8f7a","impliedFormat":99},{"version":"2f00058a1c35652a558b39e4e78bae3c7e05dacb279d2002d5076f6dc371231c","impliedFormat":1},{"version":"e1e1e8a8d9b7e290797e25d3d73903f77ab2ded8b18618318d162c1ba2817e19","impliedFormat":1},{"version":"7fadb2778688ebf3fd5b8d04f63d5bf27a43a3e420bc80732d3c6239067d1a4b","impliedFormat":1},{"version":"a83242b7882cbc771e77513ce6752260e35d7e39c0e2ea043121875b48935a1a","signature":"c9eaf52d56c014f4a727c434496fcc4891af97982c2d89e1ef40c4fe259cd990"},{"version":"7b72f7d69e2576a3a1f00b5db3dd957c39488da3b2b80577e16725124df783d9","signature":"6b21d159652a34b4659fd8a920c8691c35860bc35fa302cb529c3d985a6653e4"},{"version":"e3d4e9a24b2c610c59dd9533eac26c4b2ba2a78ec995eeb234a636986f465156","signature":"76593ba3be31edfde36adf1bc33dca2364a2ca4c00d16bd5d5f1ef27fe8d8f02"},{"version":"1c9800fbae1b443d77672e6d3e715df7280479b7c41f08cb790e750f01b50d90","impliedFormat":99},{"version":"b4a7efd03bf5dae9816fa79a9964457c81d2aaa369ee7606402c5b7a9c8b2a3e","signature":"8a0fcce6dab9ddc6b0e309223b3cb2f699d5736669c1f8a65a6e0b7c7de98583"},{"version":"5e7e961796539a5cdc8417f8cd730593487cc2615c5cd5c50f50e8766f5cfa23","signature":"f42a55ae4cbab9f13002c4f8f945e2349462c6d9083ab7bd1792defee9ce317f"},{"version":"34779325c6b34e0c7966c2d1602b15cd6de8d56efb672ed2f8ee4bcb3fea6c25","impliedFormat":1},{"version":"88e980c953e6180527f7e572fbca98cab8458623dbe85868505e0920ec0207fc","impliedFormat":1},{"version":"524cdd6f29e66f9eb568b09db597b94561266d32eb1041aab8af8337efa4d116","impliedFormat":1},{"version":"62c39ca2a3880c7fe75786fb4cd5722731deb48272ac8e16a888fca60a6e3014","impliedFormat":1},{"version":"4d4d05b44285e2fabfd447662ced74ab397c8956b17534bd533e78ca70523a89","signature":"7ada549417c66eb7bfae9c1b2805f19c37348821d7290a08fa4335d43e758d5d"},{"version":"8174710d254034998a325526caffbe2a85182f493491b49a2ff443027e1edc42","impliedFormat":1},{"version":"a6a859ff4b9a8a65e24bb1afd1a56296a88502f35a460c16631ddb4c5d435d81","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ba59c8bbeed2cb75b239bb12041582fa3e8ef32f8d0bd0ec802e38442d3f317","impliedFormat":1},{"version":"8b56c1d50bc2cc8edac185291ce3ecd2e366d1f1d6718a377b0a008c40140d4a","impliedFormat":1},{"version":"529bbfc5a152cc988e3889eb4cdaef2cc5e300bc30cd61b76f4bd95094170b66","impliedFormat":1},{"version":"fe7a0a744b32b5ece036d9964d9f13bbd49b41f1acb88ec52581855e05fb81f0","impliedFormat":1},{"version":"f5958982fb8d178282ae264d74bcd3a3253a2680f1ed9d61ab808d59a931b0cc","impliedFormat":1},{"version":"8c25b088dcc5e1b699fd6bf49e98d5eae8294d01db43bedc7bed3632eed2d123","impliedFormat":1},{"version":"0d8e093e0fefd5592cde3ee8684cf5d72208559d3394691ce4225b66797d0ccf","impliedFormat":1},{"version":"e4bede85425b4d1c00417170aa7d3f9deee64a872b65b6e979fd476937327718","impliedFormat":1},{"version":"afcb36480aab479f3708bf344a2bf837b04727164b50300b83d6d44d5dfbadc4","impliedFormat":1},{"version":"37c5b27fbda2688158884095b272debe61302286fe5a6dbb029be1bf00b2647d","impliedFormat":1},{"version":"8944244f3eea9766b45b5c50e353c185ff100d33372aa8ea0fa1ec0b2434312c","impliedFormat":1},{"version":"d8a68546789280f9cc972607b0204abba12f6503aa66de51a181c4ec15ae0dda","impliedFormat":1},{"version":"790eb52f6c673e44c8e6158c24410e240bd5061204d3c5b775884aab45a11bd5","impliedFormat":1},{"version":"4a7dffc1c5eafc0c91a0a00fdec024099dac76ca8ef37f06d95e8a8bba489de3","impliedFormat":1},{"version":"b7a02414d6128ec02d76de5f2f8fc70cb00b7d746b32e9aec23f8808cd1202ea","impliedFormat":1},{"version":"13ffd164aeda0bf61256d5e4d309bef434ed32d2d1e32eec4416b1af8e7df4fa","impliedFormat":1},{"version":"7c6e02bb36510ab742ab46393b41df82d2e7a59366df3dbc4503dc4b740da684","impliedFormat":1},{"version":"1465a061f05e061c6640a6a693c31e7446e0b68cc58899b67460e85e51a85aab","impliedFormat":1},{"version":"c41007d08773f66dd2936b55ca42f76f2e8eb5cbdf075aa14843b5a2d19f1275","impliedFormat":1},{"version":"0040147eeca1a25dd7876b2517658935d0962d714adf952b37a5dfe6575a2a75","impliedFormat":1},{"version":"4aaa31cda049c1c8176b17865735abe2fcac498626a5de10a297d29f661f6b42","impliedFormat":1},{"version":"b4be5ae6cf425c81acf21f762e17e1e342328ecd023f4bcefefc47891954de3e","impliedFormat":1},{"version":"0fe5ecc966c8d695030ed651904c6bb816717650516f2453d6e1c97784fcbe6b","impliedFormat":1},{"version":"9f9aa39db46ce9236e1f0796b9678fdca3dd575c501f3babc5873aaefe691fb0","impliedFormat":1},{"version":"769dc05c2bbaf01cb1a224d71f2f9b028949e7282541023c3d48d88aab76df81","impliedFormat":1},{"version":"c549cd957879a126d09665683f8582c715916a9990b3271796ecde433c2329da","impliedFormat":1},{"version":"cfbc348145d9949321f05d5f13fd7b65e2c92aa48621b5702fefe08f47f08a83","impliedFormat":1},{"version":"eb410e862798fc66cfe8da3cabcf8216ba817a725a95b6f6d5427c27ce3007b5","impliedFormat":1},{"version":"781d60ecb967dc2fcf49d5adfe0d77b073fe560d02a0de488fc1e291bbbfe2c3","impliedFormat":1},{"version":"fd955a375470a31b0e788ae58ffc5f1eadb3aaa48320815da81ff83ac039d578","impliedFormat":1},{"version":"4e3e977058703e69e3c3cd20c0ec64bcea48f909e64636a7dfe5e4ad508a9de9","impliedFormat":1},{"version":"41e6f7585fa89dcb8a278fcdfafdbc732cf596cd2314da8ef646782ba72322cd","impliedFormat":1},{"version":"0fd7b6969fb0dcb918a42c1f0b4e302b225a25e5d14915e503a3ffab5639292a","impliedFormat":1},{"version":"c091709121218131ab15e301d858666b7bf780dcd4f67161b84cb01cbebd7955","impliedFormat":1},{"version":"fedf564b673fb0cf6d462e37cd12c234fbe3d88923398724d0bb3fea56221d8e","impliedFormat":1},{"version":"0a00bff7d5e28a2785e690efecf56fa92d6081cdca8d2e8ba4e8b569089b9615","impliedFormat":1},{"version":"3f4daa8074fb0dff7c730985b7dfea828308e62b83650c263914c839851e7cff","impliedFormat":1},{"version":"f568ea3a8f9f6a96d741132e6172e76d1ee844efb4d0febc199730fd8373de12","impliedFormat":1},{"version":"96a01ce9115baca4647c77e25d4ccb20d506f68ab4a52f72fb0304094360e730","impliedFormat":1},{"version":"187cd844e9a6ef5247dcc9df18d7617ab4a734d00edddccf8ea7f37496700aef","impliedFormat":1},{"version":"6e5d2a482d576b9fc29ff3dabbc050ebac0a28e95521701c756e3b839ece38a9","impliedFormat":1},{"version":"a130d95545948a5539c3af75038154956805445f70e74cc99e8fcc90963764ec","impliedFormat":1},{"version":"3ab551e2d557e783d3aeb42bc84370bd38b137ed9f077f97eb31f49afe26db8f","impliedFormat":1},{"version":"fd8236c51f2515f4b11a746132aa1416f9b95d5c2e95630ff60708432c7940bc","impliedFormat":1},{"version":"2da076dd4eecc0c0f23292f0278a04ddc5224f921e6e8f97617cbf7b41717afc","impliedFormat":1},{"version":"f09a30043ac10a4e63de656f399bfa15e4ef4cf73118058a23474de3f1d4be73","impliedFormat":1},{"version":"925233a805205ce31ed53dd71851f143e7661c8f0c1e35aa41c7ed22a4a4bb52","impliedFormat":1},{"version":"664e1fb73a01ea6c7ede041c9da3573f74a963e2c355797ab5d00725beda0dd8","impliedFormat":1},{"version":"5b2e86d7ecd453e7e80270d92210a97160a63a9d2913b673ebc3d7097a289089","impliedFormat":1},{"version":"42638193b815f0bfa1f594c46f303b8e3a045e95affabc5c38405af06b0d2726","impliedFormat":1},{"version":"908dd1c9ded5ff5e471a30d08199544c4bf0c9e880a2fd60af51960ad31186f7","impliedFormat":1},{"version":"e1667177ab030fba7a784c8fe2dbe446e1ea6284758be955d9acfce4f7d88c8e","impliedFormat":1},{"version":"f287b2f8099b74b1f51211168a7dac65b3c5f0a433641fcadee223835ddea091","impliedFormat":1},{"version":"13a70ff4ebcda2c8096c4779a94e5047968fcce30ff11deba878cf07263e2b2c","impliedFormat":1},{"version":"a088d467b0c5922b72c597ff72d07057453c38db1cf05c4652998b3212f8561e","impliedFormat":1},{"version":"b8a71ed67fea0b21aa004bd3fe6c512f5358206be5c8ffb498a250fe41478a69","impliedFormat":1},{"version":"baa19a7a4df948ede8d9913ee128ff0c5948907619495ce58a90a8f1180056fb","impliedFormat":1},{"version":"eefcad1724cc01cccd3010c999b432ae5708653dc6e340ac854b0c006c431147","signature":"547ee2fc67d9614b6fedb32c74e620662788259fb99f14c1d572072a138d6334"},{"version":"cdcfafe23eb9b5dffb14920dea268341a39c0579f253a08da70d78c062e1388e","signature":"71837c482b51cff5a7ef82169458282e659872567f3a43d450f0f6a4bf344fe5"},{"version":"0c81cba34d29a923a4d7de38fc49ae44d8d5162e628129b8e9c7b300031578d6","signature":"fed4ae0c1742affa8ff74d9002582dcc6e6e34c6854f45f6939164f9834d162a"},{"version":"83a8891d5d4a65f52d4944b96f94b5d38076ec5a2ac59faac23d4b0ff5ac9688","signature":"396022d70f875b546e6765bff6ee0cca94783f69d8eb67cb3159186d34607081"},{"version":"fb64f88311febcb3f6138669769fdd0f9fd568778e127bb83ec72058ea22c7f4","signature":"df2b3bc9cd2d3e9d53a47f8979080d798a0cffbf9bd2c0331c22a5a7851c2a9a"},{"version":"8fab5748be05467cb561536b889d25bb65e929d0bf62eedc809a1c8215e095fd","signature":"4a7fa5946a4677a9d9940c218156afbccdd4cc4139494804321ca851b2a060b8"},{"version":"b46d699ed2ec947881ce83d32ffbb3ef5865420b473e684082804c98e13eaf05","signature":"938a1dbd6d0c49ab3e6424cb422dd1ec04bd799f8114cf2879592531c949a320"},{"version":"2b6134bc03966f8d3c5c7ba9810481b7d90dd4652808e29ae0b960d9042c1996","signature":"7e1deacbf78e794d095385b0da0095ec3a4d77647faedb6a412c8770145b97e4"},{"version":"e597bf4ba17a99ba8a95fd9b8b600632cd600b592d1e551369aa33d1cb36d155","signature":"14e4ff11aa25354ea1d10a85cf5a8cfb84d36c9d1a5377c35efbb095e3d4a8c2"},{"version":"83b124c9c5448ac70b7d1803da9721484ef4f6313566e3ed6519287186d4ec85","signature":"7e531419774a3d2c321ccffd3e3168de599b62df755c274636645c6204f8afdb"},{"version":"1e46745c9411767f0a080c9ae8da207e3b64ae674dbdb4c7c59d6b3578e99bdd","signature":"de974eff56c3d8605aed40681f0aa7b41625593699518afe5f9b602fc8251241"},{"version":"d2702c0e26fad0fa5f8c27c5ee21d5dd925f1ece442468be9836f3ba8a8b72b7","signature":"9fd8ab44c802f1f1917a6fdac3e7b8665b949d0ca5a41bf12527d71aa9394c18"},{"version":"3d3898c906518e61a7771d2b4e1d760f2b9603ad0c6842a26de2c2c61c3eb780","signature":"da658a053d894fe7d09999ce433c723913c034fa0f33d0c2dea5bc864186fc16"},{"version":"03cffcc9007577f806a696218d98ef25058d5f80e98e5f4a4b2d30115cab2eb2","signature":"fbffb99a754a5d3b8145b10e9d8613111c8baf377df820ebe61f330c5e120905"},{"version":"4da2c9fa61755caa002e250a659abc8f47d326a2d50fad3d3e681942921ca09c","signature":"67cd6d15f025f6c440f8d21200a6304c81228d654b55ddcf9b7d83d7decd2abf"},{"version":"aba891d2f093ee2c63684f4cf93538a0c2a7354b8d5c68e9fd026eaf5f088eba","signature":"dad577e08368c9f056b907bed9f204e62b0218964f4cb781dc9dd09cead9594b"},{"version":"9591e532c8161b6558a5ad278e89ebb2459b23db90d6503633625714dd550d17","signature":"37e7f3eede83ee563132092bdb1f49b8bb48bf20af2eb6e567c3789978c253be"},{"version":"1bdafdd367723b48e6bf36cd922ca80f0c1243495ef2a334ec133b613d9289f3","signature":"074bcbf06c4fd920ecea4be4a3672596c590d9d2d22c0c6752ede0b7704a82e6"},{"version":"fe068cc57c7024898ddbbec8afc861f70599418a0432cefc34f987c16525c2e2","signature":"b683a9c029c89f5ee76117854d1d6a9ed4028f9b644a5bae399b00584538e1d6"},{"version":"54223f3e9feff7bfa86a919a7cb01619554e38209a29c3d1c4ab2b4a87cf7441","signature":"8c6d489fcf83b162225fc03a7e267e158478ea8b716bc59dea747e04c9b460b0"},{"version":"3b204ce75621b401f70a65c4eee1fedbdbdd258718152140116dc1d97cd50c6f","signature":"e2cde99cd2da4d5f746def0403859882abb1c2d33a33c4397bee680817624f8d"},{"version":"66fea30c9286005b38d2453ffb00ebdc31e415e1ed076d6d8b242a5636e2d996","signature":"12b395303350c28b8faaee1fbac3efb3000df7506e0f5dcdfb70072c0bc5d57a"},{"version":"3e7ecac52940427ac55ff3732217eef3657271860a68c0383badc9c4be93fb5a","signature":"a885687ab177c32fef9137530c46c377cd070f78f0a2dde7e9e0f5351ea49ca9"},{"version":"1c221cf45665efce803648feb81d021eda8c19e7cf62cd22cb582c776f5fb492","signature":"803387a6e4080c884a07897daa60764e067ab005eeb28871393d96321c5181b9"},{"version":"0f52965d797a66a86433b5d21018f6a933b8778bd746c34e15c42aeeaa5242a1","signature":"4acf01107fc8ba6dd53f0826dfa6045d47cd095778b76cb3a65b76eb199a79a2"},{"version":"fe63c6696cde4462504953b6dcae55ced887719bedb223437691b0639c47d1f7","signature":"87c311f30be6508c25811ac3c33c7dfe7078288c96f92f619b0e6f5bf4eb9d4c"},{"version":"efd3f5f350bbb5354d39baff90495e67c29bdb088d52294f0106dd06019f2c5a","signature":"9a6789159a2b28e537eae47ae1e6064ccb0c1d833e3e0cf99fb985b808f36508"},{"version":"9a7e285f541d2f697dbad3130fd99b35c5b46a44c463745af7d0d0b5ad8e8e3f","signature":"b728a0a3ff33276960bee90fb000aea1129e5dfafd1e83f16c4bf2b9bb191e48"},{"version":"f8b109007ce44d343d31066d4a1b26d921c04aeb627ed80292fcf806a2f823a0","signature":"b856d5a0cfa6429db8b594b1340479cd8fd8aac38e34cdcd2e64d744a6002985"},{"version":"515f42aaa0d3411ba9ccc86c253583f6de9a6e3d6d548964cfa2d4b0ebdf8cf5","signature":"d50dbd6b718c5700b4729c7467d2a9e6bf40d45cc9e26145b80492c05a2bfd21"},{"version":"db3a143d6c0833bcd7971346c45739ed7cee5b8945e050267e9e61b5a5b949e3","signature":"a93ae1e1b1207294b997c5cea7466faa2fb86903dd4503be4f287f8682c5e9bd"},{"version":"2d6fdf0611ba569a0aa8dc0650b842721d2f5d6e966ffb9e29a01cbbe9967c06","signature":"4c128135f041d17915f75e4824a0b4eb6e5b8729441c2e74ef603a40f25d3c54"},{"version":"2b2dab1fefa18016532d2bdf3c705ca644573675b8a4ffaa661aa8cca3d113cb","signature":"219e33c8add31838c77d1dd99414fd52b9cc1c26dbeafbb7c671ee3196cbe16a"},{"version":"4c446a8a6b53b4733542b6ebb8b4767d390f55695570240253bf43f3dc4649ab","signature":"563c8c8f4cf6f3362841c1f425426723cfe3a3da0296edb247068d47a80afb67"},{"version":"8259dce3472c26f512965026ec04754f357787413d21244030c60ff1f7b16720","signature":"c0fca7e32830ee81d7e644ebf2d29412cceca074fea09095bd2f0f9c828bfaac"},{"version":"cd5ea046dea7297b6cb9977f07ca3027a883b005e65d26448aa3fc4563d483ca","signature":"e4b4f8cfb4fd94ffb50c7ba040e42a0167cc59f5fda6159d8d629fa22fe7044d"},{"version":"b5945af70d0d60ff0f6ff207fa18973712387963f7dba16efa1e9e10ce611a94","signature":"ead8db7dede5e1275b82fdf896f0f5582a394b8a922f30a22478484032a90cf7"},{"version":"f84ee6684444f1addab5a377967a517acb4bc4906a9889cc0e7f7a1d5a063bc6","signature":"7b07da36378a22a8600a98b89725d9167ce0573efa787a5c6a62feeb5645f63a"},{"version":"955e0b81ea64892d73fc9406cd4792adfb637c7113daa00de5c11e7f8098da35","signature":"8d5a71cde6d35033e2e1e01fdf0a445146cc90424d468fc2c578d15eaf11aaec"},{"version":"6ad9c0ad9d5930092a960adaa4b83afa3c04c107e632a28d9547fe795d5464a3","signature":"124f7d0a32ad65b42a792727bc44631075662a4ec7c838bc50f582eb8af951b3"},{"version":"6164b7c72b1d676fa7c197b45f86ba4f03e6ce9ef65525ffaa71c21ca7551ccb","signature":"4c36844aa8702df686c1fe6cfcef41e4367b253dc46ee9acc832b1c288294b79"},"8f6acfbf0c5bb3eaf96aca99418f374f34697a025138013e5349705dd2c423fd",{"version":"eef204f061321360559bd19235ea32a9d55b3ec22a362cc78d14ef50d4db4490","affectsGlobalScope":true,"impliedFormat":1},{"version":"a356997414bbba2a82fa683ed636c9c117810d8a4813ce316bc0e44d42379345","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"6eca705d784aa2e8b74b7b20c4e0fd024938509ea69734650260e588a7ea59c7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"d059c0bc02432c05b0a23248696198a3ee8f6e6ae13893700da879f88d078b20","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"724df2d1a86c3aead77b1fca726a5e81e4ea5085d936191791e5472b3f3ce0d4","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"79c7dc6362f393b13ea113a6bb7fdbd244d5a9913b03ec5f4fe29b8a99b5e7c5","affectsGlobalScope":true},{"version":"baf3507287629018d38c88e2636dd041550c70620bb774127011eb6dc3b361c0","impliedFormat":1},{"version":"6175dda01fddf3684d6261d97d169d86b024eceb2cc20041936c068789230f8f","impliedFormat":1},{"version":"a6a55e87340abd0dfbc19ed6ea74ca452e87a55773a10190ee80017e2cbab6ee","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2cd3901fbe4b0eae51b613f2ea0bfe1d41fef7558a432a6925352ddf80dab292","signature":"b1bd501692ab4fb4b1663e8c1a5a470d88356845dcb6e483f39078acc4773a69"},{"version":"5146a9443a3faed571dbbbb08413ddb282d4c014ef3d41522deb0e56f047bb34","signature":"eb18d9b92488eaa6b4842f09bca865250c972e7d7d9b9bd4353a16e36f549cdf"},{"version":"4adb4e9de3b5df0ddd82d976df05f4ac96324f785c6149d68be98f14e9381a35","signature":"d565ce61f91e5a05f0a0609fec062029bd18465b07d2b481b09d8d163d041283"},{"version":"e6db1b5431c965ec9c046b50d2fe05754c1068031e5c6b4f1b35b8cd42035c54","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3898fbfaf2614a88e6d809efc2f12ffb14a19a205e1b0f4ddbcc275c60a6a473","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"63e56b51b29b814906f0399fda1144ff1414925bc3f9b52e470a6f405286a193","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2a9957c2aeeb52c8a3aa2fca0435c2868e0d279ca05ea1a59ac8953e37f2519b","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3da6e5c3cf41bea4d1d43c73fcf55204f0e226567429c2d4b0ec23e0bd165492","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f5386fc09037cb6c337eb978484628c9ed50b4e227a6b05c2e6116b221d5d4c0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bc4ef2a994d41d7fcd3c39f91d9f583c4ebd0f6737904446171deaaa274a8973","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"36d94f0d4392c0162d752b4e50c037938bbffd4432855e2e09882fcff10424a0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"02a646dee15586ef298172044b52c6723c7f6a45bf038e58a6e6962f02574ae9","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"ec84642c703600865d04a5574e5b45f1bb8f9ebb890033d2218c05acf0e52191","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"29f72ec1289ae3aeda78bf14b38086d3d803262ac13904b400422941a26a3636","affectsGlobalScope":true,"impliedFormat":1}],"root":[227,228,301,[303,307],[317,319],321,322,327,[387,428],[430,434],[437,450]],"options":{"allowJs":false,"checkJs":false,"composite":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"inlineSources":true,"module":1,"newLine":1,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"referencedMap":[[216,1],[212,2],[211,3],[213,2],[214,2],[215,4],[210,5],[220,6],[83,6],[222,6],[224,7],[223,6],[221,6],[86,6],[85,8],[87,9],[217,10],[84,6],[219,11],[218,12],[302,13],[429,6],[451,6],[316,14],[150,15],[151,15],[152,16],[90,17],[153,18],[154,19],[155,20],[88,6],[156,21],[157,22],[158,23],[159,24],[160,25],[161,26],[162,26],[163,27],[164,28],[165,29],[166,30],[91,6],[89,6],[167,31],[168,32],[169,33],[209,34],[170,24],[171,35],[172,24],[173,36],[174,37],[175,38],[176,39],[177,39],[178,39],[179,40],[180,41],[181,42],[182,43],[183,18],[184,44],[185,44],[186,45],[187,6],[188,6],[189,46],[190,47],[191,46],[192,48],[193,49],[194,50],[195,51],[196,52],[197,53],[198,23],[199,54],[200,55],[201,56],[202,57],[203,58],[204,59],[205,60],[206,61],[92,24],[93,6],[94,62],[95,6],[96,6],[97,63],[98,6],[141,64],[142,65],[143,66],[144,66],[145,67],[146,6],[147,18],[148,68],[149,65],[207,69],[208,70],[329,71],[436,72],[435,6],[330,73],[320,6],[314,74],[364,75],[365,6],[366,76],[368,77],[367,75],[371,78],[369,79],[370,80],[99,6],[315,6],[308,6],[225,6],[226,74],[328,6],[386,81],[381,82],[383,83],[333,6],[379,84],[384,85],[380,86],[331,87],[332,88],[334,6],[382,89],[385,90],[313,91],[310,92],[311,93],[309,6],[312,6],[326,94],[323,95],[325,96],[324,96],[81,6],[82,6],[13,6],[14,6],[16,6],[15,6],[2,6],[17,6],[18,6],[19,6],[20,6],[21,6],[22,6],[23,6],[24,6],[3,6],[25,6],[26,6],[4,6],[27,6],[31,6],[28,6],[29,6],[30,6],[32,6],[33,6],[34,6],[5,6],[35,6],[36,6],[37,6],[38,6],[6,6],[42,6],[39,6],[40,6],[41,6],[43,6],[7,6],[44,6],[49,6],[50,6],[45,6],[46,6],[47,6],[48,6],[8,6],[54,6],[51,6],[52,6],[53,6],[55,6],[9,6],[56,6],[57,6],[58,6],[60,6],[59,6],[61,6],[62,6],[10,6],[63,6],[64,6],[65,6],[11,6],[66,6],[67,6],[68,6],[69,6],[70,6],[1,6],[71,6],[72,6],[12,6],[76,6],[74,6],[79,6],[78,6],[73,6],[77,6],[75,6],[80,6],[117,97],[129,98],[115,99],[130,70],[139,100],[106,101],[107,102],[105,103],[138,74],[133,104],[137,105],[109,106],[126,107],[108,108],[136,109],[103,110],[104,104],[110,111],[111,6],[116,105],[114,111],[101,112],[140,113],[131,114],[120,115],[119,111],[121,116],[124,117],[118,118],[122,119],[134,74],[112,120],[113,121],[125,122],[102,70],[128,123],[127,111],[123,124],[132,6],[100,6],[135,125],[335,6],[350,126],[349,127],[351,127],[353,128],[354,128],[352,6],[362,129],[355,130],[356,6],[357,130],[358,130],[359,130],[348,130],[360,128],[361,130],[363,131],[336,6],[347,132],[338,133],[339,133],[340,134],[337,135],[341,6],[342,135],[343,136],[344,135],[345,137],[346,135],[373,138],[372,139],[377,140],[376,141],[374,142],[375,142],[378,143],[300,144],[295,145],[298,146],[296,146],[292,145],[299,147],[297,146],[293,148],[294,149],[288,150],[233,151],[235,152],[287,6],[234,153],[291,154],[289,6],[236,151],[237,6],[286,155],[232,156],[229,6],[290,157],[230,158],[231,6],[238,159],[239,159],[240,159],[241,159],[242,159],[243,159],[244,159],[245,159],[246,159],[247,159],[248,159],[249,159],[250,159],[252,159],[251,159],[253,159],[254,159],[255,159],[285,160],[256,159],[257,159],[258,159],[259,159],[260,159],[261,159],[262,159],[263,159],[264,159],[265,159],[266,159],[267,159],[268,159],[270,159],[269,159],[271,159],[272,159],[273,159],[274,159],[275,159],[276,159],[277,159],[278,159],[279,159],[280,159],[281,159],[284,159],[282,159],[283,159],[321,6],[426,6],[430,161],[317,6],[425,162],[301,163],[392,164],[228,6],[393,164],[411,164],[413,164],[394,164],[415,164],[414,164],[417,164],[418,164],[420,164],[422,164],[395,164],[421,164],[423,164],[419,164],[396,164],[416,164],[397,164],[398,164],[399,164],[400,164],[401,164],[402,164],[403,164],[404,164],[405,164],[406,164],[410,164],[412,164],[437,165],[391,166],[424,167],[407,168],[408,164],[409,164],[389,6],[322,169],[304,6],[327,170],[306,171],[431,172],[307,170],[432,173],[318,174],[441,175],[442,175],[443,175],[444,175],[438,6],[439,6],[445,176],[440,177],[446,178],[447,179],[448,175],[449,175],[450,175],[387,170],[305,6],[390,180],[319,181],[227,182],[433,183],[303,6],[388,170],[434,6],[427,184],[428,185]],"latestChangedDtsFile":"./lib/mock/typeCheck.test.d.ts","version":"5.9.3"} \ No newline at end of file diff --git a/src/lib/mapCreator.ts b/src/lib/mapCreator.ts index a6c3ec8269..c474da2a2b 100644 --- a/src/lib/mapCreator.ts +++ b/src/lib/mapCreator.ts @@ -77,11 +77,17 @@ export class MapCreator { } private robotXtoCanvasX(image: any, robotCoord: number): number { - return (robotCoord - image.position.left) * VISUAL_BLOCK_SIZE; + // Calculate base X + const x = (robotCoord - image.position.left) * VISUAL_BLOCK_SIZE; + // Add centering offset (+1.5px) to align with pixel center + return x + VISUAL_BLOCK_SIZE / 2; } private robotYtoCanvasY(image: any, robotCoord: number): number { - return (image.dimensions.height / VISUAL_BLOCK_SIZE + image.position.top - robotCoord) * VISUAL_BLOCK_SIZE; + // Calculate base Y + const y = (image.dimensions.height / VISUAL_BLOCK_SIZE + image.position.top - robotCoord) * VISUAL_BLOCK_SIZE; + // Add centering offset (-1.5px) to align with pixel center + return y - VISUAL_BLOCK_SIZE / 2; } // -------------------- @@ -177,8 +183,9 @@ export class MapCreator { ) { if (!pathSegments || pathSegments.length === 0) return; - const offsetX = 4; - const offsetY = -4; + // No additional offsets required + const offsetX = 0; + const offsetY = 0; const w = (tempCtx as any).canvas.width; const h = (tempCtx as any).canvas.height; @@ -458,7 +465,8 @@ export class MapCreator { const tempCanvas = createCanvas(ctx.canvas.width, ctx.canvas.height); const tempCtx = tempCanvas.getContext("2d"); - this.drawPathSegments(ctx, tempCtx, pathSegments.mainPath, LEGACY_COLORS.path, lwMain, 0.5); + this.drawPathSegments(ctx, tempCtx, pathSegments.mopPath, "rgba(255, 255, 255, 1)", 6.5 * VISUAL_BLOCK_SIZE, 0.18); + this.drawPathSegments(ctx, tempCtx, pathSegments.mainPath, LEGACY_COLORS.path, lwMain, 1.0); } private drawActiveZones(ctx: ExtendedContext2D, zones: any, image: any) { diff --git a/src/www/coords.test.ts b/src/www/coords.test.ts index 626d4eba35..cf9c748935 100644 --- a/src/www/coords.test.ts +++ b/src/www/coords.test.ts @@ -1,54 +1,61 @@ -// -// coords.test.ts -// - import { describe, it } from "vitest"; import { expect } from "chai"; -import { localCoordsToRobotCoords, robotCoordsToLocalCoords } from "./coords"; +import { localCoordsToRobotCoords, robotCoordsToLocalCoords, VISUAL_BLOCK_SIZE, GRID_CENTER_OFFSET } from "./coords"; -// --- Mock-Daten (basierend auf deinen Logs) --- +// --- Mock Data (Scale = 3 matches reality) --- const MOCK_PARAMS = { - scaleFactor: 8, // Dein Wert aus der Config (angenommen) - left: 284, // aus map.IMAGE.position.left - topMap: 364, // aus map.IMAGE.position.top - imageHeight: 2880, // aus map.IMAGE.dimensions.height - mapMaxY: 0 // Wird nicht mehr verwendet, aber benötigt vom Interface + scaleFactor: 3, // VISUAL_BLOCK_SIZE + left: 284, // map.IMAGE.position.left + topMap: 364, // map.IMAGE.position.top + imageHeight: 2880, // map.IMAGE.dimensions.height + imageWidth: 2880, + mapMaxY: 0 }; -// Deine bekannten Test-Werte aus dem Log -const KNOWN_WORLD_PIXEL = { x: 1744.85, y: 1672.19 }; -const KNOWN_ROBOT_COORDS = { x: 25105, y: 25749 }; - +// Known Point: Robot @ (25105, 25749) +// Let's manually calculate expected WORLD pixel +// X = (25105 / 50 - 284) * 3 + 1.5 +// X = (502.1 - 284) * 3 + 1.5 = 218.1 * 3 + 1.5 = 654.3 + 1.5 = 655.8 +// Y = (364 + 2880 - 25749 / 50) * 3 - 1.5 +// Y = (3244 - 514.98) * 3 - 1.5 = 2729.02 * 3 - 1.5 = 8187.06 - 1.5 = 8185.56 -// --- Die Tests --- - -describe("Koordinaten-Umrechnung (mit Chai)", () => { +const KNOWN_ROBOT_COORDS = { x: 25105, y: 25749 }; +const EXPECTED_WORLD_PIXEL = { x: 655.8, y: 8185.56 }; - it("sollte Pixel korrekt in Roboter-Koordinaten umwandeln (Statisch)", () => { - const calculated = localCoordsToRobotCoords(KNOWN_WORLD_PIXEL, MOCK_PARAMS); +describe("Coordinate Conversion (Scale=3, Centered)", () => { - expect(calculated.x).to.equal(KNOWN_ROBOT_COORDS.x); - expect(calculated.y).to.equal(KNOWN_ROBOT_COORDS.y); + it("should export constants", () => { + expect(VISUAL_BLOCK_SIZE).to.equal(3); + expect(GRID_CENTER_OFFSET).to.equal(1.5); }); - it("sollte Roboter-Koordinaten korrekt in Pixel umwandeln (Statisch)", () => { + it("Robot -> Local: Should apply Scale=3 and Offsets (+1.5, -1.5)", () => { const calculated = robotCoordsToLocalCoords(KNOWN_ROBOT_COORDS, MOCK_PARAMS); - - // Toleranz von 1 Pixel wegen Rundungsdifferenzen - expect(calculated.x).to.be.closeTo(KNOWN_WORLD_PIXEL.x, 1); - expect(calculated.y).to.be.closeTo(KNOWN_WORLD_PIXEL.y, 1); + expect(calculated.x).to.be.closeTo(EXPECTED_WORLD_PIXEL.x, 0.01); + expect(calculated.y).to.be.closeTo(EXPECTED_WORLD_PIXEL.y, 0.01); }); - it("sollte ein perfekter Round-Trip sein", () => { - // Nimm einen sauberen Startwert - const startPixel = { x: 1800, y: 1700 }; + it("Local -> Robot: Should reverse correctly (Round Trip)", () => { + // Start with World Pixel + const startPixel = { x: 655.8, y: 8185.56 }; - // Pixel -> Roboter -> Pixel + // Pixel -> Robot const robotCoords = localCoordsToRobotCoords(startPixel, MOCK_PARAMS); + // Robot -> Pixel const pixelCoords = robotCoordsToLocalCoords(robotCoords, MOCK_PARAMS); - // Muss wieder nahe am Startwert sein (Toleranz 1 Pixel) - expect(pixelCoords.x).to.be.closeTo(startPixel.x, 1); - expect(pixelCoords.y).to.be.closeTo(startPixel.y, 1); + // Should be close (rounding errors in mm conversion are normal, so ~1-2px tolerance is fine) + // Note: localCoordsToRobotCoords uses Math.round(), creating quantization. + expect(pixelCoords.x).to.be.closeTo(startPixel.x, 3); + expect(pixelCoords.y).to.be.closeTo(startPixel.y, 3); + }); + + it("Centering Logic: Should place a robot exactly in the center of a grid block", () => { + // If robot is exactly at (left + 0) * 50 = left * 50, it is at Grid Index 0. + // Result should be 0 * 3 + 1.5 = 1.5 + const originRobot = { x: MOCK_PARAMS.left * 50, y: 0 }; // Y is irrelevant for X-test + const calculated = robotCoordsToLocalCoords(originRobot, MOCK_PARAMS); + + expect(calculated.x).to.equal(1.5); }); }); \ No newline at end of file diff --git a/src/www/coords.ts b/src/www/coords.ts index d09feeb3d4..ac6cb0e8b2 100644 --- a/src/www/coords.ts +++ b/src/www/coords.ts @@ -16,6 +16,9 @@ interface MapParams { imageHeight: number; // Unscaled Pixel Height } +export const VISUAL_BLOCK_SIZE = 3; +export const GRID_CENTER_OFFSET = VISUAL_BLOCK_SIZE / 2; + /** * Converts LOCAL "world" pixel coordinates (px, Y-down) back to ROBOT coordinates (mm). * Used for Click-Tests, GoTo, and Zones. @@ -24,10 +27,14 @@ export function localCoordsToRobotCoords(localPoint: Point, params: MapParams): if (!params) return { x: 0, y: 0 }; // X-Axis: (Unscaled Pixel X + Offset X) * 50 - const robotX = Math.round((localPoint.x / params.scaleFactor + params.left) * MM_PER_PIXEL); + // Inverse of Draw: (Point - Offset) / Scale + const robotX = Math.round(((localPoint.x - GRID_CENTER_OFFSET) / params.scaleFactor + params.left) * MM_PER_PIXEL); - // Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_px / s) * 50 - const robotY = Math.round((params.imageHeight / params.scaleFactor + params.topMap - localPoint.y / params.scaleFactor) * MM_PER_PIXEL); + // Y-Axis (Inverted Logic): ((H_px + top_px) - (Y_px - Offset) / s) * 50 + // Note: imageHeight is already unscaled, do NOT divide by scaleFactor. + // Inverse of Draw (Y): (Top + Height - Y_mm/50) * Scale + Offset + // => Y_mm/50 = Top + Height - (Y_pix - Offset) / Scale + const robotY = Math.round((params.imageHeight + params.topMap - (localPoint.y - (-GRID_CENTER_OFFSET)) / params.scaleFactor) * MM_PER_PIXEL); return { x: robotX, y: robotY }; } @@ -39,11 +46,21 @@ export function localCoordsToRobotCoords(localPoint: Point, params: MapParams): export function robotCoordsToLocalCoords(robotPoint: Point, params: MapParams): Point { if (!params) return { x: 0, y: 0 }; - // X-Axis: (mm / 50 - Offset px) * scale - const worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * params.scaleFactor; + // The map image is generated with 3 pixels per grid unit (VISUAL_BLOCK_SIZE=3). + // So we must scale the coordinates by 3 to match the image features. + const correctScale = VISUAL_BLOCK_SIZE; + + // X-Axis: Center in the middle of the grid block (0 -> 1.5) + const offsetX = GRID_CENTER_OFFSET; + + // Y-Axis: Center in the middle of the grid block (0 -> -1.5 inverted) + const offsetY = -GRID_CENTER_OFFSET; + + // X-Axis: (mm / 50 - Params) * Scale + Offset + const worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * correctScale + offsetX; - // Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_mm/50) * scale - const worldY = (params.imageHeight / params.scaleFactor + params.topMap - robotPoint.y / MM_PER_PIXEL) * params.scaleFactor; + // Y-Axis: (Top + Height - Y_mm/50) * Scale + Offset + const finalY = (params.topMap + params.imageHeight - robotPoint.y / MM_PER_PIXEL) * correctScale + offsetY; - return { x: worldX, y: worldY }; + return { x: worldX, y: finalY }; } diff --git a/src/www/map.ts b/src/www/map.ts index 132dfd66e9..57cf4eb3c7 100644 --- a/src/www/map.ts +++ b/src/www/map.ts @@ -90,7 +90,7 @@ const UI_CONSTANTS = { PIN_WIDTH_BASE: 29, PIN_HEIGHT_BASE: 24, PIN_Y_OFFSET_BASE: 5, - PATH_MOP_WIDTH_BASE: 7, + PATH_MOP_WIDTH_BASE: 6.5, PATH_MAIN_WIDTH_RATIO_BASE: 0.5, PATH_BACKWASH_WIDTH_BASE: 0.5, }; @@ -232,35 +232,28 @@ class MapApplication { // Add carpet layer (Vector SVG) this.carpetGroup = this.mainGroup.append("g").attr("class", "carpet"); - const pathOffsetX = 4; - const pathOffsetY = -4; - this.mopPathGroup = this.mainGroup .append("g") .attr("class", "mop-paths") - .style("opacity", 0.18) - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .style("opacity", 0.18); this.pathGroup = this.mainGroup .append("g") .attr("class", "paths") - .style("opacity", 0.5) - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .style("opacity", 0.5); this.backwashPathGroup = this.mainGroup .append("g") .attr("class", "backwash-paths") - .style("opacity", 0.2) - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .style("opacity", 0.2); this.pureCleanPathGroup = this.mainGroup .append("g") - .attr("class", "pure-clean-paths") - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .attr("class", "pure-clean-paths"); this.chargerGroup = this.mainGroup.append("g").attr("class", "charger"); this.obstacleGroup = this.mainGroup.append("g").attr("class", "obstacles"); this.zoneGroup = this.mainGroup.append("g").attr("class", "zones"); this.robotGroup = this.mainGroup.append("g").attr("class", "robot"); this.pinGroup = this.mainGroup.append("g").attr("class", "pins"); - this.roomNameGroup = this.svg.append("g").attr("class", "room-names"); + this.roomNameGroup = this.mainGroup.append("g").attr("class", "room-names"); this.pinGroup .append("image") @@ -281,20 +274,15 @@ class MapApplication { } private setupConnection() { - console.log("--- DEBUG START ---"); - console.log(`Page loaded from: ${window.location.protocol}//${window.location.hostname}:${window.location.port}`); - const instance = this.getQueryParam("instance"); if (instance === null) { document.body.innerHTML = "

Error: No instance specified in URL.

"; return; } this.instanceId = `roborock.${instance}`; - console.log(`Initializing instance: ${this.instanceId}`); const connCallbacks: ConnCallbacks = { onConnChange: async (isConnected: boolean) => { - console.log("Connection state changed: " + isConnected); if (isConnected) { this.fetchRobotList(); } @@ -308,13 +296,10 @@ class MapApplication { }; const socketUrl = `${window.location.protocol}//${window.location.hostname}:${window.location.port}`; - console.log(`Forcing socket.io connection to: ${socketUrl}`); - this.connection.init({ name: this.instanceId, connLink: socketUrl }, connCallbacks, true); } private fetchRobotList() { - console.log("Fetching robot list via getObjectView..."); const startKey = `${this.instanceId}.Devices.`; const endKey = `${this.instanceId}.Devices.\u9999`; @@ -323,7 +308,6 @@ class MapApplication { .then((res: { rows: { id: string; value: any }[] }) => { const robots: Robot[] = []; if (res && res.rows) { - console.log(`getObjectView found ${res.rows.length} devices.`); res.rows.forEach((row) => { const idParts = row.id.split("."); const duid = idParts[idParts.length - 1]; @@ -333,7 +317,6 @@ class MapApplication { } if (robots.length === 0) { - console.warn("No devices found via getObjectView."); const instanceDuid = this.getQueryParam("instance"); if (instanceDuid) { this.robotSelect.innerHTML = ""; @@ -409,7 +392,6 @@ class MapApplication { switch (id) { case mapBase64StateId: - console.log(`Received new CLEAN map Base64 for ${duid}`); this.pinGroup.select("image.goto-pin").style("display", "none").style("opacity", 0); this.drawBackgroundImage(state.val as string); break; @@ -417,9 +399,9 @@ class MapApplication { case mapDataStateId: try { this.map = typeof state.val === "string" ? JSON.parse(state.val) : state.val; - console.log("Map Data:", this.map); if (this.map && this.map.IMAGE) { this.mapImage = this.map.IMAGE; + this.updateMapImageSize(); this.drawRobotAndCharger(this.map.ROBOT_POSITION, this.map.CHARGER_LOCATION); this.drawPaths(this.map.PATH, this.map.MOP_PATH); this.drawObstacles(this.map.OBSTACLES2); @@ -442,11 +424,25 @@ class MapApplication { this.onStateChange(mapDataStateId, states[mapDataStateId]); }); } - // ----------------------------------------------------------------------------- // Drawing Methods // ----------------------------------------------------------------------------- + private updateMapImageSize() { + if (!this.image.naturalWidth || !this.image.naturalHeight) return; + + // Use natural size of the image (1:1 scale) + const displayWidth = this.image.naturalWidth; + const displayHeight = this.image.naturalHeight; + + this.mapImageElement + .attr("href", this.image.src) + .attr("width", displayWidth) + .attr("height", displayHeight) + .attr("transform", null) + .style("image-rendering", "pixelated"); + } + private drawBackgroundImage(mapBase64: string) { if (!mapBase64) { this.mapImageElement.attr("href", null); @@ -473,49 +469,59 @@ class MapApplication { const pixels = imageData.data; for (let i = 0; i < pixels.length; i += 4) { const alpha = pixels[i + 3]; - if (alpha > 0) { + if (alpha > 50) { const x = (i / 4) % this.image.width; const y = Math.floor(i / 4 / this.image.width); - this.mapMinX = Math.min(this.mapMinX, x); - this.mapMinY = Math.min(this.mapMinY, y); - mapMaxX = Math.max(mapMaxX, x); - this.mapMaxY = Math.max(this.mapMaxY, y); + if (x < this.mapMinX) this.mapMinX = x; + if (x > mapMaxX) mapMaxX = x; + if (y < this.mapMinY) this.mapMinY = y; + if (y > this.mapMaxY) this.mapMaxY = y; } } - this.mapMinX--; - this.mapMinY--; - mapMaxX++; - this.mapMaxY++; + + if (this.mapMinX > mapMaxX) { + this.mapMinX = 0; + mapMaxX = this.image.width; + this.mapMinY = 0; + this.mapMaxY = this.image.height; + } + + // Calculate content dimensions based on detected pixels this.mapSizeX = mapMaxX - this.mapMinX; this.mapSizeY = this.mapMaxY - this.mapMinY; - const transformStr = `translate(${-this.mapMinX}, ${-this.mapMinY})`; + // Sanity check + if (this.mapSizeX <= 0) this.mapSizeX = this.image.width; + if (this.mapSizeY <= 0) this.mapSizeY = this.image.height; - this.mapImageElement - .attr("href", mapBase64) - .attr("x", 0) - .attr("y", 0) - .attr("width", this.image.width) - .attr("height", this.image.height) - .attr("transform", transformStr) - .style("image-rendering", "pixelated"); + this.updateMapImageSize(); - this.carpetGroup.attr("transform", transformStr); + this.carpetGroup.attr("transform", null); - const svgWidth = parseFloat(this.svg.attr("width")); - const svgHeight = parseFloat(this.svg.attr("height")); + const svgWidth = parseFloat(this.svg.attr("width")) || 800; + const svgHeight = parseFloat(this.svg.attr("height")) || 600; + + // Zoom-to-fit calculations const aspectRatio = svgWidth / svgHeight; const contentAspectRatio = this.mapSizeX / this.mapSizeY; if (contentAspectRatio > aspectRatio) { - this.zoomLevel = this.roundTwoDecimals((svgWidth * 100) / this.mapSizeX) / 100; + this.zoomLevel = this.roundTwoDecimals((svgWidth * 0.95) / this.mapSizeX); // 95% fit } else { - this.zoomLevel = this.roundTwoDecimals((svgHeight * 100) / this.mapSizeY) / 100; + this.zoomLevel = this.roundTwoDecimals((svgHeight * 0.95) / this.mapSizeY); } + if (this.zoomLevel < 0.1) this.zoomLevel = 0.1; + + // Center the content within the SVG + const contentCenterX = this.mapMinX + this.mapSizeX / 2; + const contentCenterY = this.mapMinY + this.mapSizeY / 2; + this.initialTransform = d3.zoomIdentity - .translate((svgWidth - this.mapSizeX * this.zoomLevel) / 2, (svgHeight - this.mapSizeY * this.zoomLevel) / 2) - .scale(this.zoomLevel); + .translate(svgWidth / 2, svgHeight / 2) + .scale(this.zoomLevel) + .translate(-contentCenterX, -contentCenterY); + this.svgContainer.call(this.zoom.transform as any, this.initialTransform); if (this.map) { @@ -529,12 +535,13 @@ class MapApplication { } private drawRobotAndCharger(robotPos?: PositionBlock, chargerPos?: PositionBlock) { + this.robotGroup.selectAll("image.robot").remove(); + this.chargerGroup.selectAll("image.charger").remove(); + + if (!robotPos && !chargerPos) return; + const params = this.getMapParams(); - if (!params) { - this.chargerGroup.selectAll("image.charger").remove(); - this.robotGroup.selectAll("image.robot").remove(); - return; - } + if (!params) return; const scaledChargerSize = this.rescaler.chargerSize(); const scaledRobotSize = this.rescaler.robotSize(); @@ -599,31 +606,17 @@ class MapApplication { .style("paint-order", "stroke") .attr("shape-rendering", "geometricPrecision") .merge(textElements as any) - .attr("data-x", (d) => { + .text((d) => d.name) + .attr("x", (d) => { if (d.center && typeof d.center[0] === "number" && !isNaN(d.center[0])) return this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).x; return -1000; }) - .attr("data-y", (d) => { + .attr("y", (d) => { if (d.center && typeof d.center[1] === "number" && !isNaN(d.center[1])) return this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).y; return -1000; - }) - .text((d) => d.name) - .attr("x", null) - .attr("y", null); - - const transform = d3.zoomTransform(this.svgContainer.node() as Element); - this.repositionText(transform); - } - - private repositionText(transform: d3.ZoomTransform) { - this.roomNameGroup.selectAll("text.room-name").attr("transform", function () { - const baseX = parseFloat(d3.select(this).attr("data-x")); - const baseY = parseFloat(d3.select(this).attr("data-y")); - const [scaledX, scaledY] = transform.apply([baseX, baseY]); - return `translate(${scaledX}, ${scaledY})`; - }); + }); } private drawPaths(pathData?: PathBlock, mopData?: number[]) { @@ -813,7 +806,7 @@ class MapApplication { const allGroups = enterGroups.merge(groups as any); allGroups.attr("transform", (d: any) => { - const pos = this.robotToSvg({ x: d[0] + 25, y: d[1] + 25 }, params); + const pos = this.robotToSvg({ x: d[0] + 25, y: d[1] + 25 }, params); // Added +25 offset for obstacle center? return `translate(${pos.x}, ${pos.y})`; }); @@ -832,21 +825,27 @@ class MapApplication { return; } - const scaledWidth = this.mapImage.dimensions.width; - const scaledHeight = this.mapImage.dimensions.height; - const gridWidth = scaledWidth / VISUAL_BLOCK_SIZE; - const gridHeight = scaledHeight / VISUAL_BLOCK_SIZE; + // mapData provides UNSCALED dimensions (raw grid size) + // We do NOT divide by VISUAL_BLOCK_SIZE here because dimensions IS the grid size. + const gridWidth = this.mapImage.dimensions.width; + const gridHeight = this.mapImage.dimensions.height; const stride = 3; const pathCoords: string[] = []; + // Consistent Offsets with Coords.ts + // For grid-based elements (Carpet), we align to the grid cell (0,0), not the center (1.5, 1.5). + // Paths use 1.5 to be in the center of the cell. Carpets fill the cell. + const offsetX = 0; + const offsetY = 0; + carpetMap.forEach((px) => { const col = px % gridWidth; const row = Math.floor(px / gridWidth); const invertedRow = gridHeight - row - 1; - const baseX = col * VISUAL_BLOCK_SIZE; - const baseY = invertedRow * VISUAL_BLOCK_SIZE; + const baseX = col * VISUAL_BLOCK_SIZE + offsetX; + const baseY = invertedRow * VISUAL_BLOCK_SIZE + offsetY; for (let dx = 0; dx < VISUAL_BLOCK_SIZE; dx++) { for (let dy = 0; dy < VISUAL_BLOCK_SIZE; dy++) { @@ -1018,8 +1017,6 @@ class MapApplication { return this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).y - scaledChargerSize / 2; }); - this.repositionText(transform); - this.pathGroup.selectAll("path.main-path").style("stroke-width", `${this.rescaler.pathMainWidth()}px`); this.backwashPathGroup.selectAll("path.backwash-path").style("stroke-width", `${this.rescaler.pathBackwashWidth()}px`); this.mopPathGroup.selectAll("path.mop-path").style("stroke-width", `${this.rescaler.pathMopWidth()}px`); @@ -1066,8 +1063,12 @@ class MapApplication { } private worldToSvgCoords(x: number, y: number): Point { - if (this.mapMinX === undefined || this.mapMinY === undefined) return { x: 0, y: 0 }; - return { x: x - this.mapMinX, y: y - this.mapMinY }; + // Since we no longer translate the background image (it sits at 0,0), + // we should not subtract mapMinX from the coordinates. + // However, World Coordinates (from coords.ts) are 0-based relative to the Grid. + // And the Image starts at Grid 0. + // So WorldX = SvgX. + return { x: x, y: y }; } private robotToSvg(robotPoint: Point, params: any): Point { diff --git a/www/coords.d.ts b/www/coords.d.ts index e86a92d356..6e2b19c79f 100644 --- a/www/coords.d.ts +++ b/www/coords.d.ts @@ -8,6 +8,8 @@ interface MapParams { topMap: number; imageHeight: number; } +export declare const VISUAL_BLOCK_SIZE = 3; +export declare const GRID_CENTER_OFFSET: number; /** * Converts LOCAL "world" pixel coordinates (px, Y-down) back to ROBOT coordinates (mm). * Used for Click-Tests, GoTo, and Zones. diff --git a/www/coords.js b/www/coords.js index 4f45b8c9d7..cc2e161fa4 100644 --- a/www/coords.js +++ b/www/coords.js @@ -1,6 +1,8 @@ // src/www/coords.ts // The true physical scale (50mm/pixel) used by Roborock const MM_PER_PIXEL = 50; +export const VISUAL_BLOCK_SIZE = 3; +export const GRID_CENTER_OFFSET = VISUAL_BLOCK_SIZE / 2; /** * Converts LOCAL "world" pixel coordinates (px, Y-down) back to ROBOT coordinates (mm). * Used for Click-Tests, GoTo, and Zones. @@ -9,9 +11,13 @@ export function localCoordsToRobotCoords(localPoint, params) { if (!params) return { x: 0, y: 0 }; // X-Axis: (Unscaled Pixel X + Offset X) * 50 - const robotX = Math.round((localPoint.x / params.scaleFactor + params.left) * MM_PER_PIXEL); - // Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_px / s) * 50 - const robotY = Math.round((params.imageHeight / params.scaleFactor + params.topMap - localPoint.y / params.scaleFactor) * MM_PER_PIXEL); + // Inverse of Draw: (Point - Offset) / Scale + const robotX = Math.round(((localPoint.x - GRID_CENTER_OFFSET) / params.scaleFactor + params.left) * MM_PER_PIXEL); + // Y-Axis (Inverted Logic): ((H_px + top_px) - (Y_px - Offset) / s) * 50 + // Note: imageHeight is already unscaled, do NOT divide by scaleFactor. + // Inverse of Draw (Y): (Top + Height - Y_mm/50) * Scale + Offset + // => Y_mm/50 = Top + Height - (Y_pix - Offset) / Scale + const robotY = Math.round((params.imageHeight + params.topMap - (localPoint.y - (-GRID_CENTER_OFFSET)) / params.scaleFactor) * MM_PER_PIXEL); return { x: robotX, y: robotY }; } /** @@ -21,10 +27,17 @@ export function localCoordsToRobotCoords(localPoint, params) { export function robotCoordsToLocalCoords(robotPoint, params) { if (!params) return { x: 0, y: 0 }; - // X-Axis: (mm / 50 - Offset px) * scale - const worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * params.scaleFactor; - // Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_mm/50) * scale - const worldY = (params.imageHeight / params.scaleFactor + params.topMap - robotPoint.y / MM_PER_PIXEL) * params.scaleFactor; - return { x: worldX, y: worldY }; + // The map image is generated with 3 pixels per grid unit (VISUAL_BLOCK_SIZE=3). + // So we must scale the coordinates by 3 to match the image features. + const correctScale = VISUAL_BLOCK_SIZE; + // X-Axis: Center in the middle of the grid block (0 -> 1.5) + const offsetX = GRID_CENTER_OFFSET; + // Y-Axis: Center in the middle of the grid block (0 -> -1.5 inverted) + const offsetY = -GRID_CENTER_OFFSET; + // X-Axis: (mm / 50 - Params) * Scale + Offset + const worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * correctScale + offsetX; + // Y-Axis: (Top + Height - Y_mm/50) * Scale + Offset + const finalY = (params.topMap + params.imageHeight - robotPoint.y / MM_PER_PIXEL) * correctScale + offsetY; + return { x: worldX, y: finalY }; } //# sourceMappingURL=coords.js.map \ No newline at end of file diff --git a/www/coords.js.map b/www/coords.js.map index 0080a8deb7..6d6e7a3000 100644 --- a/www/coords.js.map +++ b/www/coords.js.map @@ -1 +1 @@ -{"version":3,"file":"coords.js","sourceRoot":"","sources":["../src/www/coords.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,wDAAwD;AACxD,MAAM,YAAY,GAAG,EAAE,CAAC;AAexB;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAiB,EAAE,MAAiB;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAEnC,6CAA6C;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAE5F,iEAAiE;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC;IAExI,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAiB,EAAE,MAAiB;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAEnC,wCAAwC;IACxC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAEhF,mEAAmE;IACnE,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;IAE5H,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC","sourcesContent":["// src/www/coords.ts\r\n\r\n// The true physical scale (50mm/pixel) used by Roborock\r\nconst MM_PER_PIXEL = 50;\r\n\r\ninterface Point {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\n// Map parameters required for the calculations\r\ninterface MapParams {\r\n\tscaleFactor: number; // Config scale (e.g., 8) - used for visual scaling only\r\n\tleft: number; // Unscaled Pixel Offset X\r\n\ttopMap: number; // Unscaled Pixel Offset Y\r\n\timageHeight: number; // Unscaled Pixel Height\r\n}\r\n\r\n/**\r\n * Converts LOCAL \"world\" pixel coordinates (px, Y-down) back to ROBOT coordinates (mm).\r\n * Used for Click-Tests, GoTo, and Zones.\r\n */\r\nexport function localCoordsToRobotCoords(localPoint: Point, params: MapParams): Point {\r\n\tif (!params) return { x: 0, y: 0 };\r\n\r\n\t// X-Axis: (Unscaled Pixel X + Offset X) * 50\r\n\tconst robotX = Math.round((localPoint.x / params.scaleFactor + params.left) * MM_PER_PIXEL);\r\n\r\n\t// Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_px / s) * 50\r\n\tconst robotY = Math.round((params.imageHeight / params.scaleFactor + params.topMap - localPoint.y / params.scaleFactor) * MM_PER_PIXEL);\r\n\r\n\treturn { x: robotX, y: robotY };\r\n}\r\n\r\n/**\r\n * Converts ROBOT coordinates (mm) to LOCAL \"world\" pixel coordinates (px, Y-down).\r\n * This is used to DRAW things on the map.\r\n */\r\nexport function robotCoordsToLocalCoords(robotPoint: Point, params: MapParams): Point {\r\n\tif (!params) return { x: 0, y: 0 };\r\n\r\n\t// X-Axis: (mm / 50 - Offset px) * scale\r\n\tconst worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * params.scaleFactor;\r\n\r\n\t// Y-Axis (Inverted Logic): ((H_px / s) + top_px - Y_mm/50) * scale\r\n\tconst worldY = (params.imageHeight / params.scaleFactor + params.topMap - robotPoint.y / MM_PER_PIXEL) * params.scaleFactor;\r\n\r\n\treturn { x: worldX, y: worldY };\r\n}\r\n"]} \ No newline at end of file +{"version":3,"file":"coords.js","sourceRoot":"","sources":["../src/www/coords.ts"],"names":[],"mappings":"AAAA,oBAAoB;AAEpB,wDAAwD;AACxD,MAAM,YAAY,GAAG,EAAE,CAAC;AAexB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,CAAC,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAiB,EAAE,MAAiB;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAEnC,6CAA6C;IAC7C,4CAA4C;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,kBAAkB,CAAC,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IAEnH,wEAAwE;IACxE,uEAAuE;IACvE,iEAAiE;IACjE,uDAAuD;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC;IAE7I,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAiB,EAAE,MAAiB;IAC5E,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAEnC,gFAAgF;IAChF,qEAAqE;IACrE,MAAM,YAAY,GAAG,iBAAiB,CAAC;IAEvC,4DAA4D;IAC5D,MAAM,OAAO,GAAG,kBAAkB,CAAC;IAEnC,sEAAsE;IACtE,MAAM,OAAO,GAAG,CAAC,kBAAkB,CAAC;IAEpC,8CAA8C;IAC9C,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC;IAEpF,oDAAoD;IACpD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,YAAY,GAAG,OAAO,CAAC;IAE3G,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC","sourcesContent":["// src/www/coords.ts\r\n\r\n// The true physical scale (50mm/pixel) used by Roborock\r\nconst MM_PER_PIXEL = 50;\r\n\r\ninterface Point {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\n// Map parameters required for the calculations\r\ninterface MapParams {\r\n\tscaleFactor: number; // Config scale (e.g., 8) - used for visual scaling only\r\n\tleft: number; // Unscaled Pixel Offset X\r\n\ttopMap: number; // Unscaled Pixel Offset Y\r\n\timageHeight: number; // Unscaled Pixel Height\r\n}\r\n\r\nexport const VISUAL_BLOCK_SIZE = 3;\r\nexport const GRID_CENTER_OFFSET = VISUAL_BLOCK_SIZE / 2;\r\n\r\n/**\r\n * Converts LOCAL \"world\" pixel coordinates (px, Y-down) back to ROBOT coordinates (mm).\r\n * Used for Click-Tests, GoTo, and Zones.\r\n */\r\nexport function localCoordsToRobotCoords(localPoint: Point, params: MapParams): Point {\r\n\tif (!params) return { x: 0, y: 0 };\r\n\r\n\t// X-Axis: (Unscaled Pixel X + Offset X) * 50\r\n\t// Inverse of Draw: (Point - Offset) / Scale\r\n\tconst robotX = Math.round(((localPoint.x - GRID_CENTER_OFFSET) / params.scaleFactor + params.left) * MM_PER_PIXEL);\r\n\r\n\t// Y-Axis (Inverted Logic): ((H_px + top_px) - (Y_px - Offset) / s) * 50\r\n\t// Note: imageHeight is already unscaled, do NOT divide by scaleFactor.\r\n\t// Inverse of Draw (Y): (Top + Height - Y_mm/50) * Scale + Offset\r\n\t// => Y_mm/50 = Top + Height - (Y_pix - Offset) / Scale\r\n\tconst robotY = Math.round((params.imageHeight + params.topMap - (localPoint.y - (-GRID_CENTER_OFFSET)) / params.scaleFactor) * MM_PER_PIXEL);\r\n\r\n\treturn { x: robotX, y: robotY };\r\n}\r\n\r\n/**\r\n * Converts ROBOT coordinates (mm) to LOCAL \"world\" pixel coordinates (px, Y-down).\r\n * This is used to DRAW things on the map.\r\n */\r\nexport function robotCoordsToLocalCoords(robotPoint: Point, params: MapParams): Point {\r\n\tif (!params) return { x: 0, y: 0 };\r\n\r\n\t// The map image is generated with 3 pixels per grid unit (VISUAL_BLOCK_SIZE=3).\r\n\t// So we must scale the coordinates by 3 to match the image features.\r\n\tconst correctScale = VISUAL_BLOCK_SIZE;\r\n\r\n\t// X-Axis: Center in the middle of the grid block (0 -> 1.5)\r\n\tconst offsetX = GRID_CENTER_OFFSET;\r\n\r\n\t// Y-Axis: Center in the middle of the grid block (0 -> -1.5 inverted)\r\n\tconst offsetY = -GRID_CENTER_OFFSET;\r\n\r\n\t// X-Axis: (mm / 50 - Params) * Scale + Offset\r\n\tconst worldX = (robotPoint.x / MM_PER_PIXEL - params.left) * correctScale + offsetX;\r\n\r\n\t// Y-Axis: (Top + Height - Y_mm/50) * Scale + Offset\r\n\tconst finalY = (params.topMap + params.imageHeight - robotPoint.y / MM_PER_PIXEL) * correctScale + offsetY;\r\n\r\n\treturn { x: worldX, y: finalY };\r\n}\r\n"]} \ No newline at end of file diff --git a/www/map.js b/www/map.js index e967ab7275..4b0e1b3131 100644 --- a/www/map.js +++ b/www/map.js @@ -16,7 +16,7 @@ const UI_CONSTANTS = { PIN_WIDTH_BASE: 29, PIN_HEIGHT_BASE: 24, PIN_Y_OFFSET_BASE: 5, - PATH_MOP_WIDTH_BASE: 7, + PATH_MOP_WIDTH_BASE: 6.5, PATH_MAIN_WIDTH_RATIO_BASE: 0.5, PATH_BACKWASH_WIDTH_BASE: 0.5, }; @@ -143,33 +143,27 @@ class MapApplication { this.mapImageElement = this.mainGroup.append("image").attr("class", "map-image"); // Add carpet layer (Vector SVG) this.carpetGroup = this.mainGroup.append("g").attr("class", "carpet"); - const pathOffsetX = 4; - const pathOffsetY = -4; this.mopPathGroup = this.mainGroup .append("g") .attr("class", "mop-paths") - .style("opacity", 0.18) - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .style("opacity", 0.18); this.pathGroup = this.mainGroup .append("g") .attr("class", "paths") - .style("opacity", 0.5) - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .style("opacity", 0.5); this.backwashPathGroup = this.mainGroup .append("g") .attr("class", "backwash-paths") - .style("opacity", 0.2) - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .style("opacity", 0.2); this.pureCleanPathGroup = this.mainGroup .append("g") - .attr("class", "pure-clean-paths") - .attr("transform", `translate(${pathOffsetX}, ${pathOffsetY})`); + .attr("class", "pure-clean-paths"); this.chargerGroup = this.mainGroup.append("g").attr("class", "charger"); this.obstacleGroup = this.mainGroup.append("g").attr("class", "obstacles"); this.zoneGroup = this.mainGroup.append("g").attr("class", "zones"); this.robotGroup = this.mainGroup.append("g").attr("class", "robot"); this.pinGroup = this.mainGroup.append("g").attr("class", "pins"); - this.roomNameGroup = this.svg.append("g").attr("class", "room-names"); + this.roomNameGroup = this.mainGroup.append("g").attr("class", "room-names"); this.pinGroup .append("image") .attr("class", "goto-pin") @@ -186,18 +180,14 @@ class MapApplication { this.svgContainer.call(this.zoom); } setupConnection() { - console.log("--- DEBUG START ---"); - console.log(`Page loaded from: ${window.location.protocol}//${window.location.hostname}:${window.location.port}`); const instance = this.getQueryParam("instance"); if (instance === null) { document.body.innerHTML = "

Error: No instance specified in URL.

"; return; } this.instanceId = `roborock.${instance}`; - console.log(`Initializing instance: ${this.instanceId}`); const connCallbacks = { onConnChange: async (isConnected) => { - console.log("Connection state changed: " + isConnected); if (isConnected) { this.fetchRobotList(); } @@ -211,11 +201,9 @@ class MapApplication { }, }; const socketUrl = `${window.location.protocol}//${window.location.hostname}:${window.location.port}`; - console.log(`Forcing socket.io connection to: ${socketUrl}`); this.connection.init({ name: this.instanceId, connLink: socketUrl }, connCallbacks, true); } fetchRobotList() { - console.log("Fetching robot list via getObjectView..."); const startKey = `${this.instanceId}.Devices.`; const endKey = `${this.instanceId}.Devices.\u9999`; this.connection @@ -223,7 +211,6 @@ class MapApplication { .then((res) => { const robots = []; if (res && res.rows) { - console.log(`getObjectView found ${res.rows.length} devices.`); res.rows.forEach((row) => { const idParts = row.id.split("."); const duid = idParts[idParts.length - 1]; @@ -233,7 +220,6 @@ class MapApplication { }); } if (robots.length === 0) { - console.warn("No devices found via getObjectView."); const instanceDuid = this.getQueryParam("instance"); if (instanceDuid) { this.robotSelect.innerHTML = ""; @@ -302,16 +288,15 @@ class MapApplication { } switch (id) { case mapBase64StateId: - console.log(`Received new CLEAN map Base64 for ${duid}`); this.pinGroup.select("image.goto-pin").style("display", "none").style("opacity", 0); this.drawBackgroundImage(state.val); break; case mapDataStateId: try { this.map = typeof state.val === "string" ? JSON.parse(state.val) : state.val; - console.log("Map Data:", this.map); if (this.map && this.map.IMAGE) { this.mapImage = this.map.IMAGE; + this.updateMapImageSize(); this.drawRobotAndCharger(this.map.ROBOT_POSITION, this.map.CHARGER_LOCATION); this.drawPaths(this.map.PATH, this.map.MOP_PATH); this.drawObstacles(this.map.OBSTACLES2); @@ -337,6 +322,19 @@ class MapApplication { // ----------------------------------------------------------------------------- // Drawing Methods // ----------------------------------------------------------------------------- + updateMapImageSize() { + if (!this.image.naturalWidth || !this.image.naturalHeight) + return; + // Use natural size of the image (1:1 scale) + const displayWidth = this.image.naturalWidth; + const displayHeight = this.image.naturalHeight; + this.mapImageElement + .attr("href", this.image.src) + .attr("width", displayWidth) + .attr("height", displayHeight) + .attr("transform", null) + .style("image-rendering", "pixelated"); + } drawBackgroundImage(mapBase64) { if (!mapBase64) { this.mapImageElement.attr("href", null); @@ -360,44 +358,55 @@ class MapApplication { const pixels = imageData.data; for (let i = 0; i < pixels.length; i += 4) { const alpha = pixels[i + 3]; - if (alpha > 0) { + if (alpha > 50) { const x = (i / 4) % this.image.width; const y = Math.floor(i / 4 / this.image.width); - this.mapMinX = Math.min(this.mapMinX, x); - this.mapMinY = Math.min(this.mapMinY, y); - mapMaxX = Math.max(mapMaxX, x); - this.mapMaxY = Math.max(this.mapMaxY, y); + if (x < this.mapMinX) + this.mapMinX = x; + if (x > mapMaxX) + mapMaxX = x; + if (y < this.mapMinY) + this.mapMinY = y; + if (y > this.mapMaxY) + this.mapMaxY = y; } } - this.mapMinX--; - this.mapMinY--; - mapMaxX++; - this.mapMaxY++; + if (this.mapMinX > mapMaxX) { + this.mapMinX = 0; + mapMaxX = this.image.width; + this.mapMinY = 0; + this.mapMaxY = this.image.height; + } + // Calculate content dimensions based on detected pixels this.mapSizeX = mapMaxX - this.mapMinX; this.mapSizeY = this.mapMaxY - this.mapMinY; - const transformStr = `translate(${-this.mapMinX}, ${-this.mapMinY})`; - this.mapImageElement - .attr("href", mapBase64) - .attr("x", 0) - .attr("y", 0) - .attr("width", this.image.width) - .attr("height", this.image.height) - .attr("transform", transformStr) - .style("image-rendering", "pixelated"); - this.carpetGroup.attr("transform", transformStr); - const svgWidth = parseFloat(this.svg.attr("width")); - const svgHeight = parseFloat(this.svg.attr("height")); + // Sanity check + if (this.mapSizeX <= 0) + this.mapSizeX = this.image.width; + if (this.mapSizeY <= 0) + this.mapSizeY = this.image.height; + this.updateMapImageSize(); + this.carpetGroup.attr("transform", null); + const svgWidth = parseFloat(this.svg.attr("width")) || 800; + const svgHeight = parseFloat(this.svg.attr("height")) || 600; + // Zoom-to-fit calculations const aspectRatio = svgWidth / svgHeight; const contentAspectRatio = this.mapSizeX / this.mapSizeY; if (contentAspectRatio > aspectRatio) { - this.zoomLevel = this.roundTwoDecimals((svgWidth * 100) / this.mapSizeX) / 100; + this.zoomLevel = this.roundTwoDecimals((svgWidth * 0.95) / this.mapSizeX); // 95% fit } else { - this.zoomLevel = this.roundTwoDecimals((svgHeight * 100) / this.mapSizeY) / 100; + this.zoomLevel = this.roundTwoDecimals((svgHeight * 0.95) / this.mapSizeY); } + if (this.zoomLevel < 0.1) + this.zoomLevel = 0.1; + // Center the content within the SVG + const contentCenterX = this.mapMinX + this.mapSizeX / 2; + const contentCenterY = this.mapMinY + this.mapSizeY / 2; this.initialTransform = d3.zoomIdentity - .translate((svgWidth - this.mapSizeX * this.zoomLevel) / 2, (svgHeight - this.mapSizeY * this.zoomLevel) / 2) - .scale(this.zoomLevel); + .translate(svgWidth / 2, svgHeight / 2) + .scale(this.zoomLevel) + .translate(-contentCenterX, -contentCenterY); this.svgContainer.call(this.zoom.transform, this.initialTransform); if (this.map) { this.drawRobotAndCharger(this.map.ROBOT_POSITION, this.map.CHARGER_LOCATION); @@ -409,12 +418,13 @@ class MapApplication { }; } drawRobotAndCharger(robotPos, chargerPos) { + this.robotGroup.selectAll("image.robot").remove(); + this.chargerGroup.selectAll("image.charger").remove(); + if (!robotPos && !chargerPos) + return; const params = this.getMapParams(); - if (!params) { - this.chargerGroup.selectAll("image.charger").remove(); - this.robotGroup.selectAll("image.robot").remove(); + if (!params) return; - } const scaledChargerSize = this.rescaler.chargerSize(); const scaledRobotSize = this.rescaler.robotSize(); // Charger @@ -474,28 +484,16 @@ class MapApplication { .style("paint-order", "stroke") .attr("shape-rendering", "geometricPrecision") .merge(textElements) - .attr("data-x", (d) => { + .text((d) => d.name) + .attr("x", (d) => { if (d.center && typeof d.center[0] === "number" && !isNaN(d.center[0])) return this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).x; return -1000; }) - .attr("data-y", (d) => { + .attr("y", (d) => { if (d.center && typeof d.center[1] === "number" && !isNaN(d.center[1])) return this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).y; return -1000; - }) - .text((d) => d.name) - .attr("x", null) - .attr("y", null); - const transform = d3.zoomTransform(this.svgContainer.node()); - this.repositionText(transform); - } - repositionText(transform) { - this.roomNameGroup.selectAll("text.room-name").attr("transform", function () { - const baseX = parseFloat(d3.select(this).attr("data-x")); - const baseY = parseFloat(d3.select(this).attr("data-y")); - const [scaledX, scaledY] = transform.apply([baseX, baseY]); - return `translate(${scaledX}, ${scaledY})`; }); } drawPaths(pathData, mopData) { @@ -664,7 +662,7 @@ class MapApplication { }); const allGroups = enterGroups.merge(groups); allGroups.attr("transform", (d) => { - const pos = this.robotToSvg({ x: d[0] + 25, y: d[1] + 25 }, params); + const pos = this.robotToSvg({ x: d[0] + 25, y: d[1] + 25 }, params); // Added +25 offset for obstacle center? return `translate(${pos.x}, ${pos.y})`; }); allGroups @@ -680,18 +678,23 @@ class MapApplication { this.carpetGroup.selectAll("*").remove(); return; } - const scaledWidth = this.mapImage.dimensions.width; - const scaledHeight = this.mapImage.dimensions.height; - const gridWidth = scaledWidth / VISUAL_BLOCK_SIZE; - const gridHeight = scaledHeight / VISUAL_BLOCK_SIZE; + // mapData provides UNSCALED dimensions (raw grid size) + // We do NOT divide by VISUAL_BLOCK_SIZE here because dimensions IS the grid size. + const gridWidth = this.mapImage.dimensions.width; + const gridHeight = this.mapImage.dimensions.height; const stride = 3; const pathCoords = []; + // Consistent Offsets with Coords.ts + // For grid-based elements (Carpet), we align to the grid cell (0,0), not the center (1.5, 1.5). + // Paths use 1.5 to be in the center of the cell. Carpets fill the cell. + const offsetX = 0; + const offsetY = 0; carpetMap.forEach((px) => { const col = px % gridWidth; const row = Math.floor(px / gridWidth); const invertedRow = gridHeight - row - 1; - const baseX = col * VISUAL_BLOCK_SIZE; - const baseY = invertedRow * VISUAL_BLOCK_SIZE; + const baseX = col * VISUAL_BLOCK_SIZE + offsetX; + const baseY = invertedRow * VISUAL_BLOCK_SIZE + offsetY; for (let dx = 0; dx < VISUAL_BLOCK_SIZE; dx++) { for (let dy = 0; dy < VISUAL_BLOCK_SIZE; dy++) { if ((dx + dy) % stride === 2) { @@ -859,7 +862,6 @@ class MapApplication { return 0; return this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).y - scaledChargerSize / 2; }); - this.repositionText(transform); this.pathGroup.selectAll("path.main-path").style("stroke-width", `${this.rescaler.pathMainWidth()}px`); this.backwashPathGroup.selectAll("path.backwash-path").style("stroke-width", `${this.rescaler.pathBackwashWidth()}px`); this.mopPathGroup.selectAll("path.mop-path").style("stroke-width", `${this.rescaler.pathMopWidth()}px`); @@ -902,9 +904,12 @@ class MapApplication { return { x: inverted[0] + this.mapMinX, y: inverted[1] + this.mapMinY }; } worldToSvgCoords(x, y) { - if (this.mapMinX === undefined || this.mapMinY === undefined) - return { x: 0, y: 0 }; - return { x: x - this.mapMinX, y: y - this.mapMinY }; + // Since we no longer translate the background image (it sits at 0,0), + // we should not subtract mapMinX from the coordinates. + // However, World Coordinates (from coords.ts) are 0-based relative to the Grid. + // And the Image starts at Grid 0. + // So WorldX = SvgX. + return { x: x, y: y }; } robotToSvg(robotPoint, params) { const worldPoint = robotCoordsToLocalCoords(robotPoint, params); diff --git a/www/map.js.map b/www/map.js.map index 3a18b0e8eb..2b37e1c12e 100644 --- a/www/map.js.map +++ b/www/map.js.map @@ -1 +1 @@ -{"version":3,"file":"map.js","sourceRoot":"","sources":["../src/www/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AA0EnE,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC,iCAAiC;AAC9D,MAAM,YAAY,GAAG;IACpB,eAAe,EAAE,CAAC;IAClB,iBAAiB,EAAE,CAAC;IACpB,oBAAoB,EAAE,CAAC;IACvB,gBAAgB,EAAE,GAAG;IACrB,uBAAuB,EAAE,CAAC;IAC1B,cAAc,EAAE,EAAE;IAClB,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,CAAC;IACpB,mBAAmB,EAAE,CAAC;IACtB,0BAA0B,EAAE,GAAG;IAC/B,wBAAwB,EAAE,GAAG;CAC7B,CAAC;AAEF,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF,MAAM,cAAc;IACnB,QAAQ;IACA,UAAU,CAAa;IACvB,UAAU,GAAW,EAAE,CAAC;IACxB,gBAAgB,GAAkB,IAAI,CAAC;IACvC,aAAa,GAAiE,IAAI,CAAC;IACnF,uBAAuB,GAAa,EAAE,CAAC;IAE/C,WAAW;IACH,GAAG,CAAsB;IACzB,QAAQ,CAA+B;IACvC,OAAO,GAAW,CAAC,CAAC;IACpB,OAAO,GAAW,CAAC,CAAC;IACpB,QAAQ,GAAW,CAAC,CAAC;IACrB,QAAQ,GAAW,CAAC,CAAC;IACrB,OAAO,GAAW,CAAC,CAAC;IACpB,UAAU,GAAG,KAAK,CAAC;IACnB,SAAS,GAAG,IAAI,CAAC;IAEzB,iBAAiB;IACT,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IACpB,gBAAgB,CAA+B;IAC/C,GAAG,CAAuD;IAC1D,YAAY,CAAuD;IACnE,SAAS,CAAuD;IAChE,eAAe,CAA2D;IAElF,SAAS;IACD,WAAW,CAAuD;IAClE,SAAS,CAAuD;IAChE,YAAY,CAAuD;IACnE,iBAAiB,CAAuD;IACxE,kBAAkB,CAAuD;IAEjF,iBAAiB;IACT,YAAY,CAAuD;IACnE,UAAU,CAAuD;IACjE,aAAa,CAAuD;IACpE,SAAS,CAAuD;IAChE,aAAa,CAAuD;IACpE,QAAQ,CAAuD;IAC/D,IAAI,CAAoC;IAExC,SAAS,GAAG,CAAC,CAAC;IACL,OAAO,GAAG,GAAG,CAAC;IACd,OAAO,GAAG,EAAE,CAAC;IAE9B,uBAAuB;IACf,YAAY,GAAkB,IAAI,CAAC;IACnC,MAAM,GAAW,CAAC,CAAC;IACnB,MAAM,GAAW,CAAC,CAAC;IACnB,kBAAkB,CAAM;IACxB,KAAK,GAAW,EAAE,CAAC;IACnB,KAAK,GAAe,EAAE,CAAC;IACvB,WAAW,GAAG,CAAC,CAAC;IAExB,eAAe;IACP,KAAK,CAAe;IACpB,UAAU,CAAoB;IAC9B,QAAQ,CAAe;IACvB,UAAU,CAAe;IACzB,eAAe,CAAoB;IACnC,WAAW,CAAqB;IAChC,YAAY,CAAqB;IACjC,SAAS,CAAqB;IAC9B,WAAW,CAAqB;IAChC,WAAW,CAAqB;IAChC,UAAU,CAAqB;IAC/B,UAAU,CAAqB;IAC/B,UAAU,CAAqB;IAC/B,eAAe,CAAqB;IAE5C;QACC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACnC,wEAAwE;QACxE,gEAAgE;QAChE,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QACxC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAChD,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QACxC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAQ,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAEO,eAAe;QACtB,MAAM,UAAU,GAAG,CAAwB,EAAU,EAAK,EAAE;YAC3D,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO,EAAO,CAAC;QAChB,CAAC,CAAC;QAEF,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;IACtD,CAAC;IAEO,OAAO;QACd,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAEjF,gCAAgC;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEtE,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC;QAEvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS;aAChC,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1B,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;aACtB,IAAI,CAAC,WAAW,EAAE,aAAa,WAAW,KAAK,WAAW,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;aAC7B,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;aACtB,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;aACrB,IAAI,CAAC,WAAW,EAAE,aAAa,WAAW,KAAK,WAAW,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS;aACrC,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;aAC/B,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;aACrB,IAAI,CAAC,WAAW,EAAE,aAAa,WAAW,KAAK,WAAW,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,SAAS;aACtC,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC;aACjC,IAAI,CAAC,WAAW,EAAE,aAAa,WAAW,KAAK,WAAW,GAAG,CAAC,CAAC;QAEjE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEtE,IAAI,CAAC,QAAQ;aACX,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;aACzB,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;aAC3B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;aACjB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;aAClB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;aACxB,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,GAAG,EAAE;aACZ,IAAI,EAAE;aACN,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aACzC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAW,CAAC,CAAC;IAC1C,CAAC;IAEO,eAAe;QACtB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAElH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,+CAA+C,CAAC;YAC1E,OAAO;QACR,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,YAAY,QAAQ,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAEzD,MAAM,aAAa,GAAkB;YACpC,YAAY,EAAE,KAAK,EAAE,WAAoB,EAAE,EAAE;gBAC5C,OAAO,CAAC,GAAG,CAAC,4BAA4B,GAAG,WAAW,CAAC,CAAC;gBACxD,IAAI,WAAW,EAAE,CAAC;oBACjB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvB,CAAC;YACF,CAAC;YACD,QAAQ,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;gBACvB,IAAI,IAAI,CAAC,aAAa;oBAAE,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,KAAY,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAChB,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;YACzC,CAAC;SACD,CAAC;QAEF,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;IAC3F,CAAC;IAEO,cAAc;QACrB,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,UAAU,WAAW,CAAC;QAC/C,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,iBAAiB,CAAC;QAEnD,IAAI,CAAC,UAAU;aACb,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;aACzE,IAAI,CAAC,CAAC,GAA2C,EAAE,EAAE;YACrD,MAAM,MAAM,GAAY,EAAE,CAAC;YAC3B,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,CAAC,IAAI,CAAC,MAAM,WAAW,CAAC,CAAC;gBAC/D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;oBACxB,MAAM,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACzC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;oBACnG,IAAI,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBACnD,CAAC,CAAC,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBACpD,IAAI,YAAY,EAAE,CAAC;oBAClB,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;oBAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAChD,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC;oBAC5B,MAAM,CAAC,IAAI,GAAG,sBAAsB,YAAY,GAAG,CAAC;oBACpD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACrC,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;oBACrC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;gBACzC,CAAC;gBACD,OAAO;YACR,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAY,EAAE,EAAE;gBAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAChD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;gBAC1B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;gBAC7B,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC;QACF,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAEO,oBAAoB,CAAC,IAAY;QACxC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC3C,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC;QACnC,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;QAEhC,MAAM,gBAAgB,GAAG,GAAG,IAAI,CAAC,UAAU,YAAY,IAAI,qBAAqB,CAAC;QACjF,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,UAAU,YAAY,IAAI,cAAc,CAAC;QACxE,IAAI,CAAC,uBAAuB,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;QAElE,IAAI,CAAC,aAAa,GAAG,CAAC,EAAU,EAAE,KAA6B,EAAE,EAAE;YAClE,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBAC1B,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;oBAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACzC,CAAC;gBACD,IAAI,EAAE,KAAK,cAAc,EAAE,CAAC;oBAC3B,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;oBACrB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBACzC,CAAC;gBACD,OAAO;YACR,CAAC;YAED,QAAQ,EAAE,EAAE,CAAC;gBACZ,KAAK,gBAAgB;oBACpB,OAAO,CAAC,GAAG,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;oBACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBACpF,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAa,CAAC,CAAC;oBAC9C,MAAM;gBAEP,KAAK,cAAc;oBAClB,IAAI,CAAC;wBACJ,IAAI,CAAC,GAAG,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;wBAC7E,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;4BAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;4BAC/B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;4BAC7E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;4BACjD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;4BACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;4BACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACtC,CAAC;oBACF,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACZ,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC/D,CAAC;oBACD,MAAM;YACR,CAAC;QACF,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;QAE/C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAA8C,EAAE,EAAE;YACrH,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAChC,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC/D,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,kBAAkB;IAClB,gFAAgF;IAExE,mBAAmB,CAAC,SAAiB;QAC5C,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO;QACR,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;YACxB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YACpC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACtC,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACtC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAEpC,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAEjC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACf,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;oBACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACzC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACzC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC1C,CAAC;YACF,CAAC;YACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;YAE5C,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC;YAErE,IAAI,CAAC,eAAe;iBAClB,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;iBACvB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACZ,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACZ,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;iBAC/B,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;iBACjC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC;iBAC/B,KAAK,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;YAExC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAEjD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;YACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAEzD,IAAI,kBAAkB,GAAG,WAAW,EAAE,CAAC;gBACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;YACjF,CAAC;YAED,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC,YAAY;iBACrC,SAAS,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;iBAC5G,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE1E,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACd,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC7E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACjD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;QACF,CAAC,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,QAAwB,EAAE,UAA0B;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC;YACtD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;YAClD,OAAO;QACR,CAAC;QAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACtD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAElD,UAAU;QACV,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/E,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO;aACL,KAAK,EAAE;aACP,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;aACxB,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC;aACzB,KAAK,CAAC,OAAc,CAAC;aACrB,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;aAChC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;aAC3G,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC;QAE9G,QAAQ;QACR,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvE,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK;aACH,KAAK,EAAE;aACP,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC;aACtB,IAAI,CAAC,MAAM,EAAE,kBAAkB,CAAC;aAChC,KAAK,CAAC,KAAY,CAAC;aACnB,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;aAC9B,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;aAC/B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAClF,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACnC,OAAO,aAAa,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,KAAK,eAAe,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC;QACjI,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,YAA2B;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;YACxD,OAAO;QACR,CAAC;QACD,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,eAAe,GAAG,GAAG,CAAC;QAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzG,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC7B,YAAY;aACV,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1B,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;aAC7B,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC;aACnC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACrB,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;aACxB,KAAK,CAAC,gBAAgB,EAAE,MAAM,CAAC;aAC/B,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC;aAC3B,KAAK,CAAC,WAAW,EAAE,GAAG,YAAY,IAAI,CAAC;aACvC,KAAK,CAAC,cAAc,EAAE,GAAG,eAAe,IAAI,CAAC;aAC7C,KAAK,CAAC,aAAa,EAAE,QAAQ,CAAC;aAC9B,IAAI,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;aAC7C,KAAK,CAAC,YAAmB,CAAC;aAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC;QACd,CAAC,CAAC;aACD,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACrB,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrE,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC;QACd,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aACnB,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;aACf,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAa,CAAC,CAAC;QACxE,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAEO,cAAc,CAAC,SAA2B;QACjD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;YAChE,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzD,MAAM,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC3D,OAAO,aAAa,OAAO,KAAK,OAAO,GAAG,CAAC;QAC5C,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,QAAoB,EAAE,OAAkB;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC1C,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAC/C,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO;QACR,CAAC;QAED,MAAM,KAAK,GAAG,iBAAiB,CAAC;QAEhC,MAAM,KAAK,GAAe,YAAY,CACrC,QAAQ,CAAC,MAAM,EACf,OAAO,EACP,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAC7E,KAAK,EACL,MAAM,CACN,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QACpD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACtD,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QAE9D,eAAe;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3G,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACzB,QAAQ;aACN,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;aAC1B,KAAK,CAAC,QAAe,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACnB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACrB,KAAK,CAAC,QAAQ,EAAE,uBAAuB,CAAC;aACxC,KAAK,CAAC,cAAc,EAAE,GAAG,eAAe,IAAI,CAAC;aAC7C,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;aAChC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAEpC,mBAAmB;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC7B,YAAY;aACV,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;aAC9B,KAAK,CAAC,YAAmB,CAAC;aAC1B,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACnB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACrB,KAAK,CAAC,QAAQ,EAAE,uBAAuB,CAAC;aACxC,KAAK,CAAC,cAAc,EAAE,GAAG,mBAAmB,IAAI,CAAC;aACjD,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;aACvC,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;aAChC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAEpC,oBAAoB;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzI,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,aAAa;aACX,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;aAChC,KAAK,CAAC,aAAoB,CAAC;aAC3B,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACnB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACrB,KAAK,CAAC,QAAQ,EAAE,uBAAuB,CAAC;aACxC,KAAK,CAAC,cAAc,EAAE,GAAG,mBAAmB,IAAI,CAAC;aACjD,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;aAChC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;QAEpC,cAAc;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1G,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO;aACL,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;aACzB,KAAK,CAAC,OAAc,CAAC;aACrB,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACnB,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;aACrB,KAAK,CAAC,QAAQ,EAAE,uBAAuB,CAAC;aACxC,KAAK,CAAC,cAAc,EAAE,GAAG,cAAc,IAAI,CAAC;aAC5C,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC;aAChC,KAAK,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,aAAa,CAAC,aAA+C;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,MAAM,EAAE,CAAC;YACzD,OAAO;QACR,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,oBAAoB,CAAC;QAC9E,MAAM,QAAQ,GAAG,WAAW,GAAG,GAAG,CAAC;QACnC,MAAM,SAAS,GAAG,WAAW,GAAG,GAAG,CAAC;QAEpC,MAAM,gBAAgB,GAA2B;YAChD,KAAK,EAAE,IAAI;YACX,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,GAAG;YACN,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,GAAG;YACN,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;YACR,EAAE,EAAE,IAAI;SACR,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEnF,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAEvB,MAAM,WAAW,GAAG,MAAM;aACxB,KAAK,EAAE;aACP,MAAM,CAAC,GAAG,CAAC;aACX,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;aAC/B,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;aAC1B,EAAE,CAAC,OAAO,EAAE,CAAC,KAAiB,EAAE,CAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YACnC,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,wBAAwB,CAAC,UAAU,EAAE,MAAO,CAAC,CAAC;YACjE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;YAE3B,IAAI,IAAI,CAAC,YAAY;gBAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAEvD,IAAI,CAAC,UAAU;iBACb,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;iBAC5H,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAClB,IAAI,QAAQ,IAAK,QAAgB,CAAC,KAAK,EAAE,CAAC;oBACzC,IAAI,SAAS,GAAI,QAAgB,CAAC,KAAe,CAAC;oBAClD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,aAAa,CAAC;wBAAE,SAAS,GAAG,wBAAwB,GAAG,SAAS,CAAC;oBAC5H,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,SAAS,CAAC;oBAChC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;oBACtC,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC3B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;wBAC1C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;wBAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;wBACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBAC1B,CAAC,EAAE,IAAI,CAAC,CAAC;gBACV,CAAC;YACF,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEJ,WAAW;aACT,MAAM,CAAC,QAAQ,CAAC;aAChB,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;aAC5B,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;aACnB,IAAI,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,mBAAmB;aAC5D,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;aACvB,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,iBAAiB;QAE9C,WAAW;aACT,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;aAC9B,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;aACxB,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;aACzB,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;aACzB,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC;aACzB,EAAE,CAAC,OAAO,EAAE;YACZ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,iEAAiE,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;QAEJ,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,MAAa,CAAC,CAAC;QAEnD,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,aAAa,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,SAAS;aACP,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,MAAM,EAAE,CAAC,CAAM,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;YAC9C,OAAO,4DAA4D,MAAM,MAAM,CAAC;QACjF,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAC,SAAoB;QACtC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC/D,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACzC,OAAO;QACR,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QACrD,MAAM,SAAS,GAAG,WAAW,GAAG,iBAAiB,CAAC;QAClD,MAAM,UAAU,GAAG,YAAY,GAAG,iBAAiB,CAAC;QACpD,MAAM,MAAM,GAAG,CAAC,CAAC;QAEjB,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACxB,MAAM,GAAG,GAAG,EAAE,GAAG,SAAS,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;YACvC,MAAM,WAAW,GAAG,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC;YAEzC,MAAM,KAAK,GAAG,GAAG,GAAG,iBAAiB,CAAC;YACtC,MAAM,KAAK,GAAG,WAAW,GAAG,iBAAiB,CAAC;YAE9C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC/C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,iBAAiB,EAAE,EAAE,EAAE,EAAE,CAAC;oBAC/C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC9B,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,UAAU,CAAC,CAAC;oBACzD,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE7C,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC9F,aAAa,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,aAAa;aACX,KAAK,EAAE;aACP,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;aAC5B,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC;aACnC,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC;aACrC,KAAK,CAAC,aAAoB,CAAC;aAC3B,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAEO,SAAS;QAChB,MAAM,WAAW,GAAG,EAAE;aACpB,IAAI,EAAqB;aACzB,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,OAAO;gBAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACpE,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;QACpC,CAAC,CAAC;aACD,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,CAAO,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAC7B,SAAS,GAAG,IAAI,CAAC,OAAO,EACxB,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EACxC,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1C,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,SAAS;gBAAE,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;YAC3D,IAAI,IAAI,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS;gBAAE,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;YAC7D,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACX,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACX,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,OAAO;gBAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC9G,CAAC,CAAC;aACD,EAAE,CAAC,KAAK,EAAE,CAAC,KAAU,EAAE,EAAE;YACzB,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3D,IAAI,OAAO;gBAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACxD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEJ,MAAM,aAAa,GAAG,EAAE;aACtB,IAAI,EAA0B;aAC9B,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;YAC3B,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YACzC,IAAI,OAAO;gBAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACzC,CAAC,CAAC;aACD,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,CAAO,EAAE,EAAE;YACnC,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,EAC7C,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1C,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAChD,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS;gBAAE,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS;gBAAE,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC;YACnB,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;YACrB,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC;YACzC,IAAI,OAAO,EAAE,CAAC;gBACb,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAyB,CAAC,CAAC;gBACjE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC3E,WAAW,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;YACnF,CAAC;QACF,CAAC,CAAC;aACD,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE3C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxF,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,WAAkB,CAAC,CAAC;QAChG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QACtI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,aAAoB,CAAC,CAAC;QAChI,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,UAAiB,CAAC,CAAC;QAC3D,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAO,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAC1G,eAAe;aACb,MAAM,CAAC,MAAM,CAAC;aACd,IAAI,CAAC,OAAO,EAAE,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aACnC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACrC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QACzD,eAAe;aACb,MAAM,CAAC,oBAAoB,CAAC;aAC5B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;aAChC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,gFAAgF;IAChF,iBAAiB;IACjB,gFAAgF;IAExE,gBAAgB;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAqB,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC9B,UAAU;aACV,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEO,mBAAmB;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACpG,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAa,CAAC,CAAC;YACxE,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,CAAC;IACF,CAAC;IAEO,UAAU,CAAC,KAAU;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAE3F,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU;aACb,SAAS,CAAC,aAAa,CAAC;aACxB,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;aAC9B,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;aAC/B,IAAI,CAAC,WAAW,EAAE,CAAC,CAAM,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAClF,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACnC,OAAO,aAAa,SAAS,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,KAAK,eAAe,CAAC,eAAe,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC;QACjI,CAAC,CAAC,CAAC;QAEJ,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,CAAC,YAAY;aACf,SAAS,CAAC,eAAe,CAAC;aAC1B,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;aAChC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC;aACjC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;QAClG,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE,CAAC,CAAM,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,CAAC;YACtB,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,iBAAiB,GAAG,CAAC,CAAC;QAClG,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAE/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACvG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACvH,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACxG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QAE1H,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACpD,IAAI,CAAC,QAAQ;aACX,SAAS,CAAC,gBAAgB,CAAC;aAC3B,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;aAC7B,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE;YACV,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,cAAc,GAAG,CAAC,CAAC;QACxD,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE;YACV,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,GAAG,gBAAgB,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAEO,YAAY;QACnB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC/E,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO;YACN,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;YACjC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG;YAClC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM;YAC5C,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK;SAC1C,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,CAAS,EAAE,CAAS;QAC/C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACpF,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAa,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACzE,CAAC;IAEO,gBAAgB,CAAC,CAAS,EAAE,CAAS;QAC5C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACpF,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACrD,CAAC;IAEO,UAAU,CAAC,UAAiB,EAAE,MAAW;QAChD,MAAM,UAAU,GAAG,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,gBAAgB,CAAC,MAAc;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACvC,CAAC;IAEO,aAAa,CAAC,KAAa;QAClC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,YAAY;QACnB,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACvC,IAAI,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAClD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;gBAChC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAChD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAC3D,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC9D,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;gBACnD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACpF,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;gBAC3C,OAAO;YACR,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE;gBACtB,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW;gBAC1C,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,WAAW;gBAC1C,KAAK,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW;gBAC9B,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW;aAC/B,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC1D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YACnC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,CAAC;YACxE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAChI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAC;YAC1H,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACtF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,cAAc,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YACnC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9C,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;gBACnD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACpF,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;gBAC3C,OAAO;YACR,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,QAAQ,CAAC;YACvC,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAa,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7E,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACpD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACnD,GAAG;iBACD,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;iBACzB,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC;iBACrB,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;iBAC/B,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC;iBAC/B,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,cAAc,GAAG,CAAC,CAAC;iBACxC,IAAI,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,eAAe,GAAG,gBAAgB,CAAC,CAAC,CAAC;YAE7D,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,sBAAsB,EAAE,CAAC,KAAiB,EAAE,EAAE;gBAClE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC7C,GAAG;qBACD,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;qBAC7B,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;qBAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;qBAC/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAiB,EAAE,EAAE;gBAC9D,KAAK,CAAC,wBAAwB,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,MAAM;oBAAE,OAAO;gBAC9C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;gBACrC,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;gBACrC,MAAM,KAAK,GAAG,wBAAwB,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;gBACzE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBACxH,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;gBACnD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;YAC5C,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACnD,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACtG,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YACrC,IAAI,IAAI,CAAC,YAAY;gBAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBAAE,OAAO;YAC/D,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,UAAU;iBACb,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;iBAC5H,IAAI,CAAC,CAAC,QAAa,EAAE,EAAE;gBACvB,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;oBAAE,IAAI,CAAC,eAAe,CAAC,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACxC,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,IAAY,QAAQ;QACnB,OAAO;YACN,KAAK,EAAE,GAAG,EAAE,CAAC,iBAAiB;YAC9B,SAAS,EAAE,GAAG,EAAE,CAAC,iBAAiB,GAAG,YAAY,CAAC,eAAe;YACjE,WAAW,EAAE,GAAG,EAAE,CAAC,iBAAiB,GAAG,YAAY,CAAC,iBAAiB;YACrE,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS;YACrE,gBAAgB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,uBAAuB,GAAG,IAAI,CAAC,SAAS;YAC7E,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS;YAC5D,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS;YAC9D,UAAU,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS;YACjE,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,GAAG,iBAAiB;YACxE,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,0BAA0B,CAAC;YAC7F,iBAAiB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,wBAAwB,GAAG,iBAAiB;SAClF,CAAC;IACH,CAAC;CACD;AAED,oFAAoF;AACpF,2BAA2B;AAC3B,oFAAoF;AAEpF,MAAM,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;IAC1B,MAAM,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;IACjC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxF,CAAC,CAAC","sourcesContent":["import { Connection } from \"./conn.js\";\r\nimport * as d3 from \"d3\";\r\nimport { IMG_GO_TO_PIN, IMG_CHARGER, IMG_ROBOT_ORIGINAL } from \"./images.js\";\r\nimport { localCoordsToRobotCoords, robotCoordsToLocalCoords } from \"./coords.js\";\r\nimport { processPaths, type PathResult } from \"./pathProcessor.js\";\r\n\r\n// Interfaces\r\n// -----------------------------------------------------------------------------\r\n\r\ninterface MapData {\r\n\tIMAGE: {\r\n\t\tposition: { left: number; top: number };\r\n\t\tdimensions: { height: number; width: number };\r\n\t\tsegments: {\r\n\t\t\tlist: SegmentInfo[];\r\n\t\t};\r\n\t};\r\n\tROBOT_POSITION?: PositionBlock;\r\n\tCHARGER_LOCATION?: PositionBlock;\r\n\tPATH?: PathBlock;\r\n\tMOP_PATH?: number[];\r\n\tOBSTACLES2?: Array<[number, number, ...any]>;\r\n\tCARPET_MAP?: number[];\r\n}\r\n\r\ninterface PositionBlock {\r\n\tposition: [number, number];\r\n\tangle: number;\r\n}\r\n\r\ninterface PathBlock {\r\n\tcurrent_angle: number;\r\n\tpoints: [number, number][];\r\n}\r\n\r\ninterface SegmentInfo {\r\n\tid: number;\r\n\tname: string;\r\n\tcenter: [number, number]; // Robot coordinates\r\n}\r\n\r\ninterface Robot {\r\n\tduid: string;\r\n\tname: string;\r\n}\r\n\r\ninterface Point {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\ninterface Rect {\r\n\tid: number; // Unique ID for D3 data binding\r\n\tx: number;\r\n\ty: number;\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\ninterface ConnCallbacks {\r\n\tonConnChange?: (isConnected: boolean) => void;\r\n\tonUpdate?: (id: string, state: any | null | undefined) => void;\r\n\tonRefresh?: ((...args: any[]) => any) | null;\r\n\tonAuth?: ((...args: any[]) => any) | null;\r\n\tonCommand?: (instance: string, command: string, data: any) => any;\r\n\tonError?: (err: any) => void;\r\n\tonObjectChange?: (id: string, obj: any) => void;\r\n}\r\n\r\ninterface MapParams {\r\n\tscaleFactor: number;\r\n\tleft: number;\r\n\ttopMap: number;\r\n\tmapMaxY: number;\r\n\timageHeight: number;\r\n\timageWidth: number;\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants\r\n// -----------------------------------------------------------------------------\r\n\r\nconst VISUAL_BLOCK_SIZE = 3; // Scale factor for visualization\r\nconst UI_CONSTANTS = {\r\n\tROBOT_SIZE_BASE: 5,\r\n\tCHARGER_SIZE_BASE: 3,\r\n\tOBSTACLE_RADIUS_BASE: 3,\r\n\tZONE_STROKE_BASE: 1.5,\r\n\tZONE_HANDLE_RADIUS_BASE: 5,\r\n\tPIN_WIDTH_BASE: 29,\r\n\tPIN_HEIGHT_BASE: 24,\r\n\tPIN_Y_OFFSET_BASE: 5,\r\n\tPATH_MOP_WIDTH_BASE: 7,\r\n\tPATH_MAIN_WIDTH_RATIO_BASE: 0.5,\r\n\tPATH_BACKWASH_WIDTH_BASE: 0.5,\r\n};\r\n\r\n// -----------------------------------------------------------------------------\r\n// Map Application Class\r\n// -----------------------------------------------------------------------------\r\n\r\nclass MapApplication {\r\n\t// State\r\n\tprivate connection: Connection;\r\n\tprivate instanceId: string = \"\";\r\n\tprivate currentRobotDuid: string | null = null;\r\n\tprivate onStateChange: ((id: string, state: any | null | undefined) => void) | null = null;\r\n\tprivate currentMapSubscriptions: string[] = [];\r\n\r\n\t// Map Data\r\n\tprivate map: MapData | undefined;\r\n\tprivate mapImage: MapData[\"IMAGE\"] | undefined;\r\n\tprivate mapMinX: number = 0;\r\n\tprivate mapMinY: number = 0;\r\n\tprivate mapSizeX: number = 0;\r\n\tprivate mapSizeY: number = 0;\r\n\tprivate mapMaxY: number = 0;\r\n\tprivate goToTarget = false;\r\n\tprivate zoomLevel = 0.55;\r\n\r\n\t// D3 & SVG State\r\n\tprivate image = new Image();\r\n\tprivate initialTransform: d3.ZoomTransform | undefined;\r\n\tprivate svg: d3.Selection;\r\n\tprivate svgContainer: d3.Selection;\r\n\tprivate mainGroup: d3.Selection;\r\n\tprivate mapImageElement: d3.Selection;\r\n\r\n\t// Layers\r\n\tprivate carpetGroup: d3.Selection;\r\n\tprivate pathGroup: d3.Selection;\r\n\tprivate mopPathGroup: d3.Selection;\r\n\tprivate backwashPathGroup: d3.Selection;\r\n\tprivate pureCleanPathGroup: d3.Selection;\r\n\r\n\t// Element Groups\r\n\tprivate chargerGroup: d3.Selection;\r\n\tprivate robotGroup: d3.Selection;\r\n\tprivate roomNameGroup: d3.Selection;\r\n\tprivate zoneGroup: d3.Selection;\r\n\tprivate obstacleGroup: d3.Selection;\r\n\tprivate pinGroup: d3.Selection;\r\n\tprivate zoom: d3.ZoomBehavior;\r\n\r\n\tprivate wheelZoom = 1;\r\n\tprivate readonly minZoom = 0.1;\r\n\tprivate readonly maxZoom = 10;\r\n\r\n\t// UI Interaction State\r\n\tprivate popupTimeout: number | null = null;\r\n\tprivate popupX: number = 0;\r\n\tprivate popupY: number = 0;\r\n\tprivate selectedObstacleID: any;\r\n\tprivate rects: Rect[] = [];\r\n\tprivate zones: number[][] = [];\r\n\tprivate rectCounter = 0;\r\n\r\n\t// DOM Elements\r\n\tprivate popup!: HTMLElement;\r\n\tprivate popupImage!: HTMLImageElement;\r\n\tprivate triangle!: HTMLElement;\r\n\tprivate largePhoto!: HTMLElement;\r\n\tprivate largePhotoImage!: HTMLImageElement;\r\n\tprivate robotSelect!: HTMLSelectElement;\r\n\tprivate deleteButton!: HTMLButtonElement;\r\n\tprivate addButton!: HTMLButtonElement;\r\n\tprivate startButton!: HTMLButtonElement;\r\n\tprivate pauseButton!: HTMLButtonElement;\r\n\tprivate stopButton!: HTMLButtonElement;\r\n\tprivate dockButton!: HTMLButtonElement;\r\n\tprivate goToButton!: HTMLButtonElement;\r\n\tprivate resetZoomButton!: HTMLButtonElement;\r\n\r\n\tconstructor() {\r\n\t\tthis.connection = new Connection();\r\n\t\t// Initialize D3 selections with empty selections initially or in init()\r\n\t\t// We will initialize them properly in init() after DOM is ready\r\n\t\tthis.svg = d3.select(null) as any;\r\n\t\tthis.svgContainer = d3.select(null) as any;\r\n\t\tthis.mainGroup = d3.select(null) as any;\r\n\t\tthis.mapImageElement = d3.select(null) as any;\r\n\t\tthis.carpetGroup = d3.select(null) as any;\r\n\t\tthis.pathGroup = d3.select(null) as any;\r\n\t\tthis.mopPathGroup = d3.select(null) as any;\r\n\t\tthis.backwashPathGroup = d3.select(null) as any;\r\n\t\tthis.pureCleanPathGroup = d3.select(null) as any;\r\n\t\tthis.chargerGroup = d3.select(null) as any;\r\n\t\tthis.robotGroup = d3.select(null) as any;\r\n\t\tthis.roomNameGroup = d3.select(null) as any;\r\n\t\tthis.zoneGroup = d3.select(null) as any;\r\n\t\tthis.obstacleGroup = d3.select(null) as any;\r\n\t\tthis.pinGroup = d3.select(null) as any;\r\n\t\tthis.zoom = d3.zoom();\r\n\t}\r\n\r\n\tpublic async init() {\r\n\t\tthis.bindDomElements();\r\n\t\tthis.setupD3();\r\n\t\tthis.setupConnection();\r\n\t\tthis.bindUiEvents();\r\n\t}\r\n\r\n\tprivate bindDomElements() {\r\n\t\tconst getElement = (id: string): T => {\r\n\t\t\tconst el = document.getElementById(id);\r\n\t\t\tif (!el) throw new Error(`Missing DOM element: ${id}`);\r\n\t\t\treturn el as T;\r\n\t\t};\r\n\r\n\t\tthis.popup = getElement(\"popup\");\r\n\t\tthis.popupImage = getElement(\"popup-image\");\r\n\t\tthis.triangle = getElement(\"triangle\");\r\n\t\tthis.largePhoto = getElement(\"largePhoto\");\r\n\t\tthis.largePhotoImage = getElement(\"largePhoto-image\");\r\n\t\tthis.robotSelect = getElement(\"robotSelect\");\r\n\t\tthis.deleteButton = getElement(\"deleteButton\");\r\n\t\tthis.addButton = getElement(\"addButton\");\r\n\t\tthis.startButton = getElement(\"startButton\");\r\n\t\tthis.pauseButton = getElement(\"pauseButton\");\r\n\t\tthis.stopButton = getElement(\"stopButton\");\r\n\t\tthis.dockButton = getElement(\"dockButton\");\r\n\t\tthis.goToButton = getElement(\"goToButton\");\r\n\t\tthis.resetZoomButton = getElement(\"resetZoomButton\");\r\n\t}\r\n\r\n\tprivate setupD3() {\r\n\t\tthis.svgContainer = d3.select(\"#mapSvgContainer\");\r\n\t\tthis.svg = d3.select(\"#mapSvg\");\r\n\t\tthis.mainGroup = this.svg.append(\"g\").attr(\"class\", \"main-group\");\r\n\t\tthis.mapImageElement = this.mainGroup.append(\"image\").attr(\"class\", \"map-image\");\r\n\r\n\t\t// Add carpet layer (Vector SVG)\r\n\t\tthis.carpetGroup = this.mainGroup.append(\"g\").attr(\"class\", \"carpet\");\r\n\r\n\t\tconst pathOffsetX = 4;\r\n\t\tconst pathOffsetY = -4;\r\n\r\n\t\tthis.mopPathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"mop-paths\")\r\n\t\t\t.style(\"opacity\", 0.18)\r\n\t\t\t.attr(\"transform\", `translate(${pathOffsetX}, ${pathOffsetY})`);\r\n\t\tthis.pathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"paths\")\r\n\t\t\t.style(\"opacity\", 0.5)\r\n\t\t\t.attr(\"transform\", `translate(${pathOffsetX}, ${pathOffsetY})`);\r\n\t\tthis.backwashPathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"backwash-paths\")\r\n\t\t\t.style(\"opacity\", 0.2)\r\n\t\t\t.attr(\"transform\", `translate(${pathOffsetX}, ${pathOffsetY})`);\r\n\t\tthis.pureCleanPathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"pure-clean-paths\")\r\n\t\t\t.attr(\"transform\", `translate(${pathOffsetX}, ${pathOffsetY})`);\r\n\r\n\t\tthis.chargerGroup = this.mainGroup.append(\"g\").attr(\"class\", \"charger\");\r\n\t\tthis.obstacleGroup = this.mainGroup.append(\"g\").attr(\"class\", \"obstacles\");\r\n\t\tthis.zoneGroup = this.mainGroup.append(\"g\").attr(\"class\", \"zones\");\r\n\t\tthis.robotGroup = this.mainGroup.append(\"g\").attr(\"class\", \"robot\");\r\n\t\tthis.pinGroup = this.mainGroup.append(\"g\").attr(\"class\", \"pins\");\r\n\t\tthis.roomNameGroup = this.svg.append(\"g\").attr(\"class\", \"room-names\");\r\n\r\n\t\tthis.pinGroup\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"goto-pin\")\r\n\t\t\t.attr(\"href\", IMG_GO_TO_PIN)\r\n\t\t\t.attr(\"width\", 29)\r\n\t\t\t.attr(\"height\", 24)\r\n\t\t\t.style(\"opacity\", 0)\r\n\t\t\t.style(\"display\", \"none\")\r\n\t\t\t.style(\"pointer-events\", \"none\");\r\n\r\n\t\tthis.zoom = d3\r\n\t\t\t.zoom()\r\n\t\t\t.scaleExtent([this.minZoom, this.maxZoom])\r\n\t\t\t.on(\"zoom\", (event: any) => this.handleZoom(event));\r\n\r\n\t\tthis.svgContainer.call(this.zoom as any);\r\n\t}\r\n\r\n\tprivate setupConnection() {\r\n\t\tconsole.log(\"--- DEBUG START ---\");\r\n\t\tconsole.log(`Page loaded from: ${window.location.protocol}//${window.location.hostname}:${window.location.port}`);\r\n\r\n\t\tconst instance = this.getQueryParam(\"instance\");\r\n\t\tif (instance === null) {\r\n\t\t\tdocument.body.innerHTML = \"

Error: No instance specified in URL.

\";\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.instanceId = `roborock.${instance}`;\r\n\t\tconsole.log(`Initializing instance: ${this.instanceId}`);\r\n\r\n\t\tconst connCallbacks: ConnCallbacks = {\r\n\t\t\tonConnChange: async (isConnected: boolean) => {\r\n\t\t\t\tconsole.log(\"Connection state changed: \" + isConnected);\r\n\t\t\t\tif (isConnected) {\r\n\t\t\t\t\tthis.fetchRobotList();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonUpdate: (id, state) => {\r\n\t\t\t\tif (this.onStateChange) this.onStateChange(id, state as any);\r\n\t\t\t},\r\n\t\t\tonError: (err) => {\r\n\t\t\t\tconsole.error(\"Connection error:\", err);\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tconst socketUrl = `${window.location.protocol}//${window.location.hostname}:${window.location.port}`;\r\n\t\tconsole.log(`Forcing socket.io connection to: ${socketUrl}`);\r\n\r\n\t\tthis.connection.init({ name: this.instanceId, connLink: socketUrl }, connCallbacks, true);\r\n\t}\r\n\r\n\tprivate fetchRobotList() {\r\n\t\tconsole.log(\"Fetching robot list via getObjectView...\");\r\n\t\tconst startKey = `${this.instanceId}.Devices.`;\r\n\t\tconst endKey = `${this.instanceId}.Devices.\\u9999`;\r\n\r\n\t\tthis.connection\r\n\t\t\t.getObjectView(\"system\", \"device\", { startkey: startKey, endkey: endKey })\r\n\t\t\t.then((res: { rows: { id: string; value: any }[] }) => {\r\n\t\t\t\tconst robots: Robot[] = [];\r\n\t\t\t\tif (res && res.rows) {\r\n\t\t\t\t\tconsole.log(`getObjectView found ${res.rows.length} devices.`);\r\n\t\t\t\t\tres.rows.forEach((row) => {\r\n\t\t\t\t\t\tconst idParts = row.id.split(\".\");\r\n\t\t\t\t\t\tconst duid = idParts[idParts.length - 1];\r\n\t\t\t\t\t\tconst name = row.value && row.value.common && row.value.common.name ? row.value.common.name : duid;\r\n\t\t\t\t\t\tif (duid) robots.push({ duid: duid, name: name });\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (robots.length === 0) {\r\n\t\t\t\t\tconsole.warn(\"No devices found via getObjectView.\");\r\n\t\t\t\t\tconst instanceDuid = this.getQueryParam(\"instance\");\r\n\t\t\t\t\tif (instanceDuid) {\r\n\t\t\t\t\t\tthis.robotSelect.innerHTML = \"\";\r\n\t\t\t\t\t\tconst option = document.createElement(\"option\");\r\n\t\t\t\t\t\toption.value = instanceDuid;\r\n\t\t\t\t\t\toption.text = `Roborock (Instance ${instanceDuid})`;\r\n\t\t\t\t\t\tthis.robotSelect.appendChild(option);\r\n\t\t\t\t\t\tthis.currentRobotDuid = instanceDuid;\r\n\t\t\t\t\t\tthis.setupSocketListeners(instanceDuid);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.robotSelect.innerHTML = \"\";\r\n\t\t\t\trobots.forEach((robot: Robot) => {\r\n\t\t\t\t\tconst option = document.createElement(\"option\");\r\n\t\t\t\t\toption.value = robot.duid;\r\n\t\t\t\t\toption.text = robot.name;\r\n\t\t\t\t\tthis.robotSelect.appendChild(option);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (robots.length > 0) {\r\n\t\t\t\t\tconst duid = robots[0].duid;\r\n\t\t\t\t\tthis.currentRobotDuid = duid;\r\n\t\t\t\t\tthis.robotSelect.value = duid;\r\n\t\t\t\t\tthis.setupSocketListeners(duid);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((err) => console.error(\"Error fetching robot list:\", err));\r\n\t}\r\n\r\n\tprivate setupSocketListeners(duid: string) {\r\n\t\tif (this.onStateChange && this.currentMapSubscriptions.length > 0) {\r\n\t\t\tthis.currentMapSubscriptions.forEach((id) => {\r\n\t\t\t\tthis.connection.unsubscribeState(id);\r\n\t\t\t});\r\n\t\t\tthis.currentMapSubscriptions = [];\r\n\t\t}\r\n\r\n\t\tthis.map = undefined;\r\n\t\tthis.mapImage = undefined;\r\n\t\tthis.mapImageElement.attr(\"href\", null);\r\n\t\tthis.carpetGroup.selectAll(\"*\").remove();\r\n\t\tthis.obstacleGroup.selectAll(\"*\").remove();\r\n\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\tthis.robotGroup.selectAll(\"*\").remove();\r\n\t\tthis.chargerGroup.selectAll(\"*\").remove();\r\n\t\tthis.roomNameGroup.selectAll(\"*\").remove();\r\n\t\tthis.pathGroup.selectAll(\"*\").remove();\r\n\t\tthis.mopPathGroup.selectAll(\"*\").remove();\r\n\t\tthis.backwashPathGroup.selectAll(\"*\").remove();\r\n\t\tthis.pureCleanPathGroup.selectAll(\"*\").remove();\r\n\t\tthis.rects = [];\r\n\t\tthis.drawZones();\r\n\t\tthis.deleteButton.disabled = true;\r\n\t\tthis.addButton.disabled = false;\r\n\r\n\t\tconst mapBase64StateId = `${this.instanceId}.Devices.${duid}.map.mapBase64Clean`;\r\n\t\tconst mapDataStateId = `${this.instanceId}.Devices.${duid}.map.mapData`;\r\n\t\tthis.currentMapSubscriptions = [mapBase64StateId, mapDataStateId];\r\n\r\n\t\tthis.onStateChange = (id: string, state: any | null | undefined) => {\r\n\t\t\tif (!state || !state.val) {\r\n\t\t\t\tif (id === mapBase64StateId) {\r\n\t\t\t\t\tthis.mapImageElement.attr(\"href\", null);\r\n\t\t\t\t}\r\n\t\t\t\tif (id === mapDataStateId) {\r\n\t\t\t\t\tthis.map = undefined;\r\n\t\t\t\t\tthis.robotGroup.selectAll(\"*\").remove();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (id) {\r\n\t\t\t\tcase mapBase64StateId:\r\n\t\t\t\t\tconsole.log(`Received new CLEAN map Base64 for ${duid}`);\r\n\t\t\t\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\t\t\t\tthis.drawBackgroundImage(state.val as string);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase mapDataStateId:\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tthis.map = typeof state.val === \"string\" ? JSON.parse(state.val) : state.val;\r\n\t\t\t\t\t\tconsole.log(\"Map Data:\", this.map);\r\n\t\t\t\t\t\tif (this.map && this.map.IMAGE) {\r\n\t\t\t\t\t\t\tthis.mapImage = this.map.IMAGE;\r\n\t\t\t\t\t\t\tthis.drawRobotAndCharger(this.map.ROBOT_POSITION, this.map.CHARGER_LOCATION);\r\n\t\t\t\t\t\t\tthis.drawPaths(this.map.PATH, this.map.MOP_PATH);\r\n\t\t\t\t\t\t\tthis.drawObstacles(this.map.OBSTACLES2);\r\n\t\t\t\t\t\t\tthis.drawRoomNames(this.map.IMAGE.segments.list);\r\n\t\t\t\t\t\t\tthis.drawCarpet(this.map.CARPET_MAP);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.error(\"Failed to parse map data JSON:\", state.val, e);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.connection.subscribeState(mapBase64StateId);\r\n\t\tthis.connection.subscribeState(mapDataStateId);\r\n\r\n\t\tthis.connection.getStates([mapBase64StateId, mapDataStateId]).then((states: Record) => {\r\n\t\t\tif (!this.onStateChange) return;\r\n\t\t\tthis.onStateChange(mapBase64StateId, states[mapBase64StateId]);\r\n\t\t\tthis.onStateChange(mapDataStateId, states[mapDataStateId]);\r\n\t\t});\r\n\t}\r\n\r\n\t// -----------------------------------------------------------------------------\r\n\t// Drawing Methods\r\n\t// -----------------------------------------------------------------------------\r\n\r\n\tprivate drawBackgroundImage(mapBase64: string) {\r\n\t\tif (!mapBase64) {\r\n\t\t\tthis.mapImageElement.attr(\"href\", null);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.image.src = mapBase64;\r\n\t\tthis.image.onload = () => {\r\n\t\t\tconst tempCanvas = document.createElement(\"canvas\");\r\n\t\t\tconst tempCtx = tempCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\t\t\tif (!tempCtx) return;\r\n\r\n\t\t\ttempCanvas.width = this.image.width;\r\n\t\t\ttempCanvas.height = this.image.height;\r\n\t\t\ttempCtx.imageSmoothingEnabled = false;\r\n\t\t\ttempCtx.drawImage(this.image, 0, 0);\r\n\r\n\t\t\tlet mapMaxX = 0;\r\n\t\t\tthis.mapMaxY = 0;\r\n\t\t\tthis.mapMinX = this.image.width;\r\n\t\t\tthis.mapMinY = this.image.height;\r\n\r\n\t\t\tconst imageData = tempCtx.getImageData(0, 0, this.image.width, this.image.height);\r\n\t\t\tconst pixels = imageData.data;\r\n\t\t\tfor (let i = 0; i < pixels.length; i += 4) {\r\n\t\t\t\tconst alpha = pixels[i + 3];\r\n\t\t\t\tif (alpha > 0) {\r\n\t\t\t\t\tconst x = (i / 4) % this.image.width;\r\n\t\t\t\t\tconst y = Math.floor(i / 4 / this.image.width);\r\n\t\t\t\t\tthis.mapMinX = Math.min(this.mapMinX, x);\r\n\t\t\t\t\tthis.mapMinY = Math.min(this.mapMinY, y);\r\n\t\t\t\t\tmapMaxX = Math.max(mapMaxX, x);\r\n\t\t\t\t\tthis.mapMaxY = Math.max(this.mapMaxY, y);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.mapMinX--;\r\n\t\t\tthis.mapMinY--;\r\n\t\t\tmapMaxX++;\r\n\t\t\tthis.mapMaxY++;\r\n\t\t\tthis.mapSizeX = mapMaxX - this.mapMinX;\r\n\t\t\tthis.mapSizeY = this.mapMaxY - this.mapMinY;\r\n\r\n\t\t\tconst transformStr = `translate(${-this.mapMinX}, ${-this.mapMinY})`;\r\n\r\n\t\t\tthis.mapImageElement\r\n\t\t\t\t.attr(\"href\", mapBase64)\r\n\t\t\t\t.attr(\"x\", 0)\r\n\t\t\t\t.attr(\"y\", 0)\r\n\t\t\t\t.attr(\"width\", this.image.width)\r\n\t\t\t\t.attr(\"height\", this.image.height)\r\n\t\t\t\t.attr(\"transform\", transformStr)\r\n\t\t\t\t.style(\"image-rendering\", \"pixelated\");\r\n\r\n\t\t\tthis.carpetGroup.attr(\"transform\", transformStr);\r\n\r\n\t\t\tconst svgWidth = parseFloat(this.svg.attr(\"width\"));\r\n\t\t\tconst svgHeight = parseFloat(this.svg.attr(\"height\"));\r\n\t\t\tconst aspectRatio = svgWidth / svgHeight;\r\n\t\t\tconst contentAspectRatio = this.mapSizeX / this.mapSizeY;\r\n\r\n\t\t\tif (contentAspectRatio > aspectRatio) {\r\n\t\t\t\tthis.zoomLevel = this.roundTwoDecimals((svgWidth * 100) / this.mapSizeX) / 100;\r\n\t\t\t} else {\r\n\t\t\t\tthis.zoomLevel = this.roundTwoDecimals((svgHeight * 100) / this.mapSizeY) / 100;\r\n\t\t\t}\r\n\r\n\t\t\tthis.initialTransform = d3.zoomIdentity\r\n\t\t\t\t.translate((svgWidth - this.mapSizeX * this.zoomLevel) / 2, (svgHeight - this.mapSizeY * this.zoomLevel) / 2)\r\n\t\t\t\t.scale(this.zoomLevel);\r\n\t\t\tthis.svgContainer.call(this.zoom.transform as any, this.initialTransform);\r\n\r\n\t\t\tif (this.map) {\r\n\t\t\t\tthis.drawRobotAndCharger(this.map.ROBOT_POSITION, this.map.CHARGER_LOCATION);\r\n\t\t\t\tthis.drawPaths(this.map.PATH, this.map.MOP_PATH);\r\n\t\t\t\tthis.drawObstacles(this.map.OBSTACLES2);\r\n\t\t\t\tthis.drawRoomNames(this.map.IMAGE.segments.list);\r\n\t\t\t\tthis.drawCarpet(this.map.CARPET_MAP);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tprivate drawRobotAndCharger(robotPos?: PositionBlock, chargerPos?: PositionBlock) {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params) {\r\n\t\t\tthis.chargerGroup.selectAll(\"image.charger\").remove();\r\n\t\t\tthis.robotGroup.selectAll(\"image.robot\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst scaledChargerSize = this.rescaler.chargerSize();\r\n\t\tconst scaledRobotSize = this.rescaler.robotSize();\r\n\r\n\t\t// Charger\r\n\t\tconst chargerData = chargerPos ? [chargerPos] : [];\r\n\t\tconst charger = this.chargerGroup.selectAll(\"image.charger\").data(chargerData);\r\n\t\tcharger.exit().remove();\r\n\t\tcharger\r\n\t\t\t.enter()\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"charger\")\r\n\t\t\t.attr(\"href\", IMG_CHARGER)\r\n\t\t\t.merge(charger as any)\r\n\t\t\t.attr(\"width\", scaledChargerSize)\r\n\t\t\t.attr(\"height\", scaledChargerSize)\r\n\t\t\t.attr(\"x\", (d) => this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).x - scaledChargerSize / 2)\r\n\t\t\t.attr(\"y\", (d) => this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).y - scaledChargerSize / 2);\r\n\r\n\t\t// Robot\r\n\t\tconst robotData = robotPos ? [robotPos] : [];\r\n\t\tconst robot = this.robotGroup.selectAll(\"image.robot\").data(robotData);\r\n\t\trobot.exit().remove();\r\n\t\trobot\r\n\t\t\t.enter()\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"robot\")\r\n\t\t\t.attr(\"href\", IMG_ROBOT_ORIGINAL)\r\n\t\t\t.merge(robot as any)\r\n\t\t\t.attr(\"width\", scaledRobotSize)\r\n\t\t\t.attr(\"height\", scaledRobotSize)\r\n\t\t\t.attr(\"transform\", (d) => {\r\n\t\t\t\tconst svgCoords = this.robotToSvg({ x: d.position[0], y: d.position[1] }, params);\r\n\t\t\t\tconst angle = -(d.angle ?? 0) + 90;\r\n\t\t\t\treturn `translate(${svgCoords.x}, ${svgCoords.y}) rotate(${angle}) translate(${-scaledRobotSize / 2}, ${-scaledRobotSize / 2})`;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate drawRoomNames(segmentsList: SegmentInfo[]) {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params || !segmentsList) {\r\n\t\t\tthis.roomNameGroup.selectAll(\"text.room-name\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst baseFontSize = 12;\r\n\t\tconst baseStrokeWidth = 2.5;\r\n\r\n\t\tconst textElements = this.roomNameGroup.selectAll(\"text.room-name\").data(segmentsList, (d: any) => d.id);\r\n\t\ttextElements.exit().remove();\r\n\t\ttextElements\r\n\t\t\t.enter()\r\n\t\t\t.append(\"text\")\r\n\t\t\t.attr(\"class\", \"room-name\")\r\n\t\t\t.attr(\"text-anchor\", \"middle\")\r\n\t\t\t.attr(\"dominant-baseline\", \"middle\")\r\n\t\t\t.style(\"fill\", \"#000\")\r\n\t\t\t.style(\"stroke\", \"white\")\r\n\t\t\t.style(\"pointer-events\", \"none\")\r\n\t\t\t.style(\"font-weight\", \"900\")\r\n\t\t\t.style(\"font-size\", `${baseFontSize}px`)\r\n\t\t\t.style(\"stroke-width\", `${baseStrokeWidth}px`)\r\n\t\t\t.style(\"paint-order\", \"stroke\")\r\n\t\t\t.attr(\"shape-rendering\", \"geometricPrecision\")\r\n\t\t\t.merge(textElements as any)\r\n\t\t\t.attr(\"data-x\", (d) => {\r\n\t\t\t\tif (d.center && typeof d.center[0] === \"number\" && !isNaN(d.center[0]))\r\n\t\t\t\t\treturn this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).x;\r\n\t\t\t\treturn -1000;\r\n\t\t\t})\r\n\t\t\t.attr(\"data-y\", (d) => {\r\n\t\t\t\tif (d.center && typeof d.center[1] === \"number\" && !isNaN(d.center[1]))\r\n\t\t\t\t\treturn this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).y;\r\n\t\t\t\treturn -1000;\r\n\t\t\t})\r\n\t\t\t.text((d) => d.name)\r\n\t\t\t.attr(\"x\", null)\r\n\t\t\t.attr(\"y\", null);\r\n\r\n\t\tconst transform = d3.zoomTransform(this.svgContainer.node() as Element);\r\n\t\tthis.repositionText(transform);\r\n\t}\r\n\r\n\tprivate repositionText(transform: d3.ZoomTransform) {\r\n\t\tthis.roomNameGroup.selectAll(\"text.room-name\").attr(\"transform\", function () {\r\n\t\t\tconst baseX = parseFloat(d3.select(this).attr(\"data-x\"));\r\n\t\t\tconst baseY = parseFloat(d3.select(this).attr(\"data-y\"));\r\n\t\t\tconst [scaledX, scaledY] = transform.apply([baseX, baseY]);\r\n\t\t\treturn `translate(${scaledX}, ${scaledY})`;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate drawPaths(pathData?: PathBlock, mopData?: number[]) {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params || !pathData?.points || !mopData) {\r\n\t\t\tthis.pathGroup.selectAll(\"*\").remove();\r\n\t\t\tthis.mopPathGroup.selectAll(\"*\").remove();\r\n\t\t\tthis.backwashPathGroup.selectAll(\"*\").remove();\r\n\t\t\tthis.pureCleanPathGroup.selectAll(\"*\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst scale = VISUAL_BLOCK_SIZE;\r\n\r\n\t\tconst paths: PathResult = processPaths(\r\n\t\t\tpathData.points,\r\n\t\t\tmopData,\r\n\t\t\t(robotPoint, p) => this.robotToSvg({ x: robotPoint[0], y: robotPoint[1] }, p),\r\n\t\t\tscale,\r\n\t\t\tparams\r\n\t\t);\r\n\r\n\t\tconst scaledMopWidth = this.rescaler.pathMopWidth();\r\n\t\tconst scaledPathWidth = this.rescaler.pathMainWidth();\r\n\t\tconst scaledBackwashWidth = this.rescaler.pathBackwashWidth();\r\n\r\n\t\t// 1. Main Path\r\n\t\tconst mainPath = this.pathGroup.selectAll(\"path.main-path\").data(paths.mainPathD ? [paths.mainPathD] : []);\r\n\t\tmainPath.exit().remove();\r\n\t\tmainPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"main-path\")\r\n\t\t\t.merge(mainPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledPathWidth}px`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\r\n\t\t// 2. Backwash Path\r\n\t\tconst backwashPath = this.backwashPathGroup.selectAll(\"path.backwash-path\").data(paths.backwashPathD ? [paths.backwashPathD] : []);\r\n\t\tbackwashPath.exit().remove();\r\n\t\tbackwashPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"backwash-path\")\r\n\t\t\t.merge(backwashPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledBackwashWidth}px`)\r\n\t\t\t.style(\"stroke-dasharray\", `${4}, ${8}`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\r\n\t\t// 3. PureClean Path\r\n\t\tconst pureCleanPath = this.pureCleanPathGroup.selectAll(\"path.pure-clean-path\").data(paths.pureCleanPathD ? [paths.pureCleanPathD] : []);\r\n\t\tpureCleanPath.exit().remove();\r\n\t\tpureCleanPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"pure-clean-path\")\r\n\t\t\t.merge(pureCleanPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledBackwashWidth}px`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\r\n\t\t// 4. Mop Path\r\n\t\tconst mopPath = this.mopPathGroup.selectAll(\"path.mop-path\").data(paths.mopPathD ? [paths.mopPathD] : []);\r\n\t\tmopPath.exit().remove();\r\n\t\tmopPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"mop-path\")\r\n\t\t\t.merge(mopPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledMopWidth}px`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\t}\r\n\r\n\tprivate drawObstacles(obstaclesData?: Array<[number, number, ...any]>) {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params || !obstaclesData) {\r\n\t\t\tthis.obstacleGroup.selectAll(\".obstacle-group\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst fixedRadius = this.rescaler.scale() * UI_CONSTANTS.OBSTACLE_RADIUS_BASE;\r\n\t\tconst bgRadius = fixedRadius * 1.1;\r\n\t\tconst imageSize = fixedRadius * 1.8;\r\n\r\n\t\tconst OBSTACLE_MAPPING: Record = {\r\n\t\t\t\"-99\": \"99\",\r\n\t\t\t0: \"0\",\r\n\t\t\t1: \"1\",\r\n\t\t\t2: \"2\",\r\n\t\t\t3: \"3\",\r\n\t\t\t4: \"3\",\r\n\t\t\t5: \"5_cn\",\r\n\t\t\t9: \"9\",\r\n\t\t\t10: \"10\",\r\n\t\t\t18: \"18\",\r\n\t\t\t25: \"25\",\r\n\t\t\t26: \"26\",\r\n\t\t\t27: \"26\",\r\n\t\t\t34: \"10\",\r\n\t\t\t42: \"18\",\r\n\t\t\t48: \"48\",\r\n\t\t\t49: \"49\",\r\n\t\t\t50: \"50\",\r\n\t\t\t51: \"51\",\r\n\t\t\t54: \"54\",\r\n\t\t\t65: \"65\",\r\n\t\t\t67: \"67\",\r\n\t\t\t69: \"69\",\r\n\t\t\t70: \"70\",\r\n\t\t\t99: \"99\",\r\n\t\t};\r\n\r\n\t\tconst groups = this.obstacleGroup.selectAll(\".obstacle-group\").data(obstaclesData);\r\n\r\n\t\tgroups.exit().remove();\r\n\r\n\t\tconst enterGroups = groups\r\n\t\t\t.enter()\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"obstacle-group\")\r\n\t\t\t.style(\"cursor\", \"default\")\r\n\t\t\t.on(\"click\", (event: MouseEvent, d: any) => {\r\n\t\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tthis.selectedObstacleID = d[6];\r\n\t\t\t\tconst robotPoint = { x: d[0], y: d[1] };\r\n\t\t\t\tconst worldPoint = robotCoordsToLocalCoords(robotPoint, params!);\r\n\t\t\t\tthis.popupX = worldPoint.x;\r\n\t\t\t\tthis.popupY = worldPoint.y;\r\n\r\n\t\t\t\tif (this.popupTimeout) clearTimeout(this.popupTimeout);\r\n\r\n\t\t\t\tthis.connection\r\n\t\t\t\t\t.sendTo(this.instanceId, \"get_obstacle_image\", { obstacleId: this.selectedObstacleID, duid: this.currentRobotDuid, type: 1 })\r\n\t\t\t\t\t.then((response) => {\r\n\t\t\t\t\t\tif (response && (response as any).image) {\r\n\t\t\t\t\t\t\tlet imageData = (response as any).image as string;\r\n\t\t\t\t\t\t\tif (typeof imageData === \"string\" && !imageData.startsWith(\"data:image/\")) imageData = \"data:image/png;base64,\" + imageData;\r\n\t\t\t\t\t\t\tthis.popupImage.src = imageData;\r\n\t\t\t\t\t\t\tthis.popup.style.display = \"block\";\r\n\t\t\t\t\t\t\tthis.triangle.style.display = \"block\";\r\n\t\t\t\t\t\t\tthis.updatePopupPosition();\r\n\t\t\t\t\t\t\tthis.popupTimeout = window.setTimeout(() => {\r\n\t\t\t\t\t\t\t\tthis.popup.style.display = \"none\";\r\n\t\t\t\t\t\t\t\tthis.triangle.style.display = \"none\";\r\n\t\t\t\t\t\t\t\tthis.popupTimeout = null;\r\n\t\t\t\t\t\t\t}, 3000);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => console.error(\"Error getting obstacle image:\", err));\r\n\t\t\t\tthis.updatePopupPosition();\r\n\t\t\t});\r\n\r\n\t\tenterGroups\r\n\t\t\t.append(\"circle\")\r\n\t\t\t.attr(\"class\", \"obstacle-bg\")\r\n\t\t\t.attr(\"r\", bgRadius)\r\n\t\t\t.attr(\"fill\", \"rgba(100, 100, 100, 0.2)\") // More transparent\r\n\t\t\t.attr(\"stroke\", \"white\")\r\n\t\t\t.attr(\"stroke-width\", 0.5); // Thinner border\r\n\r\n\t\tenterGroups\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"obstacle-icon\")\r\n\t\t\t.attr(\"width\", imageSize)\r\n\t\t\t.attr(\"height\", imageSize)\r\n\t\t\t.attr(\"x\", -imageSize / 2)\r\n\t\t\t.attr(\"y\", -imageSize / 2)\r\n\t\t\t.on(\"error\", function () {\r\n\t\t\t\td3.select(this).attr(\"href\", \"images/projects_comroborocktanos_resources_obstacle_new_p18.png\");\r\n\t\t\t});\r\n\r\n\t\tconst allGroups = enterGroups.merge(groups as any);\r\n\r\n\t\tallGroups.attr(\"transform\", (d: any) => {\r\n\t\t\tconst pos = this.robotToSvg({ x: d[0] + 25, y: d[1] + 25 }, params);\r\n\t\t\treturn `translate(${pos.x}, ${pos.y})`;\r\n\t\t});\r\n\r\n\t\tallGroups\r\n\t\t\t.select(\"image\")\r\n\t\t\t.attr(\"href\", (d: any) => {\r\n\t\t\t\tconst type = d[2];\r\n\t\t\t\tconst suffix = OBSTACLE_MAPPING[type] || \"18\";\r\n\t\t\t\treturn `images/projects_comroborocktanos_resources_obstacle_new_p${suffix}.png`;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate drawCarpet(carpetMap?: number[]) {\r\n\t\tif (!carpetMap || !this.mapImage || !this.mapImage.dimensions) {\r\n\t\t\tthis.carpetGroup.selectAll(\"*\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst scaledWidth = this.mapImage.dimensions.width;\r\n\t\tconst scaledHeight = this.mapImage.dimensions.height;\r\n\t\tconst gridWidth = scaledWidth / VISUAL_BLOCK_SIZE;\r\n\t\tconst gridHeight = scaledHeight / VISUAL_BLOCK_SIZE;\r\n\t\tconst stride = 3;\r\n\r\n\t\tconst pathCoords: string[] = [];\r\n\r\n\t\tcarpetMap.forEach((px) => {\r\n\t\t\tconst col = px % gridWidth;\r\n\t\t\tconst row = Math.floor(px / gridWidth);\r\n\t\t\tconst invertedRow = gridHeight - row - 1;\r\n\r\n\t\t\tconst baseX = col * VISUAL_BLOCK_SIZE;\r\n\t\t\tconst baseY = invertedRow * VISUAL_BLOCK_SIZE;\r\n\r\n\t\t\tfor (let dx = 0; dx < VISUAL_BLOCK_SIZE; dx++) {\r\n\t\t\t\tfor (let dy = 0; dy < VISUAL_BLOCK_SIZE; dy++) {\r\n\t\t\t\t\tif ((dx + dy) % stride === 2) {\r\n\t\t\t\t\t\tpathCoords.push(`M${baseX + dx} ${baseY + dy}h1v1h-1z`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tconst combinedPathData = pathCoords.join(\"\");\r\n\r\n\t\tconst pathSelection = this.carpetGroup.selectAll(\"path.carpet-path\").data([combinedPathData]);\r\n\t\tpathSelection.exit().remove();\r\n\t\tpathSelection\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"carpet-path\")\r\n\t\t\t.style(\"fill\", \"rgba(0, 0, 0, 0.4)\")\r\n\t\t\t.attr(\"shape-rendering\", \"crispEdges\")\r\n\t\t\t.merge(pathSelection as any)\r\n\t\t\t.attr(\"d\", (d) => d);\r\n\t}\r\n\r\n\tprivate drawZones() {\r\n\t\tconst dragHandler = d3\r\n\t\t\t.drag()\r\n\t\t\t.on(\"start\", (event: any) => {\r\n\t\t\t\tconst element = event.sourceEvent.target.closest(\"g.zone\");\r\n\t\t\t\tif (element) d3.select(element).raise().style(\"cursor\", \"grabbing\");\r\n\t\t\t\tthis.deleteButton.disabled = false;\r\n\t\t\t})\r\n\t\t\t.on(\"drag\", (event: any, d: Rect) => {\r\n\t\t\t\tif (!this.mapImage) return;\r\n\t\t\t\tconst minBoundX = this.mapMinX,\r\n\t\t\t\t\tminBoundY = this.mapMinY,\r\n\t\t\t\t\tmaxBoundX = this.mapMinX + this.mapSizeX,\r\n\t\t\t\t\tmaxBoundY = this.mapMinY + this.mapSizeY;\r\n\t\t\t\tlet newX = Math.max(minBoundX, d.x + event.dx);\r\n\t\t\t\tlet newY = Math.max(minBoundY, d.y + event.dy);\r\n\t\t\t\tif (newX + d.width > maxBoundX) newX = maxBoundX - d.width;\r\n\t\t\t\tif (newY + d.height > maxBoundY) newY = maxBoundY - d.height;\r\n\t\t\t\td.x = newX;\r\n\t\t\t\td.y = newY;\r\n\t\t\t\tconst element = event.sourceEvent.target.closest(\"g.zone\");\r\n\t\t\t\tif (element) d3.select(element).attr(\"transform\", `translate(${d.x - this.mapMinX}, ${d.y - this.mapMinY})`);\r\n\t\t\t})\r\n\t\t\t.on(\"end\", (event: any) => {\r\n\t\t\t\tconst element = event.sourceEvent.target.closest(\"g.zone\");\r\n\t\t\t\tif (element) d3.select(element).style(\"cursor\", \"move\");\r\n\t\t\t\tthis.updateRobotZones();\r\n\t\t\t});\r\n\r\n\t\tconst resizeHandler = d3\r\n\t\t\t.drag()\r\n\t\t\t.on(\"start\", (event: any) => {\r\n\t\t\t\tevent.sourceEvent.stopPropagation();\r\n\t\t\t\tconst element = event.sourceEvent.target;\r\n\t\t\t\tif (element) d3.select(element).raise();\r\n\t\t\t})\r\n\t\t\t.on(\"drag\", (event: any, d: Rect) => {\r\n\t\t\t\tif (!this.mapImage) return;\r\n\t\t\t\tconst maxBoundX = this.mapMinX + this.mapSizeX,\r\n\t\t\t\t\tmaxBoundY = this.mapMinY + this.mapSizeY;\r\n\t\t\t\tlet newWidth = Math.max(d.width + event.dx, 20);\r\n\t\t\t\tlet newHeight = Math.max(d.height + event.dy, 20);\r\n\t\t\t\tif (d.x + newWidth > maxBoundX) newWidth = maxBoundX - d.x;\r\n\t\t\t\tif (d.y + newHeight > maxBoundY) newHeight = maxBoundY - d.y;\r\n\t\t\t\td.width = newWidth;\r\n\t\t\t\td.height = newHeight;\r\n\t\t\t\tconst element = event.sourceEvent.target;\r\n\t\t\t\tif (element) {\r\n\t\t\t\t\tconst parentGroup = d3.select(element.parentNode as SVGGElement);\r\n\t\t\t\t\tparentGroup.select(\"rect\").attr(\"width\", d.width).attr(\"height\", d.height);\r\n\t\t\t\t\tparentGroup.select(\"circle.zone-handle\").attr(\"cx\", d.width).attr(\"cy\", d.height);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on(\"end\", () => this.updateRobotZones());\r\n\r\n\t\tconst selection = this.zoneGroup.selectAll(\"g.zone\").data(this.rects, (d: any) => d.id);\r\n\t\tselection.exit().remove();\r\n\t\tconst enterGroup = selection.enter().append(\"g\").attr(\"class\", \"zone\").call(dragHandler as any);\r\n\t\tenterGroup.append(\"rect\").attr(\"class\", \"zone-rect\").attr(\"x\", 0).attr(\"y\", 0).style(\"stroke-width\", this.rescaler.zoneStrokeWidth());\r\n\t\tenterGroup.append(\"circle\").attr(\"class\", \"zone-handle\").attr(\"r\", this.rescaler.zoneHandleRadius()).call(resizeHandler as any);\r\n\t\tconst mergedSelection = selection.merge(enterGroup as any);\r\n\t\tmergedSelection.attr(\"transform\", (d: Rect) => `translate(${d.x - this.mapMinX}, ${d.y - this.mapMinY})`);\r\n\t\tmergedSelection\r\n\t\t\t.select(\"rect\")\r\n\t\t\t.attr(\"width\", (d: Rect) => d.width)\r\n\t\t\t.attr(\"height\", (d: Rect) => d.height)\r\n\t\t\t.style(\"stroke-width\", this.rescaler.zoneStrokeWidth());\r\n\t\tmergedSelection\r\n\t\t\t.select(\"circle.zone-handle\")\r\n\t\t\t.attr(\"cx\", (d: Rect) => d.width)\r\n\t\t\t.attr(\"cy\", (d: Rect) => d.height)\r\n\t\t\t.attr(\"r\", this.rescaler.zoneHandleRadius());\r\n\t}\r\n\r\n\t// -----------------------------------------------------------------------------\r\n\t// Helper Methods\r\n\t// -----------------------------------------------------------------------------\r\n\r\n\tprivate updateRobotZones() {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params) return;\r\n\t\tconst cleanCountInput = document.getElementById(\"cleanCount\") as HTMLInputElement;\r\n\t\tthis.zones = [];\r\n\t\tconst cleanCount = parseInt(cleanCountInput.value) || 1;\r\n\t\tfor (const rect of this.rects) {\r\n\t\t\tconst p1 = { x: rect.x, y: rect.y };\r\n\t\t\tconst p2 = { x: rect.x + rect.width, y: rect.y + rect.height };\r\n\t\t\tconst coords1 = localCoordsToRobotCoords(p1, params);\r\n\t\t\tconst coords2 = localCoordsToRobotCoords(p2, params);\r\n\t\t\tthis.zones.push([\r\n\t\t\t\tMath.min(coords1.x, coords2.x),\r\n\t\t\t\tMath.min(coords1.y, coords2.y),\r\n\t\t\t\tMath.max(coords1.x, coords2.x),\r\n\t\t\t\tMath.max(coords1.y, coords2.y),\r\n\t\t\t\tcleanCount,\r\n\t\t\t]);\r\n\t\t}\r\n\t\tconsole.log(\"Zones updated:\", JSON.stringify(this.zones));\r\n\t}\r\n\r\n\tprivate updatePopupPosition() {\r\n\t\tif (this.popup.style.display === \"block\" && this.popupX !== undefined && this.popupY !== undefined) {\r\n\t\t\tconst transform = d3.zoomTransform(this.svgContainer.node() as Element);\r\n\t\t\tconst svgCoords = this.worldToSvgCoords(this.popupX, this.popupY);\r\n\t\t\tconst screenCoords = transform.apply([svgCoords.x, svgCoords.y]);\r\n\t\t\tthis.popup.style.left = `${screenCoords[0]}px`;\r\n\t\t\tthis.popup.style.top = `${screenCoords[1]}px`;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleZoom(event: any) {\r\n\t\tconst transform = event.transform;\r\n\t\tthis.mainGroup.attr(\"transform\", transform);\r\n\t\tthis.wheelZoom = transform.k;\r\n\r\n\t\tthis.zoneGroup.selectAll(\"rect.zone-rect\").style(\"stroke-width\", this.rescaler.zoneStrokeWidth());\r\n\t\tthis.zoneGroup.selectAll(\"circle.zone-handle\").attr(\"r\", this.rescaler.zoneHandleRadius());\r\n\r\n\t\tconst scaledRobotSize = this.rescaler.robotSize();\r\n\t\tthis.robotGroup\r\n\t\t\t.selectAll(\"image.robot\")\r\n\t\t\t.attr(\"width\", scaledRobotSize)\r\n\t\t\t.attr(\"height\", scaledRobotSize)\r\n\t\t\t.attr(\"transform\", (d: any) => {\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!params) return \"\";\r\n\t\t\t\tconst svgCoords = this.robotToSvg({ x: d.position[0], y: d.position[1] }, params);\r\n\t\t\t\tconst angle = -(d.angle ?? 0) + 90;\r\n\t\t\t\treturn `translate(${svgCoords.x}, ${svgCoords.y}) rotate(${angle}) translate(${-scaledRobotSize / 2}, ${-scaledRobotSize / 2})`;\r\n\t\t\t});\r\n\r\n\t\tconst scaledChargerSize = this.rescaler.chargerSize();\r\n\t\tthis.chargerGroup\r\n\t\t\t.selectAll(\"image.charger\")\r\n\t\t\t.attr(\"width\", scaledChargerSize)\r\n\t\t\t.attr(\"height\", scaledChargerSize)\r\n\t\t\t.attr(\"x\", (d: any) => {\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!params) return 0;\r\n\t\t\t\treturn this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).x - scaledChargerSize / 2;\r\n\t\t\t})\r\n\t\t\t.attr(\"y\", (d: any) => {\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!params) return 0;\r\n\t\t\t\treturn this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).y - scaledChargerSize / 2;\r\n\t\t\t});\r\n\r\n\t\tthis.repositionText(transform);\r\n\r\n\t\tthis.pathGroup.selectAll(\"path.main-path\").style(\"stroke-width\", `${this.rescaler.pathMainWidth()}px`);\r\n\t\tthis.backwashPathGroup.selectAll(\"path.backwash-path\").style(\"stroke-width\", `${this.rescaler.pathBackwashWidth()}px`);\r\n\t\tthis.mopPathGroup.selectAll(\"path.mop-path\").style(\"stroke-width\", `${this.rescaler.pathMopWidth()}px`);\r\n\t\tthis.pureCleanPathGroup.selectAll(\"path.pure-clean-path\").style(\"stroke-width\", `${this.rescaler.pathBackwashWidth()}px`);\r\n\r\n\t\tconst scaledPinWidth = this.rescaler.pinWidth();\r\n\t\tconst scaledPinHeight = this.rescaler.pinHeight();\r\n\t\tconst scaledPinYOffset = this.rescaler.pinYOffset();\r\n\t\tthis.pinGroup\r\n\t\t\t.selectAll(\"image.goto-pin\")\r\n\t\t\t.attr(\"width\", scaledPinWidth)\r\n\t\t\t.attr(\"height\", scaledPinHeight)\r\n\t\t\t.attr(\"x\", function () {\r\n\t\t\t\tconst centerX = d3.select(this).attr(\"data-center-x\");\r\n\t\t\t\treturn (parseFloat(centerX) || 0) - scaledPinWidth / 2;\r\n\t\t\t})\r\n\t\t\t.attr(\"y\", function () {\r\n\t\t\t\tconst centerY = d3.select(this).attr(\"data-center-y\");\r\n\t\t\t\treturn (parseFloat(centerY) || 0) - (scaledPinHeight - scaledPinYOffset);\r\n\t\t\t});\r\n\r\n\t\tthis.updatePopupPosition();\r\n\t}\r\n\r\n\tprivate getMapParams(): MapParams | null {\r\n\t\tif (!this.mapImage || !this.mapImage.dimensions || this.mapMaxY === undefined) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tscaleFactor: VISUAL_BLOCK_SIZE,\r\n\t\t\tleft: this.mapImage.position.left,\r\n\t\t\ttopMap: this.mapImage.position.top,\r\n\t\t\tmapMaxY: this.mapMaxY,\r\n\t\t\timageHeight: this.mapImage.dimensions.height,\r\n\t\t\timageWidth: this.mapImage.dimensions.width,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate screenToWorldCoords(x: number, y: number): Point {\r\n\t\tif (this.mapMinX === undefined || this.mapMinY === undefined) return { x: 0, y: 0 };\r\n\t\tconst transform = d3.zoomTransform(this.svgContainer.node() as Element);\r\n\t\tconst inverted = transform.invert([x, y]);\r\n\t\treturn { x: inverted[0] + this.mapMinX, y: inverted[1] + this.mapMinY };\r\n\t}\r\n\r\n\tprivate worldToSvgCoords(x: number, y: number): Point {\r\n\t\tif (this.mapMinX === undefined || this.mapMinY === undefined) return { x: 0, y: 0 };\r\n\t\treturn { x: x - this.mapMinX, y: y - this.mapMinY };\r\n\t}\r\n\r\n\tprivate robotToSvg(robotPoint: Point, params: any): Point {\r\n\t\tconst worldPoint = robotCoordsToLocalCoords(robotPoint, params);\r\n\t\treturn this.worldToSvgCoords(worldPoint.x, worldPoint.y);\r\n\t}\r\n\r\n\tprivate roundTwoDecimals(number: number): number {\r\n\t\treturn Math.round(number * 100) / 100;\r\n\t}\r\n\r\n\tprivate getQueryParam(param: string): string | null {\r\n\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\treturn urlParams.get(param);\r\n\t}\r\n\r\n\tprivate bindUiEvents() {\r\n\t\tthis.robotSelect.addEventListener(\"change\", () => {\r\n\t\t\tconst newDuid = this.robotSelect.value;\r\n\t\t\tif (newDuid && newDuid !== this.currentRobotDuid) {\r\n\t\t\t\tthis.currentRobotDuid = newDuid;\r\n\t\t\t\tthis.setupSocketListeners(newDuid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.deleteButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.rects.length > 0) {\r\n\t\t\t\tthis.rects.pop();\r\n\t\t\t\tthis.drawZones();\r\n\t\t\t\tif (this.rects.length < 5) this.addButton.disabled = false;\r\n\t\t\t\tif (this.rects.length < 1) this.deleteButton.disabled = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.addButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.goToTarget) {\r\n\t\t\t\tthis.goToTarget = false;\r\n\t\t\t\tthis.svg.style(\"cursor\", \"grab\");\r\n\t\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", null);\r\n\t\t\t\tthis.svgContainer.on(\"click.gototarget\", null);\r\n\t\t\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\t\t\tthis.goToButton.textContent = \"GoTo Point\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst svgWidth = parseFloat(this.svg.attr(\"width\"));\r\n\t\t\tconst svgHeight = parseFloat(this.svg.attr(\"height\"));\r\n\t\t\tconst centerWorld = this.screenToWorldCoords(svgWidth / 2, svgHeight / 2);\r\n\t\t\tconst params = this.getMapParams();\r\n\t\t\tif (!params) return;\r\n\r\n\t\t\tthis.rects.push({\r\n\t\t\t\tid: this.rectCounter++,\r\n\t\t\t\tx: centerWorld.x - 25 * params.scaleFactor,\r\n\t\t\t\ty: centerWorld.y - 25 * params.scaleFactor,\r\n\t\t\t\twidth: 50 * params.scaleFactor,\r\n\t\t\t\theight: 50 * params.scaleFactor,\r\n\t\t\t});\r\n\t\t\tthis.drawZones();\r\n\t\t\tif (this.rects.length > 0) this.deleteButton.disabled = false;\r\n\t\t\tif (this.rects.length > 4) this.addButton.disabled = true;\r\n\t\t\tthis.updateRobotZones();\r\n\t\t});\r\n\r\n\t\tthis.startButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.updateRobotZones();\r\n\t\t\tconst command = this.zones.length > 0 ? \"app_zoned_clean\" : \"app_start\";\r\n\t\t\tconst parameters = this.zones.length > 0 ? { zones: this.zones, duid: this.currentRobotDuid } : { duid: this.currentRobotDuid };\r\n\t\t\tthis.connection.sendTo(this.instanceId, command, parameters).catch((err) => console.error(\"Error sending command:\", err));\r\n\t\t\tthis.rects = [];\r\n\t\t\tthis.drawZones();\r\n\t\t\tthis.deleteButton.disabled = true;\r\n\t\t\tthis.addButton.disabled = false;\r\n\t\t\tthis.startButton.style.display = \"none\";\r\n\t\t\tthis.pauseButton.style.display = \"inline-block\";\r\n\t\t});\r\n\r\n\t\tthis.pauseButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.connection.sendTo(this.instanceId, \"app_pause\", { duid: this.currentRobotDuid });\r\n\t\t\tthis.startButton.style.display = \"inline-block\";\r\n\t\t\tthis.pauseButton.style.display = \"none\";\r\n\t\t});\r\n\r\n\t\tthis.stopButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.connection.sendTo(this.instanceId, \"app_stop\", { duid: this.currentRobotDuid });\r\n\t\t\tthis.startButton.style.display = \"inline-block\";\r\n\t\t\tthis.pauseButton.style.display = \"none\";\r\n\t\t});\r\n\r\n\t\tthis.dockButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.connection.sendTo(this.instanceId, \"app_charge\", { duid: this.currentRobotDuid });\r\n\t\t});\r\n\r\n\t\tthis.goToButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.goToTarget) {\r\n\t\t\t\tthis.goToTarget = false;\r\n\t\t\t\tthis.svg.style(\"cursor\", \"grab\");\r\n\t\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", null);\r\n\t\t\t\tthis.svgContainer.on(\"click.gototarget\", null);\r\n\t\t\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\t\t\tthis.goToButton.textContent = \"GoTo Point\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.goToTarget = true;\r\n\t\t\tthis.svg.style(\"cursor\", \"none\");\r\n\t\t\tthis.goToButton.textContent = \"Cancel\";\r\n\t\t\tconst transform = d3.zoomTransform(this.svgContainer.node() as Element);\r\n\t\t\tconst svgWidth = parseFloat(this.svg.attr(\"width\"));\r\n\t\t\tconst svgHeight = parseFloat(this.svg.attr(\"height\"));\r\n\t\t\tconst [initialX, initialY] = transform.invert([svgWidth / 2, svgHeight / 2]);\r\n\t\t\tconst scaledPinWidth = this.rescaler.pinWidth();\r\n\t\t\tconst scaledPinHeight = this.rescaler.pinHeight();\r\n\t\t\tconst scaledPinYOffset = this.rescaler.pinYOffset();\r\n\t\t\tconst pin = this.pinGroup.select(\"image.goto-pin\");\r\n\t\t\tpin\r\n\t\t\t\t.style(\"display\", \"block\")\r\n\t\t\t\t.style(\"opacity\", 0.7)\r\n\t\t\t\t.attr(\"data-center-x\", initialX)\r\n\t\t\t\t.attr(\"data-center-y\", initialY)\r\n\t\t\t\t.attr(\"x\", initialX - scaledPinWidth / 2)\r\n\t\t\t\t.attr(\"y\", initialY - (scaledPinHeight - scaledPinYOffset));\r\n\r\n\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", (event: MouseEvent) => {\r\n\t\t\t\tconst [mouseX, mouseY] = d3.pointer(event, this.mainGroup.node());\r\n\t\t\t\tconst scaledW = this.rescaler.pinWidth();\r\n\t\t\t\tconst scaledH = this.rescaler.pinHeight();\r\n\t\t\t\tconst scaledOff = this.rescaler.pinYOffset();\r\n\t\t\t\tpin\r\n\t\t\t\t\t.attr(\"data-center-x\", mouseX)\r\n\t\t\t\t\t.attr(\"data-center-y\", mouseY)\r\n\t\t\t\t\t.attr(\"x\", mouseX - scaledW / 2)\r\n\t\t\t\t\t.attr(\"y\", mouseY - (scaledH - scaledOff));\r\n\t\t\t});\r\n\r\n\t\t\tthis.svgContainer.on(\"click.gototarget\", (event: MouseEvent) => {\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!this.currentRobotDuid || !params) return;\r\n\t\t\t\tconst [mouseX, mouseY] = d3.pointer(event, this.mainGroup.node());\r\n\t\t\t\tconst worldX = mouseX + this.mapMinX;\r\n\t\t\t\tconst worldY = mouseY + this.mapMinY;\r\n\t\t\t\tconst point = localCoordsToRobotCoords({ x: worldX, y: worldY }, params);\r\n\t\t\t\tthis.connection.sendTo(this.instanceId, \"app_goto_target\", { points: [point.x, point.y], duid: this.currentRobotDuid });\r\n\t\t\t\tpin.style(\"opacity\", 1.0);\r\n\t\t\t\tthis.goToTarget = false;\r\n\t\t\t\tthis.svg.style(\"cursor\", \"grab\");\r\n\t\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", null);\r\n\t\t\t\tthis.svgContainer.on(\"click.gototarget\", null);\r\n\t\t\t\tthis.goToButton.textContent = \"GoTo Point\";\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.resetZoomButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.initialTransform) {\r\n\t\t\t\tthis.svgContainer.transition().duration(750).call(this.zoom.transform as any, this.initialTransform);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.popupImage.addEventListener(\"click\", () => {\r\n\t\t\tthis.largePhoto.style.display = \"block\";\r\n\t\t\tthis.popup.style.display = \"none\";\r\n\t\t\tthis.triangle.style.display = \"none\";\r\n\t\t\tif (this.popupTimeout) clearTimeout(this.popupTimeout);\r\n\t\t\tthis.popupTimeout = null;\r\n\t\t\tif (!this.currentRobotDuid || !this.selectedObstacleID) return;\r\n\t\t\tthis.largePhotoImage.src = \"\";\r\n\t\t\tthis.connection\r\n\t\t\t\t.sendTo(this.instanceId, \"get_obstacle_image\", { obstacleId: this.selectedObstacleID, duid: this.currentRobotDuid, type: 0 })\r\n\t\t\t\t.then((response: any) => {\r\n\t\t\t\t\tif (response && typeof response.image === \"string\") this.largePhotoImage.src = response.image.replace(/\\s/g, \"\");\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => console.error(\"Error getting large obstacle image:\", err));\r\n\t\t});\r\n\r\n\t\tthis.largePhoto.addEventListener(\"click\", () => {\r\n\t\t\tthis.largePhoto.style.display = \"none\";\r\n\t\t});\r\n\t}\r\n\r\n\t// Rescaler Helper\r\n\tprivate get rescaler() {\r\n\t\treturn {\r\n\t\t\tscale: () => VISUAL_BLOCK_SIZE,\r\n\t\t\trobotSize: () => VISUAL_BLOCK_SIZE * UI_CONSTANTS.ROBOT_SIZE_BASE,\r\n\t\t\tchargerSize: () => VISUAL_BLOCK_SIZE * UI_CONSTANTS.CHARGER_SIZE_BASE,\r\n\t\t\tzoneStrokeWidth: () => UI_CONSTANTS.ZONE_STROKE_BASE / this.wheelZoom,\r\n\t\t\tzoneHandleRadius: () => UI_CONSTANTS.ZONE_HANDLE_RADIUS_BASE / this.wheelZoom,\r\n\t\t\tpinWidth: () => UI_CONSTANTS.PIN_WIDTH_BASE / this.wheelZoom,\r\n\t\t\tpinHeight: () => UI_CONSTANTS.PIN_HEIGHT_BASE / this.wheelZoom,\r\n\t\t\tpinYOffset: () => UI_CONSTANTS.PIN_Y_OFFSET_BASE / this.wheelZoom,\r\n\t\t\tpathMopWidth: () => UI_CONSTANTS.PATH_MOP_WIDTH_BASE * VISUAL_BLOCK_SIZE,\r\n\t\t\tpathMainWidth: () => Math.max(1, VISUAL_BLOCK_SIZE * UI_CONSTANTS.PATH_MAIN_WIDTH_RATIO_BASE),\r\n\t\t\tpathBackwashWidth: () => UI_CONSTANTS.PATH_BACKWASH_WIDTH_BASE * VISUAL_BLOCK_SIZE,\r\n\t\t};\r\n\t}\r\n}\r\n\r\n// =================================================================================\r\n// --- Main Entry Point ---\r\n// =================================================================================\r\n\r\nwindow.onload = async () => {\r\n\tconst app = new MapApplication();\r\n\tapp.init().catch((err) => console.error(\"Failed to initialize Map Application:\", err));\r\n};\r\n"]} \ No newline at end of file +{"version":3,"file":"map.js","sourceRoot":"","sources":["../src/www/map.ts"],"names":[],"mappings":"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","sourcesContent":["import { Connection } from \"./conn.js\";\r\nimport * as d3 from \"d3\";\r\nimport { IMG_GO_TO_PIN, IMG_CHARGER, IMG_ROBOT_ORIGINAL } from \"./images.js\";\r\nimport { localCoordsToRobotCoords, robotCoordsToLocalCoords } from \"./coords.js\";\r\nimport { processPaths, type PathResult } from \"./pathProcessor.js\";\r\n\r\n// Interfaces\r\n// -----------------------------------------------------------------------------\r\n\r\ninterface MapData {\r\n\tIMAGE: {\r\n\t\tposition: { left: number; top: number };\r\n\t\tdimensions: { height: number; width: number };\r\n\t\tsegments: {\r\n\t\t\tlist: SegmentInfo[];\r\n\t\t};\r\n\t};\r\n\tROBOT_POSITION?: PositionBlock;\r\n\tCHARGER_LOCATION?: PositionBlock;\r\n\tPATH?: PathBlock;\r\n\tMOP_PATH?: number[];\r\n\tOBSTACLES2?: Array<[number, number, ...any]>;\r\n\tCARPET_MAP?: number[];\r\n}\r\n\r\ninterface PositionBlock {\r\n\tposition: [number, number];\r\n\tangle: number;\r\n}\r\n\r\ninterface PathBlock {\r\n\tcurrent_angle: number;\r\n\tpoints: [number, number][];\r\n}\r\n\r\ninterface SegmentInfo {\r\n\tid: number;\r\n\tname: string;\r\n\tcenter: [number, number]; // Robot coordinates\r\n}\r\n\r\ninterface Robot {\r\n\tduid: string;\r\n\tname: string;\r\n}\r\n\r\ninterface Point {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\ninterface Rect {\r\n\tid: number; // Unique ID for D3 data binding\r\n\tx: number;\r\n\ty: number;\r\n\twidth: number;\r\n\theight: number;\r\n}\r\n\r\ninterface ConnCallbacks {\r\n\tonConnChange?: (isConnected: boolean) => void;\r\n\tonUpdate?: (id: string, state: any | null | undefined) => void;\r\n\tonRefresh?: ((...args: any[]) => any) | null;\r\n\tonAuth?: ((...args: any[]) => any) | null;\r\n\tonCommand?: (instance: string, command: string, data: any) => any;\r\n\tonError?: (err: any) => void;\r\n\tonObjectChange?: (id: string, obj: any) => void;\r\n}\r\n\r\ninterface MapParams {\r\n\tscaleFactor: number;\r\n\tleft: number;\r\n\ttopMap: number;\r\n\tmapMaxY: number;\r\n\timageHeight: number;\r\n\timageWidth: number;\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n// Constants\r\n// -----------------------------------------------------------------------------\r\n\r\nconst VISUAL_BLOCK_SIZE = 3; // Scale factor for visualization\r\nconst UI_CONSTANTS = {\r\n\tROBOT_SIZE_BASE: 5,\r\n\tCHARGER_SIZE_BASE: 3,\r\n\tOBSTACLE_RADIUS_BASE: 3,\r\n\tZONE_STROKE_BASE: 1.5,\r\n\tZONE_HANDLE_RADIUS_BASE: 5,\r\n\tPIN_WIDTH_BASE: 29,\r\n\tPIN_HEIGHT_BASE: 24,\r\n\tPIN_Y_OFFSET_BASE: 5,\r\n\tPATH_MOP_WIDTH_BASE: 6.5,\r\n\tPATH_MAIN_WIDTH_RATIO_BASE: 0.5,\r\n\tPATH_BACKWASH_WIDTH_BASE: 0.5,\r\n};\r\n\r\n// -----------------------------------------------------------------------------\r\n// Map Application Class\r\n// -----------------------------------------------------------------------------\r\n\r\nclass MapApplication {\r\n\t// State\r\n\tprivate connection: Connection;\r\n\tprivate instanceId: string = \"\";\r\n\tprivate currentRobotDuid: string | null = null;\r\n\tprivate onStateChange: ((id: string, state: any | null | undefined) => void) | null = null;\r\n\tprivate currentMapSubscriptions: string[] = [];\r\n\r\n\t// Map Data\r\n\tprivate map: MapData | undefined;\r\n\tprivate mapImage: MapData[\"IMAGE\"] | undefined;\r\n\tprivate mapMinX: number = 0;\r\n\tprivate mapMinY: number = 0;\r\n\tprivate mapSizeX: number = 0;\r\n\tprivate mapSizeY: number = 0;\r\n\tprivate mapMaxY: number = 0;\r\n\tprivate goToTarget = false;\r\n\tprivate zoomLevel = 0.55;\r\n\r\n\t// D3 & SVG State\r\n\tprivate image = new Image();\r\n\tprivate initialTransform: d3.ZoomTransform | undefined;\r\n\tprivate svg: d3.Selection;\r\n\tprivate svgContainer: d3.Selection;\r\n\tprivate mainGroup: d3.Selection;\r\n\tprivate mapImageElement: d3.Selection;\r\n\r\n\t// Layers\r\n\tprivate carpetGroup: d3.Selection;\r\n\tprivate pathGroup: d3.Selection;\r\n\tprivate mopPathGroup: d3.Selection;\r\n\tprivate backwashPathGroup: d3.Selection;\r\n\tprivate pureCleanPathGroup: d3.Selection;\r\n\r\n\t// Element Groups\r\n\tprivate chargerGroup: d3.Selection;\r\n\tprivate robotGroup: d3.Selection;\r\n\tprivate roomNameGroup: d3.Selection;\r\n\tprivate zoneGroup: d3.Selection;\r\n\tprivate obstacleGroup: d3.Selection;\r\n\tprivate pinGroup: d3.Selection;\r\n\tprivate zoom: d3.ZoomBehavior;\r\n\r\n\tprivate wheelZoom = 1;\r\n\tprivate readonly minZoom = 0.1;\r\n\tprivate readonly maxZoom = 10;\r\n\r\n\t// UI Interaction State\r\n\tprivate popupTimeout: number | null = null;\r\n\tprivate popupX: number = 0;\r\n\tprivate popupY: number = 0;\r\n\tprivate selectedObstacleID: any;\r\n\tprivate rects: Rect[] = [];\r\n\tprivate zones: number[][] = [];\r\n\tprivate rectCounter = 0;\r\n\r\n\t// DOM Elements\r\n\tprivate popup!: HTMLElement;\r\n\tprivate popupImage!: HTMLImageElement;\r\n\tprivate triangle!: HTMLElement;\r\n\tprivate largePhoto!: HTMLElement;\r\n\tprivate largePhotoImage!: HTMLImageElement;\r\n\tprivate robotSelect!: HTMLSelectElement;\r\n\tprivate deleteButton!: HTMLButtonElement;\r\n\tprivate addButton!: HTMLButtonElement;\r\n\tprivate startButton!: HTMLButtonElement;\r\n\tprivate pauseButton!: HTMLButtonElement;\r\n\tprivate stopButton!: HTMLButtonElement;\r\n\tprivate dockButton!: HTMLButtonElement;\r\n\tprivate goToButton!: HTMLButtonElement;\r\n\tprivate resetZoomButton!: HTMLButtonElement;\r\n\r\n\tconstructor() {\r\n\t\tthis.connection = new Connection();\r\n\t\t// Initialize D3 selections with empty selections initially or in init()\r\n\t\t// We will initialize them properly in init() after DOM is ready\r\n\t\tthis.svg = d3.select(null) as any;\r\n\t\tthis.svgContainer = d3.select(null) as any;\r\n\t\tthis.mainGroup = d3.select(null) as any;\r\n\t\tthis.mapImageElement = d3.select(null) as any;\r\n\t\tthis.carpetGroup = d3.select(null) as any;\r\n\t\tthis.pathGroup = d3.select(null) as any;\r\n\t\tthis.mopPathGroup = d3.select(null) as any;\r\n\t\tthis.backwashPathGroup = d3.select(null) as any;\r\n\t\tthis.pureCleanPathGroup = d3.select(null) as any;\r\n\t\tthis.chargerGroup = d3.select(null) as any;\r\n\t\tthis.robotGroup = d3.select(null) as any;\r\n\t\tthis.roomNameGroup = d3.select(null) as any;\r\n\t\tthis.zoneGroup = d3.select(null) as any;\r\n\t\tthis.obstacleGroup = d3.select(null) as any;\r\n\t\tthis.pinGroup = d3.select(null) as any;\r\n\t\tthis.zoom = d3.zoom();\r\n\t}\r\n\r\n\tpublic async init() {\r\n\t\tthis.bindDomElements();\r\n\t\tthis.setupD3();\r\n\t\tthis.setupConnection();\r\n\t\tthis.bindUiEvents();\r\n\t}\r\n\r\n\tprivate bindDomElements() {\r\n\t\tconst getElement = (id: string): T => {\r\n\t\t\tconst el = document.getElementById(id);\r\n\t\t\tif (!el) throw new Error(`Missing DOM element: ${id}`);\r\n\t\t\treturn el as T;\r\n\t\t};\r\n\r\n\t\tthis.popup = getElement(\"popup\");\r\n\t\tthis.popupImage = getElement(\"popup-image\");\r\n\t\tthis.triangle = getElement(\"triangle\");\r\n\t\tthis.largePhoto = getElement(\"largePhoto\");\r\n\t\tthis.largePhotoImage = getElement(\"largePhoto-image\");\r\n\t\tthis.robotSelect = getElement(\"robotSelect\");\r\n\t\tthis.deleteButton = getElement(\"deleteButton\");\r\n\t\tthis.addButton = getElement(\"addButton\");\r\n\t\tthis.startButton = getElement(\"startButton\");\r\n\t\tthis.pauseButton = getElement(\"pauseButton\");\r\n\t\tthis.stopButton = getElement(\"stopButton\");\r\n\t\tthis.dockButton = getElement(\"dockButton\");\r\n\t\tthis.goToButton = getElement(\"goToButton\");\r\n\t\tthis.resetZoomButton = getElement(\"resetZoomButton\");\r\n\t}\r\n\r\n\tprivate setupD3() {\r\n\t\tthis.svgContainer = d3.select(\"#mapSvgContainer\");\r\n\t\tthis.svg = d3.select(\"#mapSvg\");\r\n\t\tthis.mainGroup = this.svg.append(\"g\").attr(\"class\", \"main-group\");\r\n\t\tthis.mapImageElement = this.mainGroup.append(\"image\").attr(\"class\", \"map-image\");\r\n\r\n\t\t// Add carpet layer (Vector SVG)\r\n\t\tthis.carpetGroup = this.mainGroup.append(\"g\").attr(\"class\", \"carpet\");\r\n\r\n\t\tthis.mopPathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"mop-paths\")\r\n\t\t\t.style(\"opacity\", 0.18);\r\n\t\tthis.pathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"paths\")\r\n\t\t\t.style(\"opacity\", 0.5);\r\n\t\tthis.backwashPathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"backwash-paths\")\r\n\t\t\t.style(\"opacity\", 0.2);\r\n\t\tthis.pureCleanPathGroup = this.mainGroup\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"pure-clean-paths\");\r\n\r\n\t\tthis.chargerGroup = this.mainGroup.append(\"g\").attr(\"class\", \"charger\");\r\n\t\tthis.obstacleGroup = this.mainGroup.append(\"g\").attr(\"class\", \"obstacles\");\r\n\t\tthis.zoneGroup = this.mainGroup.append(\"g\").attr(\"class\", \"zones\");\r\n\t\tthis.robotGroup = this.mainGroup.append(\"g\").attr(\"class\", \"robot\");\r\n\t\tthis.pinGroup = this.mainGroup.append(\"g\").attr(\"class\", \"pins\");\r\n\t\tthis.roomNameGroup = this.mainGroup.append(\"g\").attr(\"class\", \"room-names\");\r\n\r\n\t\tthis.pinGroup\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"goto-pin\")\r\n\t\t\t.attr(\"href\", IMG_GO_TO_PIN)\r\n\t\t\t.attr(\"width\", 29)\r\n\t\t\t.attr(\"height\", 24)\r\n\t\t\t.style(\"opacity\", 0)\r\n\t\t\t.style(\"display\", \"none\")\r\n\t\t\t.style(\"pointer-events\", \"none\");\r\n\r\n\t\tthis.zoom = d3\r\n\t\t\t.zoom()\r\n\t\t\t.scaleExtent([this.minZoom, this.maxZoom])\r\n\t\t\t.on(\"zoom\", (event: any) => this.handleZoom(event));\r\n\r\n\t\tthis.svgContainer.call(this.zoom as any);\r\n\t}\r\n\r\n\tprivate setupConnection() {\r\n\t\tconst instance = this.getQueryParam(\"instance\");\r\n\t\tif (instance === null) {\r\n\t\t\tdocument.body.innerHTML = \"

Error: No instance specified in URL.

\";\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.instanceId = `roborock.${instance}`;\r\n\r\n\t\tconst connCallbacks: ConnCallbacks = {\r\n\t\t\tonConnChange: async (isConnected: boolean) => {\r\n\t\t\t\tif (isConnected) {\r\n\t\t\t\t\tthis.fetchRobotList();\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonUpdate: (id, state) => {\r\n\t\t\t\tif (this.onStateChange) this.onStateChange(id, state as any);\r\n\t\t\t},\r\n\t\t\tonError: (err) => {\r\n\t\t\t\tconsole.error(\"Connection error:\", err);\r\n\t\t\t},\r\n\t\t};\r\n\r\n\t\tconst socketUrl = `${window.location.protocol}//${window.location.hostname}:${window.location.port}`;\r\n\t\tthis.connection.init({ name: this.instanceId, connLink: socketUrl }, connCallbacks, true);\r\n\t}\r\n\r\n\tprivate fetchRobotList() {\r\n\t\tconst startKey = `${this.instanceId}.Devices.`;\r\n\t\tconst endKey = `${this.instanceId}.Devices.\\u9999`;\r\n\r\n\t\tthis.connection\r\n\t\t\t.getObjectView(\"system\", \"device\", { startkey: startKey, endkey: endKey })\r\n\t\t\t.then((res: { rows: { id: string; value: any }[] }) => {\r\n\t\t\t\tconst robots: Robot[] = [];\r\n\t\t\t\tif (res && res.rows) {\r\n\t\t\t\t\tres.rows.forEach((row) => {\r\n\t\t\t\t\t\tconst idParts = row.id.split(\".\");\r\n\t\t\t\t\t\tconst duid = idParts[idParts.length - 1];\r\n\t\t\t\t\t\tconst name = row.value && row.value.common && row.value.common.name ? row.value.common.name : duid;\r\n\t\t\t\t\t\tif (duid) robots.push({ duid: duid, name: name });\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (robots.length === 0) {\r\n\t\t\t\t\tconst instanceDuid = this.getQueryParam(\"instance\");\r\n\t\t\t\t\tif (instanceDuid) {\r\n\t\t\t\t\t\tthis.robotSelect.innerHTML = \"\";\r\n\t\t\t\t\t\tconst option = document.createElement(\"option\");\r\n\t\t\t\t\t\toption.value = instanceDuid;\r\n\t\t\t\t\t\toption.text = `Roborock (Instance ${instanceDuid})`;\r\n\t\t\t\t\t\tthis.robotSelect.appendChild(option);\r\n\t\t\t\t\t\tthis.currentRobotDuid = instanceDuid;\r\n\t\t\t\t\t\tthis.setupSocketListeners(instanceDuid);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.robotSelect.innerHTML = \"\";\r\n\t\t\t\trobots.forEach((robot: Robot) => {\r\n\t\t\t\t\tconst option = document.createElement(\"option\");\r\n\t\t\t\t\toption.value = robot.duid;\r\n\t\t\t\t\toption.text = robot.name;\r\n\t\t\t\t\tthis.robotSelect.appendChild(option);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif (robots.length > 0) {\r\n\t\t\t\t\tconst duid = robots[0].duid;\r\n\t\t\t\t\tthis.currentRobotDuid = duid;\r\n\t\t\t\t\tthis.robotSelect.value = duid;\r\n\t\t\t\t\tthis.setupSocketListeners(duid);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((err) => console.error(\"Error fetching robot list:\", err));\r\n\t}\r\n\r\n\tprivate setupSocketListeners(duid: string) {\r\n\t\tif (this.onStateChange && this.currentMapSubscriptions.length > 0) {\r\n\t\t\tthis.currentMapSubscriptions.forEach((id) => {\r\n\t\t\t\tthis.connection.unsubscribeState(id);\r\n\t\t\t});\r\n\t\t\tthis.currentMapSubscriptions = [];\r\n\t\t}\r\n\r\n\t\tthis.map = undefined;\r\n\t\tthis.mapImage = undefined;\r\n\t\tthis.mapImageElement.attr(\"href\", null);\r\n\t\tthis.carpetGroup.selectAll(\"*\").remove();\r\n\t\tthis.obstacleGroup.selectAll(\"*\").remove();\r\n\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\tthis.robotGroup.selectAll(\"*\").remove();\r\n\t\tthis.chargerGroup.selectAll(\"*\").remove();\r\n\t\tthis.roomNameGroup.selectAll(\"*\").remove();\r\n\t\tthis.pathGroup.selectAll(\"*\").remove();\r\n\t\tthis.mopPathGroup.selectAll(\"*\").remove();\r\n\t\tthis.backwashPathGroup.selectAll(\"*\").remove();\r\n\t\tthis.pureCleanPathGroup.selectAll(\"*\").remove();\r\n\t\tthis.rects = [];\r\n\t\tthis.drawZones();\r\n\t\tthis.deleteButton.disabled = true;\r\n\t\tthis.addButton.disabled = false;\r\n\r\n\t\tconst mapBase64StateId = `${this.instanceId}.Devices.${duid}.map.mapBase64Clean`;\r\n\t\tconst mapDataStateId = `${this.instanceId}.Devices.${duid}.map.mapData`;\r\n\t\tthis.currentMapSubscriptions = [mapBase64StateId, mapDataStateId];\r\n\r\n\t\tthis.onStateChange = (id: string, state: any | null | undefined) => {\r\n\t\t\tif (!state || !state.val) {\r\n\t\t\t\tif (id === mapBase64StateId) {\r\n\t\t\t\t\tthis.mapImageElement.attr(\"href\", null);\r\n\t\t\t\t}\r\n\t\t\t\tif (id === mapDataStateId) {\r\n\t\t\t\t\tthis.map = undefined;\r\n\t\t\t\t\tthis.robotGroup.selectAll(\"*\").remove();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (id) {\r\n\t\t\t\tcase mapBase64StateId:\r\n\t\t\t\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\t\t\t\tthis.drawBackgroundImage(state.val as string);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase mapDataStateId:\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tthis.map = typeof state.val === \"string\" ? JSON.parse(state.val) : state.val;\r\n\t\t\t\t\t\tif (this.map && this.map.IMAGE) {\r\n\t\t\t\t\t\t\tthis.mapImage = this.map.IMAGE;\r\n\t\t\t\t\t\t\tthis.updateMapImageSize();\r\n\t\t\t\t\t\t\tthis.drawRobotAndCharger(this.map.ROBOT_POSITION, this.map.CHARGER_LOCATION);\r\n\t\t\t\t\t\t\tthis.drawPaths(this.map.PATH, this.map.MOP_PATH);\r\n\t\t\t\t\t\t\tthis.drawObstacles(this.map.OBSTACLES2);\r\n\t\t\t\t\t\t\tthis.drawRoomNames(this.map.IMAGE.segments.list);\r\n\t\t\t\t\t\t\tthis.drawCarpet(this.map.CARPET_MAP);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tconsole.error(\"Failed to parse map data JSON:\", state.val, e);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.connection.subscribeState(mapBase64StateId);\r\n\t\tthis.connection.subscribeState(mapDataStateId);\r\n\r\n\t\tthis.connection.getStates([mapBase64StateId, mapDataStateId]).then((states: Record) => {\r\n\t\t\tif (!this.onStateChange) return;\r\n\t\t\tthis.onStateChange(mapBase64StateId, states[mapBase64StateId]);\r\n\t\t\tthis.onStateChange(mapDataStateId, states[mapDataStateId]);\r\n\t\t});\r\n\t}\r\n\t// -----------------------------------------------------------------------------\r\n\t// Drawing Methods\r\n\t// -----------------------------------------------------------------------------\r\n\r\n\tprivate updateMapImageSize() {\r\n\t\tif (!this.image.naturalWidth || !this.image.naturalHeight) return;\r\n\r\n\t\t// Use natural size of the image (1:1 scale)\r\n\t\tconst displayWidth = this.image.naturalWidth;\r\n\t\tconst displayHeight = this.image.naturalHeight;\r\n\r\n\t\tthis.mapImageElement\r\n\t\t\t.attr(\"href\", this.image.src)\r\n\t\t\t.attr(\"width\", displayWidth)\r\n\t\t\t.attr(\"height\", displayHeight)\r\n\t\t\t.attr(\"transform\", null)\r\n\t\t\t.style(\"image-rendering\", \"pixelated\");\r\n\t}\r\n\r\n\tprivate drawBackgroundImage(mapBase64: string) {\r\n\t\tif (!mapBase64) {\r\n\t\t\tthis.mapImageElement.attr(\"href\", null);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.image.src = mapBase64;\r\n\t\tthis.image.onload = () => {\r\n\t\t\tconst tempCanvas = document.createElement(\"canvas\");\r\n\t\t\tconst tempCtx = tempCanvas.getContext(\"2d\", { willReadFrequently: true });\r\n\t\t\tif (!tempCtx) return;\r\n\r\n\t\t\ttempCanvas.width = this.image.width;\r\n\t\t\ttempCanvas.height = this.image.height;\r\n\t\t\ttempCtx.imageSmoothingEnabled = false;\r\n\t\t\ttempCtx.drawImage(this.image, 0, 0);\r\n\r\n\t\t\tlet mapMaxX = 0;\r\n\t\t\tthis.mapMaxY = 0;\r\n\t\t\tthis.mapMinX = this.image.width;\r\n\t\t\tthis.mapMinY = this.image.height;\r\n\r\n\t\t\tconst imageData = tempCtx.getImageData(0, 0, this.image.width, this.image.height);\r\n\t\t\tconst pixels = imageData.data;\r\n\t\t\tfor (let i = 0; i < pixels.length; i += 4) {\r\n\t\t\t\tconst alpha = pixels[i + 3];\r\n\t\t\t\tif (alpha > 50) {\r\n\t\t\t\t\tconst x = (i / 4) % this.image.width;\r\n\t\t\t\t\tconst y = Math.floor(i / 4 / this.image.width);\r\n\t\t\t\t\tif (x < this.mapMinX) this.mapMinX = x;\r\n\t\t\t\t\tif (x > mapMaxX) mapMaxX = x;\r\n\t\t\t\t\tif (y < this.mapMinY) this.mapMinY = y;\r\n\t\t\t\t\tif (y > this.mapMaxY) this.mapMaxY = y;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.mapMinX > mapMaxX) {\r\n\t\t\t\tthis.mapMinX = 0;\r\n\t\t\t\tmapMaxX = this.image.width;\r\n\t\t\t\tthis.mapMinY = 0;\r\n\t\t\t\tthis.mapMaxY = this.image.height;\r\n\t\t\t}\r\n\r\n\t\t\t// Calculate content dimensions based on detected pixels\r\n\t\t\tthis.mapSizeX = mapMaxX - this.mapMinX;\r\n\t\t\tthis.mapSizeY = this.mapMaxY - this.mapMinY;\r\n\r\n\t\t\t// Sanity check\r\n\t\t\tif (this.mapSizeX <= 0) this.mapSizeX = this.image.width;\r\n\t\t\tif (this.mapSizeY <= 0) this.mapSizeY = this.image.height;\r\n\r\n\t\t\tthis.updateMapImageSize();\r\n\r\n\t\t\tthis.carpetGroup.attr(\"transform\", null);\r\n\r\n\t\t\tconst svgWidth = parseFloat(this.svg.attr(\"width\")) || 800;\r\n\t\t\tconst svgHeight = parseFloat(this.svg.attr(\"height\")) || 600;\r\n\r\n\t\t\t// Zoom-to-fit calculations\r\n\t\t\tconst aspectRatio = svgWidth / svgHeight;\r\n\t\t\tconst contentAspectRatio = this.mapSizeX / this.mapSizeY;\r\n\r\n\t\t\tif (contentAspectRatio > aspectRatio) {\r\n\t\t\t\tthis.zoomLevel = this.roundTwoDecimals((svgWidth * 0.95) / this.mapSizeX); // 95% fit\r\n\t\t\t} else {\r\n\t\t\t\tthis.zoomLevel = this.roundTwoDecimals((svgHeight * 0.95) / this.mapSizeY);\r\n\t\t\t}\r\n\r\n\t\t\tif (this.zoomLevel < 0.1) this.zoomLevel = 0.1;\r\n\r\n\t\t\t// Center the content within the SVG\r\n\t\t\tconst contentCenterX = this.mapMinX + this.mapSizeX / 2;\r\n\t\t\tconst contentCenterY = this.mapMinY + this.mapSizeY / 2;\r\n\r\n\t\t\tthis.initialTransform = d3.zoomIdentity\r\n\t\t\t\t.translate(svgWidth / 2, svgHeight / 2)\r\n\t\t\t\t.scale(this.zoomLevel)\r\n\t\t\t\t.translate(-contentCenterX, -contentCenterY);\r\n\r\n\t\t\tthis.svgContainer.call(this.zoom.transform as any, this.initialTransform);\r\n\r\n\t\t\tif (this.map) {\r\n\t\t\t\tthis.drawRobotAndCharger(this.map.ROBOT_POSITION, this.map.CHARGER_LOCATION);\r\n\t\t\t\tthis.drawPaths(this.map.PATH, this.map.MOP_PATH);\r\n\t\t\t\tthis.drawObstacles(this.map.OBSTACLES2);\r\n\t\t\t\tthis.drawRoomNames(this.map.IMAGE.segments.list);\r\n\t\t\t\tthis.drawCarpet(this.map.CARPET_MAP);\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\r\n\tprivate drawRobotAndCharger(robotPos?: PositionBlock, chargerPos?: PositionBlock) {\r\n\t\tthis.robotGroup.selectAll(\"image.robot\").remove();\r\n\t\tthis.chargerGroup.selectAll(\"image.charger\").remove();\r\n\r\n\t\tif (!robotPos && !chargerPos) return;\r\n\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params) return;\r\n\r\n\t\tconst scaledChargerSize = this.rescaler.chargerSize();\r\n\t\tconst scaledRobotSize = this.rescaler.robotSize();\r\n\r\n\t\t// Charger\r\n\t\tconst chargerData = chargerPos ? [chargerPos] : [];\r\n\t\tconst charger = this.chargerGroup.selectAll(\"image.charger\").data(chargerData);\r\n\t\tcharger.exit().remove();\r\n\t\tcharger\r\n\t\t\t.enter()\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"charger\")\r\n\t\t\t.attr(\"href\", IMG_CHARGER)\r\n\t\t\t.merge(charger as any)\r\n\t\t\t.attr(\"width\", scaledChargerSize)\r\n\t\t\t.attr(\"height\", scaledChargerSize)\r\n\t\t\t.attr(\"x\", (d) => this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).x - scaledChargerSize / 2)\r\n\t\t\t.attr(\"y\", (d) => this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).y - scaledChargerSize / 2);\r\n\r\n\t\t// Robot\r\n\t\tconst robotData = robotPos ? [robotPos] : [];\r\n\t\tconst robot = this.robotGroup.selectAll(\"image.robot\").data(robotData);\r\n\t\trobot.exit().remove();\r\n\t\trobot\r\n\t\t\t.enter()\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"robot\")\r\n\t\t\t.attr(\"href\", IMG_ROBOT_ORIGINAL)\r\n\t\t\t.merge(robot as any)\r\n\t\t\t.attr(\"width\", scaledRobotSize)\r\n\t\t\t.attr(\"height\", scaledRobotSize)\r\n\t\t\t.attr(\"transform\", (d) => {\r\n\t\t\t\tconst svgCoords = this.robotToSvg({ x: d.position[0], y: d.position[1] }, params);\r\n\t\t\t\tconst angle = -(d.angle ?? 0) + 90;\r\n\t\t\t\treturn `translate(${svgCoords.x}, ${svgCoords.y}) rotate(${angle}) translate(${-scaledRobotSize / 2}, ${-scaledRobotSize / 2})`;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate drawRoomNames(segmentsList: SegmentInfo[]) {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params || !segmentsList) {\r\n\t\t\tthis.roomNameGroup.selectAll(\"text.room-name\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst baseFontSize = 12;\r\n\t\tconst baseStrokeWidth = 2.5;\r\n\r\n\t\tconst textElements = this.roomNameGroup.selectAll(\"text.room-name\").data(segmentsList, (d: any) => d.id);\r\n\t\ttextElements.exit().remove();\r\n\t\ttextElements\r\n\t\t\t.enter()\r\n\t\t\t.append(\"text\")\r\n\t\t\t.attr(\"class\", \"room-name\")\r\n\t\t\t.attr(\"text-anchor\", \"middle\")\r\n\t\t\t.attr(\"dominant-baseline\", \"middle\")\r\n\t\t\t.style(\"fill\", \"#000\")\r\n\t\t\t.style(\"stroke\", \"white\")\r\n\t\t\t.style(\"pointer-events\", \"none\")\r\n\t\t\t.style(\"font-weight\", \"900\")\r\n\t\t\t.style(\"font-size\", `${baseFontSize}px`)\r\n\t\t\t.style(\"stroke-width\", `${baseStrokeWidth}px`)\r\n\t\t\t.style(\"paint-order\", \"stroke\")\r\n\t\t\t.attr(\"shape-rendering\", \"geometricPrecision\")\r\n\t\t\t.merge(textElements as any)\r\n\t\t\t.text((d) => d.name)\r\n\t\t\t.attr(\"x\", (d) => {\r\n\t\t\t\tif (d.center && typeof d.center[0] === \"number\" && !isNaN(d.center[0]))\r\n\t\t\t\t\treturn this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).x;\r\n\t\t\t\treturn -1000;\r\n\t\t\t})\r\n\t\t\t.attr(\"y\", (d) => {\r\n\t\t\t\tif (d.center && typeof d.center[1] === \"number\" && !isNaN(d.center[1]))\r\n\t\t\t\t\treturn this.robotToSvg({ x: d.center[0], y: d.center[1] }, params).y;\r\n\t\t\t\treturn -1000;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate drawPaths(pathData?: PathBlock, mopData?: number[]) {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params || !pathData?.points || !mopData) {\r\n\t\t\tthis.pathGroup.selectAll(\"*\").remove();\r\n\t\t\tthis.mopPathGroup.selectAll(\"*\").remove();\r\n\t\t\tthis.backwashPathGroup.selectAll(\"*\").remove();\r\n\t\t\tthis.pureCleanPathGroup.selectAll(\"*\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst scale = VISUAL_BLOCK_SIZE;\r\n\r\n\t\tconst paths: PathResult = processPaths(\r\n\t\t\tpathData.points,\r\n\t\t\tmopData,\r\n\t\t\t(robotPoint, p) => this.robotToSvg({ x: robotPoint[0], y: robotPoint[1] }, p),\r\n\t\t\tscale,\r\n\t\t\tparams\r\n\t\t);\r\n\r\n\t\tconst scaledMopWidth = this.rescaler.pathMopWidth();\r\n\t\tconst scaledPathWidth = this.rescaler.pathMainWidth();\r\n\t\tconst scaledBackwashWidth = this.rescaler.pathBackwashWidth();\r\n\r\n\t\t// 1. Main Path\r\n\t\tconst mainPath = this.pathGroup.selectAll(\"path.main-path\").data(paths.mainPathD ? [paths.mainPathD] : []);\r\n\t\tmainPath.exit().remove();\r\n\t\tmainPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"main-path\")\r\n\t\t\t.merge(mainPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledPathWidth}px`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\r\n\t\t// 2. Backwash Path\r\n\t\tconst backwashPath = this.backwashPathGroup.selectAll(\"path.backwash-path\").data(paths.backwashPathD ? [paths.backwashPathD] : []);\r\n\t\tbackwashPath.exit().remove();\r\n\t\tbackwashPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"backwash-path\")\r\n\t\t\t.merge(backwashPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledBackwashWidth}px`)\r\n\t\t\t.style(\"stroke-dasharray\", `${4}, ${8}`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\r\n\t\t// 3. PureClean Path\r\n\t\tconst pureCleanPath = this.pureCleanPathGroup.selectAll(\"path.pure-clean-path\").data(paths.pureCleanPathD ? [paths.pureCleanPathD] : []);\r\n\t\tpureCleanPath.exit().remove();\r\n\t\tpureCleanPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"pure-clean-path\")\r\n\t\t\t.merge(pureCleanPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledBackwashWidth}px`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\r\n\t\t// 4. Mop Path\r\n\t\tconst mopPath = this.mopPathGroup.selectAll(\"path.mop-path\").data(paths.mopPathD ? [paths.mopPathD] : []);\r\n\t\tmopPath.exit().remove();\r\n\t\tmopPath\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"mop-path\")\r\n\t\t\t.merge(mopPath as any)\r\n\t\t\t.attr(\"d\", (d) => d)\r\n\t\t\t.style(\"fill\", \"none\")\r\n\t\t\t.style(\"stroke\", \"rgba(255,255,255,1.0)\")\r\n\t\t\t.style(\"stroke-width\", `${scaledMopWidth}px`)\r\n\t\t\t.style(\"stroke-linecap\", \"round\")\r\n\t\t\t.style(\"stroke-linejoin\", \"round\");\r\n\t}\r\n\r\n\tprivate drawObstacles(obstaclesData?: Array<[number, number, ...any]>) {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params || !obstaclesData) {\r\n\t\t\tthis.obstacleGroup.selectAll(\".obstacle-group\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst fixedRadius = this.rescaler.scale() * UI_CONSTANTS.OBSTACLE_RADIUS_BASE;\r\n\t\tconst bgRadius = fixedRadius * 1.1;\r\n\t\tconst imageSize = fixedRadius * 1.8;\r\n\r\n\t\tconst OBSTACLE_MAPPING: Record = {\r\n\t\t\t\"-99\": \"99\",\r\n\t\t\t0: \"0\",\r\n\t\t\t1: \"1\",\r\n\t\t\t2: \"2\",\r\n\t\t\t3: \"3\",\r\n\t\t\t4: \"3\",\r\n\t\t\t5: \"5_cn\",\r\n\t\t\t9: \"9\",\r\n\t\t\t10: \"10\",\r\n\t\t\t18: \"18\",\r\n\t\t\t25: \"25\",\r\n\t\t\t26: \"26\",\r\n\t\t\t27: \"26\",\r\n\t\t\t34: \"10\",\r\n\t\t\t42: \"18\",\r\n\t\t\t48: \"48\",\r\n\t\t\t49: \"49\",\r\n\t\t\t50: \"50\",\r\n\t\t\t51: \"51\",\r\n\t\t\t54: \"54\",\r\n\t\t\t65: \"65\",\r\n\t\t\t67: \"67\",\r\n\t\t\t69: \"69\",\r\n\t\t\t70: \"70\",\r\n\t\t\t99: \"99\",\r\n\t\t};\r\n\r\n\t\tconst groups = this.obstacleGroup.selectAll(\".obstacle-group\").data(obstaclesData);\r\n\r\n\t\tgroups.exit().remove();\r\n\r\n\t\tconst enterGroups = groups\r\n\t\t\t.enter()\r\n\t\t\t.append(\"g\")\r\n\t\t\t.attr(\"class\", \"obstacle-group\")\r\n\t\t\t.style(\"cursor\", \"default\")\r\n\t\t\t.on(\"click\", (event: MouseEvent, d: any) => {\r\n\t\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\tthis.selectedObstacleID = d[6];\r\n\t\t\t\tconst robotPoint = { x: d[0], y: d[1] };\r\n\t\t\t\tconst worldPoint = robotCoordsToLocalCoords(robotPoint, params!);\r\n\t\t\t\tthis.popupX = worldPoint.x;\r\n\t\t\t\tthis.popupY = worldPoint.y;\r\n\r\n\t\t\t\tif (this.popupTimeout) clearTimeout(this.popupTimeout);\r\n\r\n\t\t\t\tthis.connection\r\n\t\t\t\t\t.sendTo(this.instanceId, \"get_obstacle_image\", { obstacleId: this.selectedObstacleID, duid: this.currentRobotDuid, type: 1 })\r\n\t\t\t\t\t.then((response) => {\r\n\t\t\t\t\t\tif (response && (response as any).image) {\r\n\t\t\t\t\t\t\tlet imageData = (response as any).image as string;\r\n\t\t\t\t\t\t\tif (typeof imageData === \"string\" && !imageData.startsWith(\"data:image/\")) imageData = \"data:image/png;base64,\" + imageData;\r\n\t\t\t\t\t\t\tthis.popupImage.src = imageData;\r\n\t\t\t\t\t\t\tthis.popup.style.display = \"block\";\r\n\t\t\t\t\t\t\tthis.triangle.style.display = \"block\";\r\n\t\t\t\t\t\t\tthis.updatePopupPosition();\r\n\t\t\t\t\t\t\tthis.popupTimeout = window.setTimeout(() => {\r\n\t\t\t\t\t\t\t\tthis.popup.style.display = \"none\";\r\n\t\t\t\t\t\t\t\tthis.triangle.style.display = \"none\";\r\n\t\t\t\t\t\t\t\tthis.popupTimeout = null;\r\n\t\t\t\t\t\t\t}, 3000);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((err) => console.error(\"Error getting obstacle image:\", err));\r\n\t\t\t\tthis.updatePopupPosition();\r\n\t\t\t});\r\n\r\n\t\tenterGroups\r\n\t\t\t.append(\"circle\")\r\n\t\t\t.attr(\"class\", \"obstacle-bg\")\r\n\t\t\t.attr(\"r\", bgRadius)\r\n\t\t\t.attr(\"fill\", \"rgba(100, 100, 100, 0.2)\") // More transparent\r\n\t\t\t.attr(\"stroke\", \"white\")\r\n\t\t\t.attr(\"stroke-width\", 0.5); // Thinner border\r\n\r\n\t\tenterGroups\r\n\t\t\t.append(\"image\")\r\n\t\t\t.attr(\"class\", \"obstacle-icon\")\r\n\t\t\t.attr(\"width\", imageSize)\r\n\t\t\t.attr(\"height\", imageSize)\r\n\t\t\t.attr(\"x\", -imageSize / 2)\r\n\t\t\t.attr(\"y\", -imageSize / 2)\r\n\t\t\t.on(\"error\", function () {\r\n\t\t\t\td3.select(this).attr(\"href\", \"images/projects_comroborocktanos_resources_obstacle_new_p18.png\");\r\n\t\t\t});\r\n\r\n\t\tconst allGroups = enterGroups.merge(groups as any);\r\n\r\n\t\tallGroups.attr(\"transform\", (d: any) => {\r\n\t\t\tconst pos = this.robotToSvg({ x: d[0] + 25, y: d[1] + 25 }, params); // Added +25 offset for obstacle center?\r\n\t\t\treturn `translate(${pos.x}, ${pos.y})`;\r\n\t\t});\r\n\r\n\t\tallGroups\r\n\t\t\t.select(\"image\")\r\n\t\t\t.attr(\"href\", (d: any) => {\r\n\t\t\t\tconst type = d[2];\r\n\t\t\t\tconst suffix = OBSTACLE_MAPPING[type] || \"18\";\r\n\t\t\t\treturn `images/projects_comroborocktanos_resources_obstacle_new_p${suffix}.png`;\r\n\t\t\t});\r\n\t}\r\n\r\n\tprivate drawCarpet(carpetMap?: number[]) {\r\n\t\tif (!carpetMap || !this.mapImage || !this.mapImage.dimensions) {\r\n\t\t\tthis.carpetGroup.selectAll(\"*\").remove();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// mapData provides UNSCALED dimensions (raw grid size)\r\n\t\t// We do NOT divide by VISUAL_BLOCK_SIZE here because dimensions IS the grid size.\r\n\t\tconst gridWidth = this.mapImage.dimensions.width;\r\n\t\tconst gridHeight = this.mapImage.dimensions.height;\r\n\t\tconst stride = 3;\r\n\r\n\t\tconst pathCoords: string[] = [];\r\n\r\n\t\t// Consistent Offsets with Coords.ts\r\n\t\t// For grid-based elements (Carpet), we align to the grid cell (0,0), not the center (1.5, 1.5).\r\n\t\t// Paths use 1.5 to be in the center of the cell. Carpets fill the cell.\r\n\t\tconst offsetX = 0;\r\n\t\tconst offsetY = 0;\r\n\r\n\t\tcarpetMap.forEach((px) => {\r\n\t\t\tconst col = px % gridWidth;\r\n\t\t\tconst row = Math.floor(px / gridWidth);\r\n\t\t\tconst invertedRow = gridHeight - row - 1;\r\n\r\n\t\t\tconst baseX = col * VISUAL_BLOCK_SIZE + offsetX;\r\n\t\t\tconst baseY = invertedRow * VISUAL_BLOCK_SIZE + offsetY;\r\n\r\n\t\t\tfor (let dx = 0; dx < VISUAL_BLOCK_SIZE; dx++) {\r\n\t\t\t\tfor (let dy = 0; dy < VISUAL_BLOCK_SIZE; dy++) {\r\n\t\t\t\t\tif ((dx + dy) % stride === 2) {\r\n\t\t\t\t\t\tpathCoords.push(`M${baseX + dx} ${baseY + dy}h1v1h-1z`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tconst combinedPathData = pathCoords.join(\"\");\r\n\r\n\t\tconst pathSelection = this.carpetGroup.selectAll(\"path.carpet-path\").data([combinedPathData]);\r\n\t\tpathSelection.exit().remove();\r\n\t\tpathSelection\r\n\t\t\t.enter()\r\n\t\t\t.append(\"path\")\r\n\t\t\t.attr(\"class\", \"carpet-path\")\r\n\t\t\t.style(\"fill\", \"rgba(0, 0, 0, 0.4)\")\r\n\t\t\t.attr(\"shape-rendering\", \"crispEdges\")\r\n\t\t\t.merge(pathSelection as any)\r\n\t\t\t.attr(\"d\", (d) => d);\r\n\t}\r\n\r\n\tprivate drawZones() {\r\n\t\tconst dragHandler = d3\r\n\t\t\t.drag()\r\n\t\t\t.on(\"start\", (event: any) => {\r\n\t\t\t\tconst element = event.sourceEvent.target.closest(\"g.zone\");\r\n\t\t\t\tif (element) d3.select(element).raise().style(\"cursor\", \"grabbing\");\r\n\t\t\t\tthis.deleteButton.disabled = false;\r\n\t\t\t})\r\n\t\t\t.on(\"drag\", (event: any, d: Rect) => {\r\n\t\t\t\tif (!this.mapImage) return;\r\n\t\t\t\tconst minBoundX = this.mapMinX,\r\n\t\t\t\t\tminBoundY = this.mapMinY,\r\n\t\t\t\t\tmaxBoundX = this.mapMinX + this.mapSizeX,\r\n\t\t\t\t\tmaxBoundY = this.mapMinY + this.mapSizeY;\r\n\t\t\t\tlet newX = Math.max(minBoundX, d.x + event.dx);\r\n\t\t\t\tlet newY = Math.max(minBoundY, d.y + event.dy);\r\n\t\t\t\tif (newX + d.width > maxBoundX) newX = maxBoundX - d.width;\r\n\t\t\t\tif (newY + d.height > maxBoundY) newY = maxBoundY - d.height;\r\n\t\t\t\td.x = newX;\r\n\t\t\t\td.y = newY;\r\n\t\t\t\tconst element = event.sourceEvent.target.closest(\"g.zone\");\r\n\t\t\t\tif (element) d3.select(element).attr(\"transform\", `translate(${d.x - this.mapMinX}, ${d.y - this.mapMinY})`);\r\n\t\t\t})\r\n\t\t\t.on(\"end\", (event: any) => {\r\n\t\t\t\tconst element = event.sourceEvent.target.closest(\"g.zone\");\r\n\t\t\t\tif (element) d3.select(element).style(\"cursor\", \"move\");\r\n\t\t\t\tthis.updateRobotZones();\r\n\t\t\t});\r\n\r\n\t\tconst resizeHandler = d3\r\n\t\t\t.drag()\r\n\t\t\t.on(\"start\", (event: any) => {\r\n\t\t\t\tevent.sourceEvent.stopPropagation();\r\n\t\t\t\tconst element = event.sourceEvent.target;\r\n\t\t\t\tif (element) d3.select(element).raise();\r\n\t\t\t})\r\n\t\t\t.on(\"drag\", (event: any, d: Rect) => {\r\n\t\t\t\tif (!this.mapImage) return;\r\n\t\t\t\tconst maxBoundX = this.mapMinX + this.mapSizeX,\r\n\t\t\t\t\tmaxBoundY = this.mapMinY + this.mapSizeY;\r\n\t\t\t\tlet newWidth = Math.max(d.width + event.dx, 20);\r\n\t\t\t\tlet newHeight = Math.max(d.height + event.dy, 20);\r\n\t\t\t\tif (d.x + newWidth > maxBoundX) newWidth = maxBoundX - d.x;\r\n\t\t\t\tif (d.y + newHeight > maxBoundY) newHeight = maxBoundY - d.y;\r\n\t\t\t\td.width = newWidth;\r\n\t\t\t\td.height = newHeight;\r\n\t\t\t\tconst element = event.sourceEvent.target;\r\n\t\t\t\tif (element) {\r\n\t\t\t\t\tconst parentGroup = d3.select(element.parentNode as SVGGElement);\r\n\t\t\t\t\tparentGroup.select(\"rect\").attr(\"width\", d.width).attr(\"height\", d.height);\r\n\t\t\t\t\tparentGroup.select(\"circle.zone-handle\").attr(\"cx\", d.width).attr(\"cy\", d.height);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.on(\"end\", () => this.updateRobotZones());\r\n\r\n\t\tconst selection = this.zoneGroup.selectAll(\"g.zone\").data(this.rects, (d: any) => d.id);\r\n\t\tselection.exit().remove();\r\n\t\tconst enterGroup = selection.enter().append(\"g\").attr(\"class\", \"zone\").call(dragHandler as any);\r\n\t\tenterGroup.append(\"rect\").attr(\"class\", \"zone-rect\").attr(\"x\", 0).attr(\"y\", 0).style(\"stroke-width\", this.rescaler.zoneStrokeWidth());\r\n\t\tenterGroup.append(\"circle\").attr(\"class\", \"zone-handle\").attr(\"r\", this.rescaler.zoneHandleRadius()).call(resizeHandler as any);\r\n\t\tconst mergedSelection = selection.merge(enterGroup as any);\r\n\t\tmergedSelection.attr(\"transform\", (d: Rect) => `translate(${d.x - this.mapMinX}, ${d.y - this.mapMinY})`);\r\n\t\tmergedSelection\r\n\t\t\t.select(\"rect\")\r\n\t\t\t.attr(\"width\", (d: Rect) => d.width)\r\n\t\t\t.attr(\"height\", (d: Rect) => d.height)\r\n\t\t\t.style(\"stroke-width\", this.rescaler.zoneStrokeWidth());\r\n\t\tmergedSelection\r\n\t\t\t.select(\"circle.zone-handle\")\r\n\t\t\t.attr(\"cx\", (d: Rect) => d.width)\r\n\t\t\t.attr(\"cy\", (d: Rect) => d.height)\r\n\t\t\t.attr(\"r\", this.rescaler.zoneHandleRadius());\r\n\t}\r\n\r\n\t// -----------------------------------------------------------------------------\r\n\t// Helper Methods\r\n\t// -----------------------------------------------------------------------------\r\n\r\n\tprivate updateRobotZones() {\r\n\t\tconst params = this.getMapParams();\r\n\t\tif (!params) return;\r\n\t\tconst cleanCountInput = document.getElementById(\"cleanCount\") as HTMLInputElement;\r\n\t\tthis.zones = [];\r\n\t\tconst cleanCount = parseInt(cleanCountInput.value) || 1;\r\n\t\tfor (const rect of this.rects) {\r\n\t\t\tconst p1 = { x: rect.x, y: rect.y };\r\n\t\t\tconst p2 = { x: rect.x + rect.width, y: rect.y + rect.height };\r\n\t\t\tconst coords1 = localCoordsToRobotCoords(p1, params);\r\n\t\t\tconst coords2 = localCoordsToRobotCoords(p2, params);\r\n\t\t\tthis.zones.push([\r\n\t\t\t\tMath.min(coords1.x, coords2.x),\r\n\t\t\t\tMath.min(coords1.y, coords2.y),\r\n\t\t\t\tMath.max(coords1.x, coords2.x),\r\n\t\t\t\tMath.max(coords1.y, coords2.y),\r\n\t\t\t\tcleanCount,\r\n\t\t\t]);\r\n\t\t}\r\n\t\tconsole.log(\"Zones updated:\", JSON.stringify(this.zones));\r\n\t}\r\n\r\n\tprivate updatePopupPosition() {\r\n\t\tif (this.popup.style.display === \"block\" && this.popupX !== undefined && this.popupY !== undefined) {\r\n\t\t\tconst transform = d3.zoomTransform(this.svgContainer.node() as Element);\r\n\t\t\tconst svgCoords = this.worldToSvgCoords(this.popupX, this.popupY);\r\n\t\t\tconst screenCoords = transform.apply([svgCoords.x, svgCoords.y]);\r\n\t\t\tthis.popup.style.left = `${screenCoords[0]}px`;\r\n\t\t\tthis.popup.style.top = `${screenCoords[1]}px`;\r\n\t\t}\r\n\t}\r\n\r\n\tprivate handleZoom(event: any) {\r\n\t\tconst transform = event.transform;\r\n\t\tthis.mainGroup.attr(\"transform\", transform);\r\n\t\tthis.wheelZoom = transform.k;\r\n\r\n\t\tthis.zoneGroup.selectAll(\"rect.zone-rect\").style(\"stroke-width\", this.rescaler.zoneStrokeWidth());\r\n\t\tthis.zoneGroup.selectAll(\"circle.zone-handle\").attr(\"r\", this.rescaler.zoneHandleRadius());\r\n\r\n\t\tconst scaledRobotSize = this.rescaler.robotSize();\r\n\t\tthis.robotGroup\r\n\t\t\t.selectAll(\"image.robot\")\r\n\t\t\t.attr(\"width\", scaledRobotSize)\r\n\t\t\t.attr(\"height\", scaledRobotSize)\r\n\t\t\t.attr(\"transform\", (d: any) => {\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!params) return \"\";\r\n\t\t\t\tconst svgCoords = this.robotToSvg({ x: d.position[0], y: d.position[1] }, params);\r\n\t\t\t\tconst angle = -(d.angle ?? 0) + 90;\r\n\t\t\t\treturn `translate(${svgCoords.x}, ${svgCoords.y}) rotate(${angle}) translate(${-scaledRobotSize / 2}, ${-scaledRobotSize / 2})`;\r\n\t\t\t});\r\n\r\n\t\tconst scaledChargerSize = this.rescaler.chargerSize();\r\n\t\tthis.chargerGroup\r\n\t\t\t.selectAll(\"image.charger\")\r\n\t\t\t.attr(\"width\", scaledChargerSize)\r\n\t\t\t.attr(\"height\", scaledChargerSize)\r\n\t\t\t.attr(\"x\", (d: any) => {\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!params) return 0;\r\n\t\t\t\treturn this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).x - scaledChargerSize / 2;\r\n\t\t\t})\r\n\t\t\t.attr(\"y\", (d: any) => {\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!params) return 0;\r\n\t\t\t\treturn this.robotToSvg({ x: d.position[0], y: d.position[1] }, params).y - scaledChargerSize / 2;\r\n\t\t\t});\r\n\r\n\t\tthis.pathGroup.selectAll(\"path.main-path\").style(\"stroke-width\", `${this.rescaler.pathMainWidth()}px`);\r\n\t\tthis.backwashPathGroup.selectAll(\"path.backwash-path\").style(\"stroke-width\", `${this.rescaler.pathBackwashWidth()}px`);\r\n\t\tthis.mopPathGroup.selectAll(\"path.mop-path\").style(\"stroke-width\", `${this.rescaler.pathMopWidth()}px`);\r\n\t\tthis.pureCleanPathGroup.selectAll(\"path.pure-clean-path\").style(\"stroke-width\", `${this.rescaler.pathBackwashWidth()}px`);\r\n\r\n\t\tconst scaledPinWidth = this.rescaler.pinWidth();\r\n\t\tconst scaledPinHeight = this.rescaler.pinHeight();\r\n\t\tconst scaledPinYOffset = this.rescaler.pinYOffset();\r\n\t\tthis.pinGroup\r\n\t\t\t.selectAll(\"image.goto-pin\")\r\n\t\t\t.attr(\"width\", scaledPinWidth)\r\n\t\t\t.attr(\"height\", scaledPinHeight)\r\n\t\t\t.attr(\"x\", function () {\r\n\t\t\t\tconst centerX = d3.select(this).attr(\"data-center-x\");\r\n\t\t\t\treturn (parseFloat(centerX) || 0) - scaledPinWidth / 2;\r\n\t\t\t})\r\n\t\t\t.attr(\"y\", function () {\r\n\t\t\t\tconst centerY = d3.select(this).attr(\"data-center-y\");\r\n\t\t\t\treturn (parseFloat(centerY) || 0) - (scaledPinHeight - scaledPinYOffset);\r\n\t\t\t});\r\n\r\n\t\tthis.updatePopupPosition();\r\n\t}\r\n\r\n\tprivate getMapParams(): MapParams | null {\r\n\t\tif (!this.mapImage || !this.mapImage.dimensions || this.mapMaxY === undefined) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn {\r\n\t\t\tscaleFactor: VISUAL_BLOCK_SIZE,\r\n\t\t\tleft: this.mapImage.position.left,\r\n\t\t\ttopMap: this.mapImage.position.top,\r\n\t\t\tmapMaxY: this.mapMaxY,\r\n\t\t\timageHeight: this.mapImage.dimensions.height,\r\n\t\t\timageWidth: this.mapImage.dimensions.width,\r\n\t\t};\r\n\t}\r\n\r\n\tprivate screenToWorldCoords(x: number, y: number): Point {\r\n\t\tif (this.mapMinX === undefined || this.mapMinY === undefined) return { x: 0, y: 0 };\r\n\t\tconst transform = d3.zoomTransform(this.svgContainer.node() as Element);\r\n\t\tconst inverted = transform.invert([x, y]);\r\n\t\treturn { x: inverted[0] + this.mapMinX, y: inverted[1] + this.mapMinY };\r\n\t}\r\n\r\n\tprivate worldToSvgCoords(x: number, y: number): Point {\r\n\t\t// Since we no longer translate the background image (it sits at 0,0),\r\n\t\t// we should not subtract mapMinX from the coordinates.\r\n\t\t// However, World Coordinates (from coords.ts) are 0-based relative to the Grid.\r\n\t\t// And the Image starts at Grid 0.\r\n\t\t// So WorldX = SvgX.\r\n\t\treturn { x: x, y: y };\r\n\t}\r\n\r\n\tprivate robotToSvg(robotPoint: Point, params: any): Point {\r\n\t\tconst worldPoint = robotCoordsToLocalCoords(robotPoint, params);\r\n\t\treturn this.worldToSvgCoords(worldPoint.x, worldPoint.y);\r\n\t}\r\n\r\n\tprivate roundTwoDecimals(number: number): number {\r\n\t\treturn Math.round(number * 100) / 100;\r\n\t}\r\n\r\n\tprivate getQueryParam(param: string): string | null {\r\n\t\tconst urlParams = new URLSearchParams(window.location.search);\r\n\t\treturn urlParams.get(param);\r\n\t}\r\n\r\n\tprivate bindUiEvents() {\r\n\t\tthis.robotSelect.addEventListener(\"change\", () => {\r\n\t\t\tconst newDuid = this.robotSelect.value;\r\n\t\t\tif (newDuid && newDuid !== this.currentRobotDuid) {\r\n\t\t\t\tthis.currentRobotDuid = newDuid;\r\n\t\t\t\tthis.setupSocketListeners(newDuid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.deleteButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.rects.length > 0) {\r\n\t\t\t\tthis.rects.pop();\r\n\t\t\t\tthis.drawZones();\r\n\t\t\t\tif (this.rects.length < 5) this.addButton.disabled = false;\r\n\t\t\t\tif (this.rects.length < 1) this.deleteButton.disabled = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.addButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.goToTarget) {\r\n\t\t\t\tthis.goToTarget = false;\r\n\t\t\t\tthis.svg.style(\"cursor\", \"grab\");\r\n\t\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", null);\r\n\t\t\t\tthis.svgContainer.on(\"click.gototarget\", null);\r\n\t\t\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\t\t\tthis.goToButton.textContent = \"GoTo Point\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst svgWidth = parseFloat(this.svg.attr(\"width\"));\r\n\t\t\tconst svgHeight = parseFloat(this.svg.attr(\"height\"));\r\n\t\t\tconst centerWorld = this.screenToWorldCoords(svgWidth / 2, svgHeight / 2);\r\n\t\t\tconst params = this.getMapParams();\r\n\t\t\tif (!params) return;\r\n\r\n\t\t\tthis.rects.push({\r\n\t\t\t\tid: this.rectCounter++,\r\n\t\t\t\tx: centerWorld.x - 25 * params.scaleFactor,\r\n\t\t\t\ty: centerWorld.y - 25 * params.scaleFactor,\r\n\t\t\t\twidth: 50 * params.scaleFactor,\r\n\t\t\t\theight: 50 * params.scaleFactor,\r\n\t\t\t});\r\n\t\t\tthis.drawZones();\r\n\t\t\tif (this.rects.length > 0) this.deleteButton.disabled = false;\r\n\t\t\tif (this.rects.length > 4) this.addButton.disabled = true;\r\n\t\t\tthis.updateRobotZones();\r\n\t\t});\r\n\r\n\t\tthis.startButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.updateRobotZones();\r\n\t\t\tconst command = this.zones.length > 0 ? \"app_zoned_clean\" : \"app_start\";\r\n\t\t\tconst parameters = this.zones.length > 0 ? { zones: this.zones, duid: this.currentRobotDuid } : { duid: this.currentRobotDuid };\r\n\t\t\tthis.connection.sendTo(this.instanceId, command, parameters).catch((err) => console.error(\"Error sending command:\", err));\r\n\t\t\tthis.rects = [];\r\n\t\t\tthis.drawZones();\r\n\t\t\tthis.deleteButton.disabled = true;\r\n\t\t\tthis.addButton.disabled = false;\r\n\t\t\tthis.startButton.style.display = \"none\";\r\n\t\t\tthis.pauseButton.style.display = \"inline-block\";\r\n\t\t});\r\n\r\n\t\tthis.pauseButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.connection.sendTo(this.instanceId, \"app_pause\", { duid: this.currentRobotDuid });\r\n\t\t\tthis.startButton.style.display = \"inline-block\";\r\n\t\t\tthis.pauseButton.style.display = \"none\";\r\n\t\t});\r\n\r\n\t\tthis.stopButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.connection.sendTo(this.instanceId, \"app_stop\", { duid: this.currentRobotDuid });\r\n\t\t\tthis.startButton.style.display = \"inline-block\";\r\n\t\t\tthis.pauseButton.style.display = \"none\";\r\n\t\t});\r\n\r\n\t\tthis.dockButton.addEventListener(\"click\", () => {\r\n\t\t\tif (!this.currentRobotDuid) return;\r\n\t\t\tthis.connection.sendTo(this.instanceId, \"app_charge\", { duid: this.currentRobotDuid });\r\n\t\t});\r\n\r\n\t\tthis.goToButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.goToTarget) {\r\n\t\t\t\tthis.goToTarget = false;\r\n\t\t\t\tthis.svg.style(\"cursor\", \"grab\");\r\n\t\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", null);\r\n\t\t\t\tthis.svgContainer.on(\"click.gototarget\", null);\r\n\t\t\t\tthis.pinGroup.select(\"image.goto-pin\").style(\"display\", \"none\").style(\"opacity\", 0);\r\n\t\t\t\tthis.goToButton.textContent = \"GoTo Point\";\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.goToTarget = true;\r\n\t\t\tthis.svg.style(\"cursor\", \"none\");\r\n\t\t\tthis.goToButton.textContent = \"Cancel\";\r\n\t\t\tconst transform = d3.zoomTransform(this.svgContainer.node() as Element);\r\n\t\t\tconst svgWidth = parseFloat(this.svg.attr(\"width\"));\r\n\t\t\tconst svgHeight = parseFloat(this.svg.attr(\"height\"));\r\n\t\t\tconst [initialX, initialY] = transform.invert([svgWidth / 2, svgHeight / 2]);\r\n\t\t\tconst scaledPinWidth = this.rescaler.pinWidth();\r\n\t\t\tconst scaledPinHeight = this.rescaler.pinHeight();\r\n\t\t\tconst scaledPinYOffset = this.rescaler.pinYOffset();\r\n\t\t\tconst pin = this.pinGroup.select(\"image.goto-pin\");\r\n\t\t\tpin\r\n\t\t\t\t.style(\"display\", \"block\")\r\n\t\t\t\t.style(\"opacity\", 0.7)\r\n\t\t\t\t.attr(\"data-center-x\", initialX)\r\n\t\t\t\t.attr(\"data-center-y\", initialY)\r\n\t\t\t\t.attr(\"x\", initialX - scaledPinWidth / 2)\r\n\t\t\t\t.attr(\"y\", initialY - (scaledPinHeight - scaledPinYOffset));\r\n\r\n\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", (event: MouseEvent) => {\r\n\t\t\t\tconst [mouseX, mouseY] = d3.pointer(event, this.mainGroup.node());\r\n\t\t\t\tconst scaledW = this.rescaler.pinWidth();\r\n\t\t\t\tconst scaledH = this.rescaler.pinHeight();\r\n\t\t\t\tconst scaledOff = this.rescaler.pinYOffset();\r\n\t\t\t\tpin\r\n\t\t\t\t\t.attr(\"data-center-x\", mouseX)\r\n\t\t\t\t\t.attr(\"data-center-y\", mouseY)\r\n\t\t\t\t\t.attr(\"x\", mouseX - scaledW / 2)\r\n\t\t\t\t\t.attr(\"y\", mouseY - (scaledH - scaledOff));\r\n\t\t\t});\r\n\r\n\t\t\tthis.svgContainer.on(\"click.gototarget\", (event: MouseEvent) => {\r\n\t\t\t\tevent.stopImmediatePropagation();\r\n\t\t\t\tconst params = this.getMapParams();\r\n\t\t\t\tif (!this.currentRobotDuid || !params) return;\r\n\t\t\t\tconst [mouseX, mouseY] = d3.pointer(event, this.mainGroup.node());\r\n\t\t\t\tconst worldX = mouseX + this.mapMinX;\r\n\t\t\t\tconst worldY = mouseY + this.mapMinY;\r\n\t\t\t\tconst point = localCoordsToRobotCoords({ x: worldX, y: worldY }, params);\r\n\t\t\t\tthis.connection.sendTo(this.instanceId, \"app_goto_target\", { points: [point.x, point.y], duid: this.currentRobotDuid });\r\n\t\t\t\tpin.style(\"opacity\", 1.0);\r\n\t\t\t\tthis.goToTarget = false;\r\n\t\t\t\tthis.svg.style(\"cursor\", \"grab\");\r\n\t\t\t\tthis.svgContainer.on(\"mousemove.gototarget\", null);\r\n\t\t\t\tthis.svgContainer.on(\"click.gototarget\", null);\r\n\t\t\t\tthis.goToButton.textContent = \"GoTo Point\";\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tthis.resetZoomButton.addEventListener(\"click\", () => {\r\n\t\t\tif (this.initialTransform) {\r\n\t\t\t\tthis.svgContainer.transition().duration(750).call(this.zoom.transform as any, this.initialTransform);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.popupImage.addEventListener(\"click\", () => {\r\n\t\t\tthis.largePhoto.style.display = \"block\";\r\n\t\t\tthis.popup.style.display = \"none\";\r\n\t\t\tthis.triangle.style.display = \"none\";\r\n\t\t\tif (this.popupTimeout) clearTimeout(this.popupTimeout);\r\n\t\t\tthis.popupTimeout = null;\r\n\t\t\tif (!this.currentRobotDuid || !this.selectedObstacleID) return;\r\n\t\t\tthis.largePhotoImage.src = \"\";\r\n\t\t\tthis.connection\r\n\t\t\t\t.sendTo(this.instanceId, \"get_obstacle_image\", { obstacleId: this.selectedObstacleID, duid: this.currentRobotDuid, type: 0 })\r\n\t\t\t\t.then((response: any) => {\r\n\t\t\t\t\tif (response && typeof response.image === \"string\") this.largePhotoImage.src = response.image.replace(/\\s/g, \"\");\r\n\t\t\t\t})\r\n\t\t\t\t.catch((err) => console.error(\"Error getting large obstacle image:\", err));\r\n\t\t});\r\n\r\n\t\tthis.largePhoto.addEventListener(\"click\", () => {\r\n\t\t\tthis.largePhoto.style.display = \"none\";\r\n\t\t});\r\n\t}\r\n\r\n\t// Rescaler Helper\r\n\tprivate get rescaler() {\r\n\t\treturn {\r\n\t\t\tscale: () => VISUAL_BLOCK_SIZE,\r\n\t\t\trobotSize: () => VISUAL_BLOCK_SIZE * UI_CONSTANTS.ROBOT_SIZE_BASE,\r\n\t\t\tchargerSize: () => VISUAL_BLOCK_SIZE * UI_CONSTANTS.CHARGER_SIZE_BASE,\r\n\t\t\tzoneStrokeWidth: () => UI_CONSTANTS.ZONE_STROKE_BASE / this.wheelZoom,\r\n\t\t\tzoneHandleRadius: () => UI_CONSTANTS.ZONE_HANDLE_RADIUS_BASE / this.wheelZoom,\r\n\t\t\tpinWidth: () => UI_CONSTANTS.PIN_WIDTH_BASE / this.wheelZoom,\r\n\t\t\tpinHeight: () => UI_CONSTANTS.PIN_HEIGHT_BASE / this.wheelZoom,\r\n\t\t\tpinYOffset: () => UI_CONSTANTS.PIN_Y_OFFSET_BASE / this.wheelZoom,\r\n\t\t\tpathMopWidth: () => UI_CONSTANTS.PATH_MOP_WIDTH_BASE * VISUAL_BLOCK_SIZE,\r\n\t\t\tpathMainWidth: () => Math.max(1, VISUAL_BLOCK_SIZE * UI_CONSTANTS.PATH_MAIN_WIDTH_RATIO_BASE),\r\n\t\t\tpathBackwashWidth: () => UI_CONSTANTS.PATH_BACKWASH_WIDTH_BASE * VISUAL_BLOCK_SIZE,\r\n\t\t};\r\n\t}\r\n}\r\n\r\n// =================================================================================\r\n// --- Main Entry Point ---\r\n// =================================================================================\r\n\r\nwindow.onload = async () => {\r\n\tconst app = new MapApplication();\r\n\tapp.init().catch((err) => console.error(\"Failed to initialize Map Application:\", err));\r\n};\r\n"]} \ No newline at end of file