@iobroker/adapter-react-v5 4.3.0 → 4.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/AdminConnection.js.map +1 -1
  2. package/Components/404.js +11 -14
  3. package/Components/404.js.map +1 -1
  4. package/Components/ColorPicker.js +2 -2
  5. package/Components/ColorPicker.js.map +1 -1
  6. package/Components/ComplexCron.d.ts +1 -1
  7. package/Components/ComplexCron.js +21 -23
  8. package/Components/ComplexCron.js.map +1 -1
  9. package/Components/FileBrowser.js +3 -2
  10. package/Components/FileBrowser.js.map +1 -1
  11. package/Components/FileViewer.d.ts +0 -2
  12. package/Components/FileViewer.js +16 -18
  13. package/Components/FileViewer.js.map +1 -1
  14. package/Components/Icon.d.ts +0 -2
  15. package/Components/Icon.js +27 -29
  16. package/Components/Icon.js.map +1 -1
  17. package/Components/IconPicker.js +2 -2
  18. package/Components/IconPicker.js.map +1 -1
  19. package/Components/IconSelector.js +1817 -1819
  20. package/Components/IconSelector.js.map +1 -1
  21. package/Components/Image.js +18 -17
  22. package/Components/Image.js.map +1 -1
  23. package/Components/Loader.js +8 -8
  24. package/Components/Loader.js.map +1 -1
  25. package/Components/Loaders/PT.js +2 -2
  26. package/Components/Loaders/PT.js.map +1 -1
  27. package/Components/Loaders/Vendor.d.ts +0 -7
  28. package/Components/Loaders/Vendor.js +1 -4
  29. package/Components/Loaders/Vendor.js.map +1 -1
  30. package/Components/Logo.js +6 -6
  31. package/Components/Logo.js.map +1 -1
  32. package/Components/MDUtils.js +1 -2
  33. package/Components/MDUtils.js.map +1 -1
  34. package/Components/ObjectBrowser.d.ts +8 -6
  35. package/Components/ObjectBrowser.js +87 -62
  36. package/Components/ObjectBrowser.js.map +1 -1
  37. package/Components/Router.js.map +1 -1
  38. package/Components/SaveCloseButtons.d.ts +0 -1
  39. package/Components/SaveCloseButtons.js +6 -4
  40. package/Components/SaveCloseButtons.js.map +1 -1
  41. package/Components/Schedule.d.ts +1 -1
  42. package/Components/Schedule.js +36 -33
  43. package/Components/Schedule.js.map +1 -1
  44. package/Components/SelectWithIcon.d.ts +1 -1
  45. package/Components/SelectWithIcon.js +12 -11
  46. package/Components/SelectWithIcon.js.map +1 -1
  47. package/Components/SimpleCron/cron2text.js +71 -74
  48. package/Components/SimpleCron/cron2text.js.map +1 -1
  49. package/Components/SimpleCron/cronText.js +1 -1
  50. package/Components/SimpleCron/cronText.js.map +1 -1
  51. package/Components/SimpleCron/index.d.ts +1 -1
  52. package/Components/SimpleCron/index.js +3 -4
  53. package/Components/SimpleCron/index.js.map +1 -1
  54. package/Components/SimpleCron/jquery.cron.locale.js +77 -74
  55. package/Components/SimpleCron/jquery.cron.locale.js.map +1 -1
  56. package/Components/TabContainer.js +3 -3
  57. package/Components/TabContainer.js.map +1 -1
  58. package/Components/TabContent.js +3 -3
  59. package/Components/TabContent.js.map +1 -1
  60. package/Components/TabHeader.js.map +1 -1
  61. package/Components/TextWithIcon.js +6 -3
  62. package/Components/TextWithIcon.js.map +1 -1
  63. package/Components/ToggleThemeMenu.d.ts +1 -1
  64. package/Components/ToggleThemeMenu.js.map +1 -1
  65. package/Components/TreeTable.js +142 -153
  66. package/Components/TreeTable.js.map +1 -1
  67. package/Components/Utils.d.ts +1 -1
  68. package/Components/Utils.js +164 -167
  69. package/Components/Utils.js.map +1 -1
  70. package/Components/copy-to-clipboard.js +8 -9
  71. package/Components/copy-to-clipboard.js.map +1 -1
  72. package/Components/withWidth.js.map +1 -1
  73. package/Connection.js.map +1 -1
  74. package/Dialogs/ComplexCron.d.ts +1 -3
  75. package/Dialogs/ComplexCron.js +2 -4
  76. package/Dialogs/ComplexCron.js.map +1 -1
  77. package/Dialogs/Confirm.d.ts +1 -1
  78. package/Dialogs/Confirm.js +2 -2
  79. package/Dialogs/Confirm.js.map +1 -1
  80. package/Dialogs/Cron.d.ts +1 -2
  81. package/Dialogs/Cron.js +10 -17
  82. package/Dialogs/Cron.js.map +1 -1
  83. package/Dialogs/Error.d.ts +0 -1
  84. package/Dialogs/Error.js +10 -28
  85. package/Dialogs/Error.js.map +1 -1
  86. package/Dialogs/Message.js.map +1 -1
  87. package/Dialogs/SelectFile.js +2 -2
  88. package/Dialogs/SelectFile.js.map +1 -1
  89. package/Dialogs/SelectID.d.ts +0 -4
  90. package/Dialogs/SelectID.js +3 -7
  91. package/Dialogs/SelectID.js.map +1 -1
  92. package/Dialogs/SimpleCron.d.ts +1 -3
  93. package/Dialogs/SimpleCron.js +3 -5
  94. package/Dialogs/SimpleCron.js.map +1 -1
  95. package/Dialogs/TextInput.d.ts +0 -1
  96. package/Dialogs/TextInput.js +9 -17
  97. package/Dialogs/TextInput.js.map +1 -1
  98. package/GenericApp.js +39 -42
  99. package/GenericApp.js.map +1 -1
  100. package/LegacyConnection.d.ts +6 -6
  101. package/LegacyConnection.js +61 -63
  102. package/LegacyConnection.js.map +1 -1
  103. package/Prompt.js.map +1 -1
  104. package/README.md +13 -10
  105. package/Theme.js +1 -1
  106. package/Theme.js.map +1 -1
  107. package/assets/devices/parseNames.js +1 -1
  108. package/assets/rooms/parseNames.js +1 -1
  109. package/i18n/de.json +4 -1
  110. package/i18n/en.json +4 -1
  111. package/i18n/es.json +4 -1
  112. package/i18n/fr.json +4 -1
  113. package/i18n/it.json +4 -1
  114. package/i18n/nl.json +4 -1
  115. package/i18n/pl.json +4 -1
  116. package/i18n/pt.json +4 -1
  117. package/i18n/ru.json +4 -1
  118. package/i18n/uk.json +4 -1
  119. package/i18n/zh-cn.json +4 -1
  120. package/i18n.d.ts +1 -1
  121. package/i18n.js +20 -18
  122. package/i18n.js.map +1 -1
  123. package/icons/IconAdapter.js.map +1 -1
  124. package/icons/IconAlias.js.map +1 -1
  125. package/icons/IconChannel.js.map +1 -1
  126. package/icons/IconClearFilter.js.map +1 -1
  127. package/icons/IconClosed.js.map +1 -1
  128. package/icons/IconCopy.js.map +1 -1
  129. package/icons/IconDevice.js.map +1 -1
  130. package/icons/IconDocument.js.map +1 -1
  131. package/icons/IconDocumentReadOnly.js.map +1 -1
  132. package/icons/IconExpert.js.map +1 -1
  133. package/icons/IconFx.js.map +1 -1
  134. package/icons/IconInstance.js.map +1 -1
  135. package/icons/IconLogout.js.map +1 -1
  136. package/icons/IconNoIcon.js.map +1 -1
  137. package/icons/IconOpen.js.map +1 -1
  138. package/icons/IconState.js.map +1 -1
  139. package/index.js +0 -1
  140. package/package.json +7 -7
@@ -372,7 +372,7 @@ declare class Connection {
372
372
  * Unset the handler for standard output of a command.
373
373
  * @param {(id: string, text: string) => void} handler The handler.
374
374
  */
375
- unregisterCmdStdoutHandler(handler: (id: string, text: string) => void): void;
375
+ unregisterCmdStdoutHandler(): void;
376
376
  /**
377
377
  * Set the handler for standard error of a command.
378
378
  * @param {(id: string, text: string) => void} handler The handler.
@@ -383,7 +383,7 @@ declare class Connection {
383
383
  * Unset the handler for standard error of a command.
384
384
  * @param {(id: string, text: string) => void} handler The handler.
385
385
  */
386
- unregisterCmdStderrHandler(handler: (id: string, text: string) => void): void;
386
+ unregisterCmdStderrHandler(): void;
387
387
  /**
388
388
  * Set the handler for exit of a command.
389
389
  * @param {(id: string, exitCode: number) => void} handler The handler.
@@ -394,7 +394,7 @@ declare class Connection {
394
394
  * Unset the handler for exit of a command.
395
395
  * @param {(id: string, exitCode: number) => void} handler The handler.
396
396
  */
397
- unregisterCmdExitHandler(handler: (id: string, exitCode: number) => void): void;
397
+ unregisterCmdExitHandler(): void;
398
398
  /**
399
399
  * Get all enums with the given name.
400
400
  * @param {string} [_enum] The name of the enum
@@ -557,8 +557,8 @@ declare class Connection {
557
557
  /**
558
558
  * Rename file in ioBroker DB
559
559
  * @param adapter instance name
560
- * @param oldName current file name, e.g main/vis-views.json
561
- * @param newName new file name, e.g main/vis-views-new.json
560
+ * @param oldName current file name, e.g, main/vis-views.json
561
+ * @param newName new file name, e.g, main/vis-views-new.json
562
562
  */
563
563
  renameFile(adapter: any, oldName: any, newName: any): Promise<any>;
564
564
  /**
@@ -780,7 +780,7 @@ declare class Connection {
780
780
  getCompactInstalled(host: any, update: any, cmdTimeout: any): any;
781
781
  getCompactSystemRepositories(update: any, cmdTimeout: any): Promise<any>;
782
782
  getInstalledResetCache(host: any): void;
783
- getInstalledResetCache(host: any): void;
783
+ getInstalledResetCache(): void;
784
784
  getCompactSystemConfig(update: any): Promise<any>;
785
785
  /**
786
786
  * Get the repository in compact form (only version and icon).
@@ -132,7 +132,7 @@ var Connection = /*#__PURE__*/function () {
132
132
  this.filesSubscribes = {}; // subscribe for files
133
133
  this.onProgress = this.props.onProgress || function () {};
134
134
  this.onError = this.props.onError || function (err) {
135
- console.error(err);
135
+ return console.error(err);
136
136
  };
137
137
  this.loaded = false;
138
138
  this.loadTimer = null;
@@ -192,9 +192,8 @@ var Connection = /*#__PURE__*/function () {
192
192
  return _this2.startSocket();
193
193
  }, 100);
194
194
  return;
195
- } else {
196
- window.alert('Cannot load socket.io.js!');
197
195
  }
196
+ window.alert('Cannot load socket.io.js!');
198
197
  } else {
199
198
  // register on load
200
199
  window.registerSocketOnLoad(function () {
@@ -202,11 +201,10 @@ var Connection = /*#__PURE__*/function () {
202
201
  });
203
202
  }
204
203
  return;
205
- } else {
204
+ }
205
+ if (this._socket) {
206
206
  // socket was initialized, do not repeat
207
- if (this._socket) {
208
- return;
209
- }
207
+ return;
210
208
  }
211
209
  var host = this.props.host;
212
210
  var port = this.props.port;
@@ -215,7 +213,7 @@ var Connection = /*#__PURE__*/function () {
215
213
  if (window.location.hostname === 'iobroker.net' || window.location.hostname === 'iobroker.pro') {
216
214
  path = '';
217
215
  } else {
218
- // if web adapter, socket io could be on other port or even host
216
+ // if web adapter, socket io could be on another port or even host
219
217
  if (window.socketUrl) {
220
218
  var parts = window.socketUrl.split(':');
221
219
  host = parts[0] || host;
@@ -438,9 +436,8 @@ var Connection = /*#__PURE__*/function () {
438
436
  value: function _getUserPermissions(cb) {
439
437
  if (this.doNotLoadACL) {
440
438
  return cb && cb();
441
- } else {
442
- this._socket.emit('getUserPermissions', cb);
443
439
  }
440
+ this._socket.emit('getUserPermissions', cb);
444
441
  }
445
442
 
446
443
  /**
@@ -453,8 +450,10 @@ var Connection = /*#__PURE__*/function () {
453
450
  var _this4 = this;
454
451
  this._getUserPermissions(function (err, acl) {
455
452
  if (err) {
456
- return _this4.onError("Cannot read user permissions: ".concat(err));
457
- } else if (!_this4.doNotLoadACL) {
453
+ _this4.onError("Cannot read user permissions: ".concat(err));
454
+ return;
455
+ }
456
+ if (!_this4.doNotLoadACL) {
458
457
  if (_this4.loaded) {
459
458
  return;
460
459
  }
@@ -495,13 +494,12 @@ var Connection = /*#__PURE__*/function () {
495
494
  _this4.onProgress(PROGRESS.READY);
496
495
  _this4.props.onReady && _this4.props.onReady(_this4.objects);
497
496
  });
498
- } else {
499
- _this4.objects = _this4.admin5only ? {} : {
500
- 'system.config': data
501
- };
502
- _this4.onProgress(PROGRESS.READY);
503
- _this4.props.onReady && _this4.props.onReady(_this4.objects);
504
497
  }
498
+ _this4.objects = _this4.admin5only ? {} : {
499
+ 'system.config': data
500
+ };
501
+ _this4.onProgress(PROGRESS.READY);
502
+ _this4.props.onReady && _this4.props.onReady(_this4.objects);
505
503
  return undefined;
506
504
  })["catch"](function (e) {
507
505
  return _this4.onError("Cannot read system config: ".concat(e));
@@ -810,7 +808,7 @@ var Connection = /*#__PURE__*/function () {
810
808
  }
811
809
  Object.keys(this.objectsSubscribes).forEach(function (_id) {
812
810
  if (_id === id || _this5.objectsSubscribes[_id].reg.test(id)) {
813
- //@ts-ignore
811
+ // @ts-ignore
814
812
  _this5.objectsSubscribes[_id].cbs.forEach(function (cb) {
815
813
  try {
816
814
  cb(id, obj, oldObj);
@@ -862,7 +860,7 @@ var Connection = /*#__PURE__*/function () {
862
860
  return new Promise(function (resolve, reject) {
863
861
  return _this6._socket.emit('getStates', function (err, res) {
864
862
  _this6.states = res;
865
- //@ts-ignore
863
+ // @ts-ignore
866
864
  !disableProgressUpdate && _this6.onProgress(PROGRESS.STATES_LOADED);
867
865
  return err ? reject(err) : resolve(_this6.states);
868
866
  });
@@ -1023,18 +1021,17 @@ var Connection = /*#__PURE__*/function () {
1023
1021
  var _this11 = this;
1024
1022
  if (!this.connected) {
1025
1023
  return Promise.reject(NOT_CONNECTED);
1026
- } else {
1027
- return new Promise(function (resolve, reject) {
1028
- if (!update && _this11.objects) {
1029
- return resolve(_this11.objects);
1030
- }
1031
- _this11._socket.emit(Connection.isWeb() ? 'getObjects' : 'getAllObjects', function (err, res) {
1032
- _this11.objects = res;
1033
- disableProgressUpdate && _this11.onProgress(PROGRESS.OBJECTS_LOADED);
1034
- err ? reject(err) : resolve(_this11.objects);
1035
- });
1036
- });
1037
1024
  }
1025
+ return new Promise(function (resolve, reject) {
1026
+ if (!update && _this11.objects) {
1027
+ return resolve(_this11.objects);
1028
+ }
1029
+ _this11._socket.emit(Connection.isWeb() ? 'getObjects' : 'getAllObjects', function (err, res) {
1030
+ _this11.objects = res;
1031
+ disableProgressUpdate && _this11.onProgress(PROGRESS.OBJECTS_LOADED);
1032
+ err ? reject(err) : resolve(_this11.objects);
1033
+ });
1034
+ });
1038
1035
  }
1039
1036
 
1040
1037
  /**
@@ -1048,13 +1045,12 @@ var Connection = /*#__PURE__*/function () {
1048
1045
  var _this12 = this;
1049
1046
  if (!this.connected) {
1050
1047
  return Promise.reject(NOT_CONNECTED);
1051
- } else {
1052
- return new Promise(function (resolve, reject) {
1053
- return _this12._socket.emit('getObjects', list, function (err, res) {
1054
- return err ? reject(err) : resolve(res);
1055
- });
1056
- });
1057
1048
  }
1049
+ return new Promise(function (resolve, reject) {
1050
+ return _this12._socket.emit('getObjects', list, function (err, res) {
1051
+ return err ? reject(err) : resolve(res);
1052
+ });
1053
+ });
1058
1054
  }
1059
1055
 
1060
1056
  /**
@@ -1270,7 +1266,7 @@ var Connection = /*#__PURE__*/function () {
1270
1266
  }
1271
1267
  });
1272
1268
  });
1273
- return this._promises['instances_' + adapter];
1269
+ return this._promises["instances_".concat(adapter)];
1274
1270
  }
1275
1271
 
1276
1272
  /**
@@ -1370,7 +1366,7 @@ var Connection = /*#__PURE__*/function () {
1370
1366
  if (groups.length) {
1371
1367
  // find all elements
1372
1368
  var groupsToRename = groups.filter(function (group) {
1373
- return group._id.startsWith(id + '.');
1369
+ return group._id.startsWith("".concat(id, "."));
1374
1370
  });
1375
1371
  groupsToRename.forEach(function (group) {
1376
1372
  return group.newId = newId + group._id.substring(id.length);
@@ -1506,7 +1502,8 @@ var Connection = /*#__PURE__*/function () {
1506
1502
  */
1507
1503
  }, {
1508
1504
  key: "unregisterCmdStdoutHandler",
1509
- value: function unregisterCmdStdoutHandler(handler) {
1505
+ value: function unregisterCmdStdoutHandler( /* handler */
1506
+ ) {
1510
1507
  this.onCmdStdoutHandler = null;
1511
1508
  }
1512
1509
 
@@ -1526,7 +1523,8 @@ var Connection = /*#__PURE__*/function () {
1526
1523
  */
1527
1524
  }, {
1528
1525
  key: "unregisterCmdStderrHandler",
1529
- value: function unregisterCmdStderrHandler(handler) {
1526
+ value: function unregisterCmdStderrHandler( /* handler */
1527
+ ) {
1530
1528
  this.onCmdStderrHandler = null;
1531
1529
  }
1532
1530
 
@@ -1546,7 +1544,8 @@ var Connection = /*#__PURE__*/function () {
1546
1544
  */
1547
1545
  }, {
1548
1546
  key: "unregisterCmdExitHandler",
1549
- value: function unregisterCmdExitHandler(handler) {
1547
+ value: function unregisterCmdExitHandler( /* handler */
1548
+ ) {
1550
1549
  this.onCmdExitHandler = null;
1551
1550
  }
1552
1551
 
@@ -1569,7 +1568,7 @@ var Connection = /*#__PURE__*/function () {
1569
1568
  this._promises["enums_".concat(_enum || 'all')] = new Promise(function (resolve, reject) {
1570
1569
  _this25._socket.emit('getObjectView', 'system', 'enum', {
1571
1570
  startkey: "enum.".concat(_enum || ''),
1572
- endkey: "enum.".concat(_enum ? _enum + '.' : '', "\u9999")
1571
+ endkey: "enum.".concat(_enum ? "".concat(_enum, ".") : '', "\u9999")
1573
1572
  }, function (err, res) {
1574
1573
  if (!err && res) {
1575
1574
  var _res = {};
@@ -1618,6 +1617,7 @@ var Connection = /*#__PURE__*/function () {
1618
1617
  });
1619
1618
  });
1620
1619
  }
1620
+
1621
1621
  /**
1622
1622
  * Query a predefined object view.
1623
1623
  * @param type The type of object.
@@ -1678,7 +1678,7 @@ var Connection = /*#__PURE__*/function () {
1678
1678
  name: c,
1679
1679
  type: ''
1680
1680
  };
1681
- // If it is filename, it could be everything
1681
+ // If it is a filename, it could be everything
1682
1682
  if (cert.length < 700 && (cert.includes('/') || cert.includes('\\'))) {
1683
1683
  if (c.toLowerCase().includes('private')) {
1684
1684
  _cert.type = 'private';
@@ -2140,7 +2140,7 @@ var Connection = /*#__PURE__*/function () {
2140
2140
  return Promise.reject(NOT_CONNECTED);
2141
2141
  }
2142
2142
  if (!host.startsWith('system.host.')) {
2143
- host += 'system.host.' + host;
2143
+ host += "system.host.".concat(host);
2144
2144
  }
2145
2145
  this._promises.repo = new Promise(function (resolve, reject) {
2146
2146
  var timeout = setTimeout(function () {
@@ -2237,8 +2237,8 @@ var Connection = /*#__PURE__*/function () {
2237
2237
  /**
2238
2238
  * Rename file in ioBroker DB
2239
2239
  * @param adapter instance name
2240
- * @param oldName current file name, e.g main/vis-views.json
2241
- * @param newName new file name, e.g main/vis-views-new.json
2240
+ * @param oldName current file name, e.g, main/vis-views.json
2241
+ * @param newName new file name, e.g, main/vis-views-new.json
2242
2242
  */
2243
2243
  }, {
2244
2244
  key: "renameFile",
@@ -2362,9 +2362,8 @@ var Connection = /*#__PURE__*/function () {
2362
2362
  }
2363
2363
  });
2364
2364
  });
2365
- } else {
2366
- return Promise.reject('Not supported');
2367
2365
  }
2366
+ return Promise.reject('Not supported');
2368
2367
  });
2369
2368
  }
2370
2369
 
@@ -2398,18 +2397,17 @@ var Connection = /*#__PURE__*/function () {
2398
2397
  clearTimeout(timeout);
2399
2398
  timeout = null;
2400
2399
  if (data === PERMISSION_ERROR) {
2401
- reject('May not write "BaseSettings"');
2400
+ reject(new Error('May not write "BaseSettings"'));
2402
2401
  } else if (!data) {
2403
- reject('Cannot write "BaseSettings"');
2402
+ reject(new Error('Cannot write "BaseSettings"'));
2404
2403
  } else {
2405
2404
  resolve(data);
2406
2405
  }
2407
2406
  }
2408
2407
  });
2409
2408
  });
2410
- } else {
2411
- return Promise.reject('Not supported');
2412
2409
  }
2410
+ return Promise.reject(new Error('Not supported'));
2413
2411
  });
2414
2412
  }
2415
2413
 
@@ -2470,13 +2468,12 @@ var Connection = /*#__PURE__*/function () {
2470
2468
  return err ? reject(err) : resolve(states);
2471
2469
  });
2472
2470
  });
2473
- } else {
2474
- return new Promise(function (resolve, reject) {
2475
- return _this51._socket.emit('getForeignStates', pattern || '*', function (err, states) {
2476
- return err ? reject(err) : resolve(states);
2477
- });
2478
- });
2479
2471
  }
2472
+ return new Promise(function (resolve, reject) {
2473
+ return _this51._socket.emit('getForeignStates', pattern || '*', function (err, states) {
2474
+ return err ? reject(err) : resolve(states);
2475
+ });
2476
+ });
2480
2477
  }
2481
2478
 
2482
2479
  /**
@@ -2514,11 +2511,11 @@ var Connection = /*#__PURE__*/function () {
2514
2511
  return Promise.reject(NOT_CONNECTED);
2515
2512
  }
2516
2513
  this._promises.systemConfig = this.getObject('system.config').then(function (systemConfig) {
2517
- //@ts-ignore
2514
+ // @ts-ignore
2518
2515
  systemConfig = systemConfig || {};
2519
- //@ts-ignore
2516
+ // @ts-ignore
2520
2517
  systemConfig.common = systemConfig.common || {};
2521
- //@ts-ignore
2518
+ // @ts-ignore
2522
2519
  systemConfig["native"] = systemConfig["native"] || {};
2523
2520
  return systemConfig;
2524
2521
  });
@@ -3190,7 +3187,8 @@ var Connection = /*#__PURE__*/function () {
3190
3187
  }
3191
3188
  }, {
3192
3189
  key: "getInstalledResetCache",
3193
- value: function getInstalledResetCache(host) {
3190
+ value: function getInstalledResetCache( /* host */
3191
+ ) {
3194
3192
  this._promises.repoCompact = null;
3195
3193
  this._promises.repo = null;
3196
3194
  }