@ray-js/api 1.5.0-beta.12 → 1.5.0

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 (145) hide show
  1. package/@types/BaseKit.d.ts +246 -126
  2. package/@types/BizKit.d.ts +1 -1
  3. package/@types/MapKit.d.ts +237 -1
  4. package/@types/MiniKit.d.ts +1 -1
  5. package/@types/OutdoorKit.d.ts +232 -0
  6. package/@types/P2PKit.d.ts +24 -2
  7. package/@types/all-kits.d.ts +1 -0
  8. package/@types/api-extend.d.ts +8 -2
  9. package/@types/index.d.ts +87 -0
  10. package/lib/{BaseKit-3.3.10.d.ts → BaseKit-3.11.0.d.ts} +1 -0
  11. package/lib/{BaseKit-3.3.10.js → BaseKit-3.11.0.js} +6 -2
  12. package/lib/BizKit-3.2.7.js +2 -1
  13. package/lib/DeviceKit-3.3.1.js +2 -1
  14. package/lib/HomeKit-3.1.4.js +2 -1
  15. package/lib/{MapKit-3.0.7.d.ts → MapKit-3.4.13.d.ts} +5 -0
  16. package/lib/{MapKit-3.0.7.js → MapKit-3.4.13.js} +19 -1
  17. package/lib/MiniKit-3.1.0.js +3 -2
  18. package/lib/OutdoorKit-1.0.4.d.ts +14 -0
  19. package/lib/OutdoorKit-1.0.4.js +39 -0
  20. package/lib/P2PKit-2.0.3.d.ts +1 -0
  21. package/lib/P2PKit-2.0.3.js +5 -1
  22. package/lib/PlayNetKit-1.1.3.d.ts +24 -25
  23. package/lib/PlayNetKit-1.1.3.js +2 -1
  24. package/lib/all-kits.d.ts +3 -2
  25. package/lib/all-kits.js +3 -2
  26. package/lib/cloud/alarm.js +2 -2
  27. package/lib/cloud/core.js +1 -1
  28. package/lib/cloud/device.d.ts +25 -1
  29. package/lib/cloud/device.js +20 -6
  30. package/lib/cloud/doorlock/README.md +62 -0
  31. package/lib/cloud/doorlock/auth.d.ts +235 -0
  32. package/lib/cloud/doorlock/auth.js +223 -0
  33. package/lib/cloud/doorlock/auth.md +323 -0
  34. package/lib/cloud/doorlock/device.d.ts +137 -0
  35. package/lib/cloud/doorlock/device.js +187 -0
  36. package/lib/cloud/doorlock/device.md +265 -0
  37. package/lib/cloud/doorlock/index.d.ts +10 -0
  38. package/lib/cloud/doorlock/index.js +20 -0
  39. package/lib/cloud/doorlock/log.d.ts +113 -0
  40. package/lib/cloud/doorlock/log.js +53 -0
  41. package/lib/cloud/doorlock/log.md +153 -0
  42. package/lib/cloud/doorlock/member-opmode.d.ts +121 -0
  43. package/lib/cloud/doorlock/member-opmode.js +104 -0
  44. package/lib/cloud/doorlock/member-opmode.md +279 -0
  45. package/lib/cloud/doorlock/member.d.ts +110 -0
  46. package/lib/cloud/doorlock/member.js +72 -0
  47. package/lib/cloud/doorlock/member.md +276 -0
  48. package/lib/cloud/doorlock/offline-pwd.d.ts +61 -0
  49. package/lib/cloud/doorlock/offline-pwd.js +67 -0
  50. package/lib/cloud/doorlock/offline-pwd.md +155 -0
  51. package/lib/cloud/doorlock/old.d.ts +36 -0
  52. package/lib/cloud/doorlock/old.js +102 -0
  53. package/lib/cloud/doorlock/temp-pwd.d.ts +194 -0
  54. package/lib/cloud/doorlock/temp-pwd.js +193 -0
  55. package/lib/cloud/doorlock/temp-pwd.md +362 -0
  56. package/lib/cloud/doorlock/unlock-method.d.ts +62 -0
  57. package/lib/cloud/doorlock/unlock-method.js +85 -0
  58. package/lib/cloud/doorlock/unlock-method.md +121 -0
  59. package/lib/cloud/doorlock/unlock.d.ts +89 -0
  60. package/lib/cloud/doorlock/unlock.js +76 -0
  61. package/lib/cloud/doorlock/unlock.md +222 -0
  62. package/lib/cloud/index.d.ts +4 -0
  63. package/lib/cloud/index.js +10 -1
  64. package/lib/cloud/interface.d.ts +39 -2
  65. package/lib/cloud/linkage.d.ts +8 -5
  66. package/lib/cloud/linkage.js +38 -17
  67. package/lib/cloud/outdoor.d.ts +15 -0
  68. package/lib/cloud/outdoor.js +25 -0
  69. package/lib/cloud/recipe/README.md +36 -0
  70. package/lib/cloud/recipe/basket.d.ts +220 -0
  71. package/lib/cloud/recipe/basket.js +328 -0
  72. package/lib/cloud/recipe/basket.md +431 -0
  73. package/lib/cloud/recipe/category-list.d.ts +71 -0
  74. package/lib/cloud/recipe/category-list.js +65 -0
  75. package/lib/cloud/recipe/category-list.md +132 -0
  76. package/lib/cloud/recipe/custom.d.ts +177 -0
  77. package/lib/cloud/recipe/custom.js +171 -0
  78. package/lib/cloud/recipe/custom.md +265 -0
  79. package/lib/cloud/recipe/index.d.ts +8 -0
  80. package/lib/cloud/recipe/index.js +8 -0
  81. package/lib/cloud/recipe/menu.d.ts +170 -0
  82. package/lib/cloud/recipe/menu.js +76 -0
  83. package/lib/cloud/recipe/menu.md +276 -0
  84. package/lib/cloud/recipe/query.d.ts +87 -0
  85. package/lib/cloud/recipe/query.js +101 -0
  86. package/lib/cloud/recipe/query.md +112 -0
  87. package/lib/cloud/recipe/record.d.ts +54 -0
  88. package/lib/cloud/recipe/record.js +87 -0
  89. package/lib/cloud/recipe/record.md +115 -0
  90. package/lib/cloud/recipe/score.d.ts +69 -0
  91. package/lib/cloud/recipe/score.js +106 -0
  92. package/lib/cloud/recipe/score.md +112 -0
  93. package/lib/cloud/recipe/star.d.ts +131 -0
  94. package/lib/cloud/recipe/star.js +151 -0
  95. package/lib/cloud/recipe/star.md +196 -0
  96. package/lib/cloud/recipe/types.d.ts +7 -0
  97. package/lib/cloud/recipe/types.js +0 -0
  98. package/lib/cloud/remoteGroup.d.ts +10 -0
  99. package/lib/cloud/remoteGroup.js +31 -0
  100. package/lib/cloud/statistic.js +9 -9
  101. package/lib/cloud/timer.js +14 -14
  102. package/lib/constants.js +1 -1
  103. package/lib/errorCode.d.ts +4 -0
  104. package/lib/errorCode.js +3 -0
  105. package/lib/getCdnUrl/index.d.ts +2 -2
  106. package/lib/getCdnUrl/index.js +1 -2
  107. package/lib/getCdnUrl/index.wechat.d.ts +2 -2
  108. package/lib/getCdnUrl/index.wechat.js +1 -2
  109. package/lib/getElementById/index.thing.js +1 -1
  110. package/lib/getElementById/index.wechat.js +1 -1
  111. package/lib/index.d.ts +1 -0
  112. package/lib/index.js +1 -0
  113. package/lib/nativeRouters/common.d.ts +15 -0
  114. package/lib/nativeRouters/common.js +38 -0
  115. package/lib/nativeRouters/device.d.ts +59 -0
  116. package/lib/nativeRouters/device.js +69 -0
  117. package/lib/nativeRouters/gw.d.ts +23 -0
  118. package/lib/nativeRouters/gw.js +27 -0
  119. package/lib/nativeRouters/index.d.ts +6 -1
  120. package/lib/nativeRouters/index.js +6 -1
  121. package/lib/nativeRouters/ipc.d.ts +30 -0
  122. package/lib/nativeRouters/ipc.js +44 -0
  123. package/lib/nativeRouters/outdoors.d.ts +47 -0
  124. package/lib/nativeRouters/outdoors.js +41 -0
  125. package/lib/nativeRouters/remoteGroup.d.ts +22 -0
  126. package/lib/nativeRouters/remoteGroup.js +11 -0
  127. package/lib/nativeRouters/root.d.ts +41 -0
  128. package/lib/nativeRouters/root.js +53 -0
  129. package/lib/openGroupCreate/index.js +3 -3
  130. package/lib/panel/i18n/index.d.ts +7 -6
  131. package/lib/panel/i18n/index.js +39 -23
  132. package/lib/panel/i18n/index.wechat.js +13 -12
  133. package/lib/panel/normalizeNetwork.js +1 -1
  134. package/lib/panel/publishDps.js +1 -1
  135. package/lib/redirectTo/index.js +1 -0
  136. package/lib/utils.d.ts +5 -2
  137. package/lib/utils.js +46 -20
  138. package/lib/utils.wechat.d.ts +3 -0
  139. package/lib/utils.wechat.js +22 -6
  140. package/lib/viewAPI.d.ts +1 -0
  141. package/lib/viewAPI.js +4 -3
  142. package/package.json +8 -7
  143. package/@types/PlayNetKit.d.ts +0 -444
  144. package/lib/nativeRouters/scene.d.ts +0 -34
  145. package/lib/nativeRouters/scene.js +0 -60
@@ -1,444 +0,0 @@
1
- /**
2
- * PlayNetKit
3
- *
4
- * @version 1.1.3
5
- */
6
- declare namespace ty.playnet {
7
- /**
8
- * 判断是否有这个权限
9
- *WIFI or BLE
10
- */
11
- export function hasPermission(params: {
12
- /**
13
- * "WIFI" or "BLE"
14
- * 权限
15
- */
16
- permission: string
17
- complete?: () => void
18
- success?: (params: boolean) => void
19
- fail?: (params: {
20
- errorMsg: string
21
- errorCode: string | number
22
- innerError: {
23
- errorCode: string | number
24
- errorMsg: string
25
- }
26
- }) => void
27
- }): void
28
-
29
- /**
30
- * 请求获取这个权限
31
- *WIFI or BLE
32
- */
33
- export function requestPermission(params: {
34
- /**
35
- * "WIFI" or "BLE"
36
- * 权限
37
- */
38
- permission: string
39
- complete?: () => void
40
- success?: (params: null) => void
41
- fail?: (params: {
42
- errorMsg: string
43
- errorCode: string | number
44
- innerError: {
45
- errorCode: string | number
46
- errorMsg: string
47
- }
48
- }) => void
49
- }): void
50
-
51
- /**
52
- * 指定时间内扫描已配网的设备,扫描结果通过【onBLEScanDevice】事件获取
53
- */
54
- export function startBLEScanDevice(params: {
55
- /** 扫描超时时间 */
56
- timeout: number
57
- /**
58
- * 扫描类型
59
- * SINGLE -> "SINGLE"
60
- * SINGLE_QR -> "SINGLE_QR"
61
- * MESH -> "MESH"
62
- * MESH -> "MESH"
63
- * SIG_MESH -> "SIG_MESH"
64
- * NORMAL -> "NORMAL" 默认
65
- * Thing_BEACON -> "Thing_BEACON"
66
- * Multi_Mode 双模
67
- */
68
- scanType: string
69
- complete?: () => void
70
- success?: (params: null) => void
71
- fail?: (params: {
72
- errorMsg: string
73
- errorCode: string | number
74
- innerError: {
75
- errorCode: string | number
76
- errorMsg: string
77
- }
78
- }) => void
79
- }): void
80
-
81
- /**
82
- * 停止蓝牙扫描
83
- */
84
- export function stopBLEScan(params?: {
85
- complete?: () => void
86
- success?: (params: null) => void
87
- fail?: (params: {
88
- errorMsg: string
89
- errorCode: string | number
90
- innerError: {
91
- errorCode: string | number
92
- errorMsg: string
93
- }
94
- }) => void
95
- }): void
96
-
97
- /**
98
- * 蓝牙连接 / AP监听广播包后 并查询状态 然后再开始查询wifi列表
99
- */
100
- export function queryDeviceConfigState(params: {
101
- /** homeid */
102
- homeId: number
103
- /** 超时时间 */
104
- timeout: number
105
- /**
106
- * 配网类型,后续新流程添加在这里
107
- * AP -> "AP"
108
- * WIFI_BLE -> "WIFI_BLE"
109
- */
110
- pairType: string
111
- /** 蓝牙扫描出来的广播包,目前只有wifi双模需要填写 */
112
- bleWifiPairParams: ScanDevicePacket
113
- complete?: () => void
114
- success?: (params: WiFiInfo[]) => void
115
- fail?: (params: {
116
- errorMsg: string
117
- errorCode: string | number
118
- innerError: {
119
- errorCode: string | number
120
- errorMsg: string
121
- }
122
- }) => void
123
- }): void
124
-
125
- /**
126
- * 开始配网
127
- */
128
- export function startActivator(params: {
129
- /**
130
- * 配网类型,后续新流程添加在这里
131
- * AP -> "AP"
132
- * WIFI_BLE -> "WIFI_BLE"
133
- */
134
- pairType: string
135
- /** AP 模式下AP配网参数 */
136
- apActivatorParams: ApActivatorParam
137
- /** WIFI双模 模式下配网参数 */
138
- bleWifiActivatorParams: BleWifiActivatorParam
139
- complete?: () => void
140
- success?: (params: {
141
- /** 设备id */
142
- devId: string
143
- /** 设备名称 */
144
- name: string
145
- /** 设备房间id */
146
- roomId: string
147
- /** 设备图标url */
148
- iconUrl: string
149
- }) => void
150
- fail?: (params: {
151
- errorMsg: string
152
- errorCode: string | number
153
- innerError: {
154
- errorCode: string | number
155
- errorMsg: string
156
- }
157
- }) => void
158
- }): void
159
-
160
- /**
161
- * 停止配网
162
- */
163
- export function stopActivator(params: {
164
- /** uuid 根据uuid来匹配找到对应的蓝牙配网设备 */
165
- uuid: string
166
- /**
167
- * 配网类型,后续新流程添加在这里
168
- * AP -> "AP"
169
- * WIFI_BLE -> "WIFI_BLE", 蓝牙配网需要填uuid
170
- */
171
- pairType: string
172
- complete?: () => void
173
- success?: (params: null) => void
174
- fail?: (params: {
175
- errorMsg: string
176
- errorCode: string | number
177
- innerError: {
178
- errorCode: string | number
179
- errorMsg: string
180
- }
181
- }) => void
182
- }): void
183
-
184
- /**
185
- * 自动连接wifi
186
- */
187
- export function autoConnectToAp(params: {
188
- /** ssid */
189
- ssid: string
190
- /** pwd */
191
- pwd: string
192
- complete?: () => void
193
- success?: (params: null) => void
194
- fail?: (params: {
195
- errorMsg: string
196
- errorCode: string | number
197
- innerError: {
198
- errorCode: string | number
199
- errorMsg: string
200
- }
201
- }) => void
202
- }): void
203
-
204
- /**
205
- * 获取配网token
206
- */
207
- export function getPairConfigToken(params: {
208
- /** 家庭id */
209
- gid: number
210
- complete?: () => void
211
- success?: (params: string) => void
212
- fail?: (params: {
213
- errorMsg: string
214
- errorCode: string | number
215
- innerError: {
216
- errorCode: string | number
217
- errorMsg: string
218
- }
219
- }) => void
220
- }): void
221
-
222
- /**
223
- * 重置设备
224
- */
225
- export function resetDevice(params: {
226
- /** uuid 根据uuid来匹配找到对应的蓝牙配网设备 */
227
- uuid: string
228
- /**
229
- * 配网类型,后续新流程添加在这里
230
- * AP -> "AP"
231
- * WIFI_BLE -> "WIFI_BLE", 蓝牙配网需要填uuid
232
- */
233
- pairType: string
234
- complete?: () => void
235
- success?: (params: boolean) => void
236
- fail?: (params: {
237
- errorMsg: string
238
- errorCode: string | number
239
- innerError: {
240
- errorCode: string | number
241
- errorMsg: string
242
- }
243
- }) => void
244
- }): void
245
-
246
- /**
247
- * 获取sl等级配置
248
- */
249
- export function getDeviceSecurityConfigs(params?: {
250
- complete?: () => void
251
- success?: (params: string) => void
252
- fail?: (params: {
253
- errorMsg: string
254
- errorCode: string | number
255
- innerError: {
256
- errorCode: string | number
257
- errorMsg: string
258
- }
259
- }) => void
260
- }): void
261
-
262
- /**
263
- * 在自动连接热点场景下,是否是系统控制弹窗的
264
- */
265
- export function isSystemPopupInAutoConnectAp(params?: {
266
- complete?: () => void
267
- success?: (params: boolean) => void
268
- fail?: (params: {
269
- errorMsg: string
270
- errorCode: string | number
271
- innerError: {
272
- errorCode: string | number
273
- errorMsg: string
274
- }
275
- }) => void
276
- }): void
277
-
278
- /**
279
- * 是否仅有蓝牙权限
280
- */
281
- export function hasBlePermission(params?: {
282
- complete?: () => void
283
- success?: (params: boolean) => void
284
- fail?: (params: {
285
- errorMsg: string
286
- errorCode: string | number
287
- innerError: {
288
- errorCode: string | number
289
- errorMsg: string
290
- }
291
- }) => void
292
- }): void
293
-
294
- /**
295
- * 是否有本地网络权限
296
- */
297
- export function hasLocalNetworkPermission(params?: {
298
- complete?: () => void
299
- success?: (params: boolean) => void
300
- fail?: (params: {
301
- errorMsg: string
302
- errorCode: string | number
303
- innerError: {
304
- errorCode: string | number
305
- errorMsg: string
306
- }
307
- }) => void
308
- }): void
309
-
310
- /**
311
- * 扫描到设备后进行通知
312
- */
313
- export function onBLEScanDevice(listener: (params: ScanDevicePacket) => void): void
314
-
315
- /**
316
- * 取消监听:扫描到设备后进行通知
317
- */
318
- export function offBLEScanDevice(listener: (params: ScanDevicePacket) => void): void
319
-
320
- /**
321
- * wifi状态发生变化
322
- */
323
- export function onWifiStateChange(listener: (params: Privacy) => void): void
324
-
325
- /**
326
- * 取消监听:wifi状态发生变化
327
- */
328
- export function offWifiStateChange(listener: (params: Privacy) => void): void
329
-
330
- /**
331
- * 蓝牙状态发生变化
332
- */
333
- export function onBLEStateChange(listener: (params: Privacy) => void): void
334
-
335
- /**
336
- * 取消监听:蓝牙状态发生变化
337
- */
338
- export function offBLEStateChange(listener: (params: Privacy) => void): void
339
-
340
- /**
341
- * 蓝牙权限发生变化
342
- */
343
- export function onBlePermissionChange(listener: (params: Privacy) => void): void
344
-
345
- /**
346
- * 取消监听:蓝牙权限发生变化
347
- */
348
- export function offBlePermissionChange(listener: (params: Privacy) => void): void
349
-
350
- /**
351
- * 本地网络权限发生变化
352
- */
353
- export function onlocalNetWorkPermissionChange(listener: (params: Privacy) => void): void
354
-
355
- /**
356
- * 取消监听:本地网络权限发生变化
357
- */
358
- export function offlocalNetWorkPermissionChange(listener: (params: Privacy) => void): void
359
-
360
- export type ScanDevicePacket = {
361
- /** id */
362
- id: string
363
- /** name */
364
- name: string
365
- /** providerName */
366
- providerName: string
367
- /** data */
368
- data: string
369
- /** configType */
370
- configType: string
371
- /** productId */
372
- productId: string
373
- /** uuid */
374
- uuid: string
375
- /** mac */
376
- mac: string
377
- /** address */
378
- address: string
379
- /** deviceType */
380
- deviceType: number
381
- /** isbind */
382
- isbind: boolean
383
- /** flag */
384
- flag: number
385
- /** isShare */
386
- isShare: boolean
387
- /** rssi */
388
- rssi: number
389
- }
390
-
391
- export type WiFiInfo = {
392
- /** ssid */
393
- ssid: string
394
- /** 强度 */
395
- rssi: number
396
- /** sec */
397
- sec: number
398
- }
399
-
400
- export type ApActivatorParam = {
401
- /** ssid */
402
- ssid: string
403
- /** pwd */
404
- pwd: string
405
- /** token */
406
- token: string
407
- /** 配网超时时间 */
408
- timeout: number
409
- /** 是否为密码错误恢复配网 */
410
- isRecovery: boolean
411
- /**
412
- * securityConfig
413
- * use getDeviceSecurityConfigs() method to get
414
- */
415
- securityConfig: string
416
- }
417
-
418
- export type BleWifiActivatorParam = {
419
- /** uuid */
420
- uuid: string
421
- /** ssid */
422
- ssid: string
423
- /** pwd */
424
- pwd: string
425
- /** token */
426
- token: string
427
- /** timeout */
428
- timeout: number
429
- /** 是否为密码错误恢复配网 */
430
- isRecovery: boolean
431
- /**
432
- * the phase 1 timeout value, in milliseconds. Default 60000
433
- * Note
434
- * <p>
435
- * For devices with WiFi and Bluetooth capabilities, use WiFi to activate in the first stage, if it fails, use Bluetooth to activate.
436
- */
437
- phase1Timeout: number
438
- }
439
-
440
- export type Privacy = {
441
- /** enable */
442
- enable: boolean
443
- }
444
- }
@@ -1,34 +0,0 @@
1
- type OpenSceneCreateParams = {
2
- devId?: string;
3
- success?: () => void;
4
- fail?: (err?: {
5
- errorMsg: string;
6
- errorCode: string | number;
7
- innerError: {
8
- errorCode: string | number;
9
- errorMsg: string;
10
- };
11
- }) => void;
12
- complete?: () => void;
13
- } & {
14
- [key: string]: string | boolean | number;
15
- };
16
- export declare function openSceneCreate(params: OpenSceneCreateParams): Promise<void>;
17
- type OpenSceneEdit = {
18
- devId?: string;
19
- sceneId?: string;
20
- success?: () => void;
21
- fail?: (err?: {
22
- errorMsg: string;
23
- errorCode: string | number;
24
- innerError: {
25
- errorCode: string | number;
26
- errorMsg: string;
27
- };
28
- }) => void;
29
- complete?: () => void;
30
- } & {
31
- [key: string]: string | boolean | number;
32
- };
33
- export declare function openSceneEdit(params: OpenSceneEdit): Promise<void>;
34
- export {};
@@ -1,60 +0,0 @@
1
- import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
2
- const _excluded = ["success", "fail", "complete"],
3
- _excluded2 = ["success", "fail", "complete"];
4
- import { objectToUrlParams } from '../utils';
5
- export function openSceneCreate(params) {
6
- const {
7
- success,
8
- fail,
9
- complete
10
- } = params,
11
- rest = _objectWithoutProperties(params, _excluded);
12
- let paramsStr = '';
13
- if (Object.keys(rest).length > 0) {
14
- paramsStr = '?' + objectToUrlParams(rest);
15
- }
16
- return new Promise((resolve, reject) => {
17
- ty.router({
18
- url: 'tuyaSmart://createScene' + paramsStr,
19
- success() {
20
- success === null || success === void 0 ? void 0 : success();
21
- resolve();
22
- },
23
- fail(err) {
24
- fail === null || fail === void 0 ? void 0 : fail(err);
25
- reject(err);
26
- },
27
- complete() {
28
- complete === null || complete === void 0 ? void 0 : complete();
29
- }
30
- });
31
- });
32
- }
33
- export function openSceneEdit(params) {
34
- const {
35
- success,
36
- fail,
37
- complete
38
- } = params,
39
- rest = _objectWithoutProperties(params, _excluded2);
40
- let paramsStr = '';
41
- if (Object.keys(rest).length > 0) {
42
- paramsStr = '?' + objectToUrlParams(rest);
43
- }
44
- return new Promise((resolve, reject) => {
45
- ty.router({
46
- url: 'tuyaSmart://editScene' + paramsStr,
47
- success() {
48
- success === null || success === void 0 ? void 0 : success();
49
- resolve();
50
- },
51
- fail(err) {
52
- fail === null || fail === void 0 ? void 0 : fail(err);
53
- reject(err);
54
- },
55
- complete() {
56
- complete === null || complete === void 0 ? void 0 : complete();
57
- }
58
- });
59
- });
60
- }