mini_program_gizwits_sdk 3.6.4 → 3.6.5

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 (134) hide show
  1. package/dist/index.js +3 -3
  2. package/package.json +1 -1
  3. package/yarn-error.log +6901 -0
  4. package/dist/src/GizLog.d.ts +0 -18
  5. package/dist/src/crc/calculators/crc16modbus.d.ts +0 -2
  6. package/dist/src/crc/calculators/crc32.d.ts +0 -2
  7. package/dist/src/crc/crc16modbus.d.ts +0 -7
  8. package/dist/src/crc/crc32.d.ts +0 -7
  9. package/dist/src/crc/create_buffer.d.ts +0 -3
  10. package/dist/src/crc/define_crc.d.ts +0 -7
  11. package/dist/src/crc/index.d.ts +0 -19
  12. package/dist/src/crc/types.d.ts +0 -11
  13. package/dist/src/errorCode.d.ts +0 -3
  14. package/dist/src/globalData.d.ts +0 -2
  15. package/dist/src/handler/EventListener.d.ts +0 -9
  16. package/dist/src/handler/ble.d.ts +0 -105
  17. package/dist/src/handler/lan.d.ts +0 -78
  18. package/dist/src/handler/socket.d.ts +0 -151
  19. package/dist/src/openApiRequest.d.ts +0 -3
  20. package/dist/src/productConfigFileManage.d.ts +0 -11
  21. package/dist/src/protocol/Bind.d.ts +0 -7
  22. package/dist/src/protocol/DeviceInfo.d.ts +0 -11
  23. package/dist/src/protocol/DiscoverUDP.d.ts +0 -17
  24. package/dist/src/protocol/GetDeviceStatus.d.ts +0 -5
  25. package/dist/src/protocol/Login.d.ts +0 -12
  26. package/dist/src/protocol/Ntp.d.ts +0 -5
  27. package/dist/src/protocol/OTA/AwaitNoti.d.ts +0 -7
  28. package/dist/src/protocol/OTA/CheckCanOTA.d.ts +0 -10
  29. package/dist/src/protocol/OTA/OTAPackPackage.d.ts +0 -8
  30. package/dist/src/protocol/OTA/OtaComplete.d.ts +0 -8
  31. package/dist/src/protocol/OTA/PreOTA.d.ts +0 -11
  32. package/dist/src/protocol/OTA/ResetPosition.d.ts +0 -6
  33. package/dist/src/protocol/OffLineData.d.ts +0 -23
  34. package/dist/src/protocol/ProtocolBase.d.ts +0 -11
  35. package/dist/src/protocol/Reset.d.ts +0 -8
  36. package/dist/src/protocol/SetReset.d.ts +0 -7
  37. package/dist/src/protocol/WifiConfig.d.ts +0 -6
  38. package/dist/src/protocol/dataPoint.d.ts +0 -34
  39. package/dist/src/protocol/tool.d.ts +0 -14
  40. package/dist/src/randomCode.d.ts +0 -3
  41. package/dist/src/request.d.ts +0 -1
  42. package/dist/src/sdk.d.ts +0 -136
  43. package/dist/src/sentry.d.ts +0 -2
  44. package/dist/src/services/devices.d.ts +0 -47
  45. package/dist/src/services/login.d.ts +0 -4
  46. package/dist/src/services/monitor.d.ts +0 -12
  47. package/dist/src/services/ota.d.ts +0 -7
  48. package/dist/src/services/tool.d.ts +0 -4
  49. package/dist/src/services/uploadP0.d.ts +0 -14
  50. package/dist/src/sleep.d.ts +0 -2
  51. package/dist/src/types/index.d.ts +0 -361
  52. package/dist/src/utils.d.ts +0 -46
  53. package/dist/src/wechatApi.d.ts +0 -19
  54. package/dist/src/wifiConfig/ConfigBase.d.ts +0 -27
  55. package/dist/src/wifiConfig/ap.d.ts +0 -11
  56. package/dist/src/wifiConfig/ble.d.ts +0 -41
  57. package/dist/src/wifiConfig/nfc/disposeData.d.ts +0 -2
  58. package/dist/src/wifiConfig/nfc/formatData.d.ts +0 -3
  59. package/dist/src/wifiConfig/nfc/formatSSID.d.ts +0 -6
  60. package/dist/src/wifiConfig/nfc/index.d.ts +0 -22
  61. package/dist/src/wifiConfig/nfc/isIncludedCH.d.ts +0 -1
  62. package/dist/src/wifiConfig/nfc/nfcAConnect.d.ts +0 -6
  63. package/dist/src/wifiConfig/nfc/nfcATransceive.d.ts +0 -5
  64. package/dist/src/wifiConfig/nfc/ssIDToASC.d.ts +0 -1
  65. package/dist/src/wifiConfig/nfc/stringToGbk.d.ts +0 -1
  66. package/dist/src/wifiConfig/nfc/transceive.wx.d.ts +0 -2
  67. package/dist/src/wifiConfig/nfc/types.d.ts +0 -15
  68. package/index.ts +0 -8
  69. package/src/GizLog.ts +0 -51
  70. package/src/crc/calculators/crc16modbus.ts +0 -36
  71. package/src/crc/calculators/crc32.ts +0 -47
  72. package/src/crc/crc16modbus.ts +0 -3
  73. package/src/crc/crc32.ts +0 -4
  74. package/src/crc/create_buffer.ts +0 -7
  75. package/src/crc/define_crc.ts +0 -9
  76. package/src/crc/index.ts +0 -10
  77. package/src/crc/package.json +0 -3
  78. package/src/crc/types.ts +0 -10
  79. package/src/errorCode.ts +0 -83
  80. package/src/globalData.ts +0 -9
  81. package/src/handler/EventListener.ts +0 -44
  82. package/src/handler/ble.ts +0 -1369
  83. package/src/handler/lan.ts +0 -389
  84. package/src/handler/socket.ts +0 -686
  85. package/src/openApiRequest.ts +0 -50
  86. package/src/productConfigFileManage.ts +0 -72
  87. package/src/protocol/Bind.ts +0 -22
  88. package/src/protocol/DeviceInfo.ts +0 -37
  89. package/src/protocol/DiscoverUDP.ts +0 -80
  90. package/src/protocol/GetDeviceStatus.ts +0 -61
  91. package/src/protocol/Login.ts +0 -43
  92. package/src/protocol/Ntp.ts +0 -13
  93. package/src/protocol/OTA/AwaitNoti.ts +0 -14
  94. package/src/protocol/OTA/CheckCanOTA.ts +0 -23
  95. package/src/protocol/OTA/OTAPackPackage.ts +0 -37
  96. package/src/protocol/OTA/OtaComplete.ts +0 -17
  97. package/src/protocol/OTA/PreOTA.ts +0 -48
  98. package/src/protocol/OTA/ResetPosition.ts +0 -14
  99. package/src/protocol/OffLineData.ts +0 -81
  100. package/src/protocol/ProtocolBase.ts +0 -54
  101. package/src/protocol/Reset.ts +0 -16
  102. package/src/protocol/SetReset.ts +0 -13
  103. package/src/protocol/WifiConfig.ts +0 -42
  104. package/src/protocol/dataPoint.ts +0 -687
  105. package/src/protocol/tool.ts +0 -140
  106. package/src/randomCode.ts +0 -25
  107. package/src/request.ts +0 -22
  108. package/src/sdk.ts +0 -1536
  109. package/src/sentry.ts +0 -55
  110. package/src/services/devices.ts +0 -313
  111. package/src/services/login.ts +0 -11
  112. package/src/services/monitor.ts +0 -117
  113. package/src/services/ota.ts +0 -17
  114. package/src/services/tool.ts +0 -10
  115. package/src/services/uploadP0.ts +0 -57
  116. package/src/sleep.ts +0 -2
  117. package/src/types/index.ts +0 -456
  118. package/src/utils.ts +0 -449
  119. package/src/wechatApi.ts +0 -211
  120. package/src/wifiConfig/ConfigBase.ts +0 -235
  121. package/src/wifiConfig/ap.ts +0 -185
  122. package/src/wifiConfig/ble.ts +0 -460
  123. package/src/wifiConfig/nfc/disposeData.ts +0 -63
  124. package/src/wifiConfig/nfc/formatData.ts +0 -46
  125. package/src/wifiConfig/nfc/formatSSID.ts +0 -59
  126. package/src/wifiConfig/nfc/index.ts +0 -134
  127. package/src/wifiConfig/nfc/isIncludedCH.ts +0 -8
  128. package/src/wifiConfig/nfc/nfcAConnect.ts +0 -30
  129. package/src/wifiConfig/nfc/nfcATransceive.ts +0 -29
  130. package/src/wifiConfig/nfc/ssIDToASC.ts +0 -12
  131. package/src/wifiConfig/nfc/stringToGbk.ts +0 -51
  132. package/src/wifiConfig/nfc/transceive.wx.ts +0 -124
  133. package/src/wifiConfig/nfc/types.ts +0 -18
  134. package/src/wifiConfig/timeZoneName.json +0 -1
@@ -1,134 +0,0 @@
1
- import { disposeData } from './disposeData';
2
- import { formatData } from './formatData';
3
- import { formatSSID } from './formatSSID';
4
- import { transceive } from './transceive.wx';
5
- import ConfigBase from "../ConfigBase";
6
- import { IDevice, IResult } from '../../types';
7
-
8
- // type IParams = {
9
- // SSID: string;
10
- // BSSID: string;
11
- // pwd: string;
12
- // passIP: string;
13
- // };
14
- /**
15
- * 配网
16
- */
17
- // export const distribution = ({ SSID, BSSID, pwd, passIP }: IParams) => {
18
- // const { SSIDTLV, isSSIDIncludedCH } = formatSSID(SSID);
19
- // const BSSIDTLV = formatData(BSSID, 'BSSID');
20
- // const pwdTLV = formatData(pwd, 'pwd');
21
- // const passIPTLV = formatData(passIP, 'passIP');
22
- // const DATA = disposeData(SSIDTLV, isSSIDIncludedCH, pwdTLV, passIPTLV, BSSIDTLV);
23
- // console.log(DATA, 'DATA');
24
-
25
- // // 发送数据
26
- // transceive(DATA);
27
- // };
28
-
29
-
30
-
31
- interface configDeviceParams {
32
- ssid: string;
33
- password: string;
34
- bssid: string;
35
- address: string;
36
- }
37
-
38
- interface ISetDeviceOnboardingDeployProps {
39
- timeout: number;
40
- isBind: boolean;
41
- BSSID: string;
42
- softAPSSIDPrefix: string;
43
- }
44
- class NFCConfig extends ConfigBase {
45
- // 服务器地址
46
- address: string = '';
47
- constructor(ssid: string, bssid: string, password: string,
48
- specialProductKeys: string[], specialProductKeySecrets: string[], address: string) {
49
- super(ssid, bssid, password, specialProductKeys, specialProductKeySecrets)
50
- this.address = address;
51
- }
52
-
53
- destroy = () => {
54
- this.cleanTimeout();
55
- }
56
-
57
- /**
58
- * 负责发指令
59
- */
60
- configDevice = async ({ ssid, password, bssid, address }: configDeviceParams) => {
61
- // TODO 发包
62
- const { SSIDTLV, isSSIDIncludedCH } = formatSSID(ssid);
63
- const BSSIDTLV = formatData(bssid, 'BSSID');
64
- const pwdTLV = formatData(password, 'pwd');
65
- const passIPTLV = formatData(address, 'address');
66
- const DATA = disposeData(SSIDTLV, isSSIDIncludedCH, pwdTLV, passIPTLV, BSSIDTLV);
67
- console.log(DATA, 'DATA');
68
-
69
- // 发送数据
70
- transceive(DATA);
71
- // 大循环搜索
72
- const devicesReturn = await this.searchDevice({ ssid, password });
73
- return devicesReturn
74
- };
75
- /**
76
- * 配网接口
77
- * setDeviceOnboardingDeploy方法不可重复调用
78
- */
79
- setDeviceOnboardingDeploy = ({
80
- timeout,
81
- isBind = true,
82
- }: ISetDeviceOnboardingDeployProps) => {
83
- const ssid = this.ssid;
84
- const password = this.password;
85
- return new Promise<IResult<IDevice[]>>(async (res, rej) => {
86
- console.log('ssid0', ssid, password, this.bssid, this.address)
87
- this.destroy();
88
- this.initDeviceOnboardingDeploy(res, rej);
89
- this.startTimeoutTimer(timeout);
90
- console.log('ssid', ssid, password, this.bssid, this.address)
91
- try {
92
- const result = await this.configDevice({
93
- ssid,
94
- password,
95
- bssid: this.bssid,
96
- address: this.address
97
- });
98
- const newData: IDevice[] = (result.data || []).map(item => {
99
- return {
100
- mac: item.mac,
101
- productKey: item.product_key,
102
- did: item.did,
103
- localName: '',
104
- name: '',
105
- isBind: false,
106
- connectType: 'NONE',
107
- isBleOnline: false,
108
- isLanOnline: false,
109
- isOnline: false,
110
- }
111
- })
112
- if (isBind) {
113
- try {
114
- res(await this.bindDevices(newData));
115
- } catch (error) {
116
- rej(error);
117
- }
118
- } else {
119
- // 不需要绑定 直接返回成功
120
- res({
121
- success: true,
122
- data: newData,
123
- });
124
- }
125
- } catch (error) {
126
- rej(error);
127
- } finally {
128
- this.destroy();
129
- }
130
- });
131
- };
132
- }
133
-
134
- export default NFCConfig;
@@ -1,8 +0,0 @@
1
- /**
2
- * 判断SSID是否含有中文
3
- * @param str SSID
4
- * @returns boolean 参数含有中文时为true
5
- */
6
- export default function isIncludedCH(str: string): boolean {
7
- return /.*[\u4e00-\u9fa5]+.*$/.test(str);
8
- }
@@ -1,30 +0,0 @@
1
- type T = {
2
- success: boolean;
3
- nfcA: any;
4
- };
5
-
6
- /**
7
- * 连接NFCA实例
8
- * @param NFCAdapter NFCAdapter实例
9
- * @returns Promise<{success: boolean, nfcA: any}>
10
- */
11
- export const nfcAConnect = (NFCAdapter: any): Promise<T> => {
12
- return new Promise((resolve) => {
13
- // nfcA实例
14
- const nfcA = NFCAdapter.getNfcA();
15
- nfcA.connect({
16
- success() {
17
- resolve({
18
- success: true,
19
- nfcA,
20
- });
21
- },
22
- fail() {
23
- resolve({
24
- success: false,
25
- nfcA,
26
- });
27
- },
28
- });
29
- });
30
- };
@@ -1,29 +0,0 @@
1
- type T = {
2
- transceiveSuccess: boolean;
3
- };
4
-
5
- /**
6
- * NfcA.transceive
7
- * @param nfcA: NFCA实例
8
- * @param buffer: ArrayBuffer实例
9
- * @returns Promise<T>
10
- */
11
- export const nfcATransceive = (nfcA: any, buffer: ArrayBuffer): Promise<T> => {
12
- return new Promise((resolve) => {
13
- nfcA.transceive({
14
- data: buffer,
15
- success: (res) => {
16
- console.log('success', res);
17
- resolve({
18
- transceiveSuccess: true,
19
- });
20
- },
21
- fail: (err) => {
22
- console.log('fail', err);
23
- resolve({
24
- transceiveSuccess: false,
25
- });
26
- },
27
- });
28
- });
29
- };
@@ -1,12 +0,0 @@
1
- /**
2
- * 传入不含中文的SSID,返回SSID(TLV)中的Value
3
- * @param SSID string;
4
- * @returns Uint8Array SSID(Value部分)
5
- */
6
- export const ssIDToASC = (SSID: string): Uint8Array => {
7
- const uint8Array = new Uint8Array(SSID.length);
8
- SSID.split('').forEach((byte, index) => {
9
- uint8Array[index] = byte.charCodeAt(0);
10
- });
11
- return uint8Array;
12
- };
@@ -1,51 +0,0 @@
1
- const encoding = require('./text-encoding-master/lib/encoding')
2
- const ranges = [
3
- [0xA1, 0xA9, 0xA1, 0xFE],
4
- [0xB0, 0xF7, 0xA1, 0xFE],
5
- [0x81, 0xA0, 0x40, 0xFE],
6
- [0xAA, 0xFE, 0x40, 0xA0],
7
- [0xA8, 0xA9, 0x40, 0xA0],
8
- [0xAA, 0xAF, 0xA1, 0xFE],
9
- [0xF8, 0xFE, 0xA1, 0xFE],
10
- [0xA1, 0xA7, 0x40, 0xA0],
11
- ];
12
- const codes = new Uint16Array(23940);
13
- let i = 0;
14
-
15
- for (const [b1Begin, b1End, b2Begin, b2End] of ranges) {
16
- for (let b2 = b2Begin; b2 <= b2End; b2++) {
17
- if (b2 !== 0x7F) {
18
- for (let b1 = b1Begin; b1 <= b1End; b1++) {
19
- codes[i++] = b2 << 8 | b1;
20
- }
21
- }
22
- }
23
- }
24
- const str = new encoding.TextDecoder('gbk').decode(codes);
25
- const table = new Uint16Array(65536);
26
- for (let i = 0; i < str.length; i++) {
27
- table[str.charCodeAt(i)] = codes[i];
28
- }
29
-
30
- /**
31
- * string转GBK编码
32
- * @param str
33
- * @returns 参数的GBK编码
34
- */
35
- export default function stringToGbk(str: string): Uint8Array {
36
- const buf = new Uint8Array(str.length * 2);
37
- let n = 0;
38
-
39
- for (let i = 0; i < str.length; i++) {
40
- const code = str.charCodeAt(i);
41
- if (code < 0x80) {
42
- buf[n++] = code;
43
- } else {
44
- const gbk = table[code];
45
- buf[n++] = gbk & 0xFF;
46
- buf[n++] = gbk >> 8;
47
- }
48
- }
49
- return buf.subarray(0, n);
50
- }
51
-
@@ -1,124 +0,0 @@
1
- import { nfcAConnect } from './nfcAConnect';
2
- import { nfcATransceive } from './nfcATransceive';
3
- import { IDATA } from './types';
4
-
5
- /**
6
- * 向nfc芯片发送数据
7
- * @param DATA 需要传输的DATA
8
- */
9
- export const transceive = (DATA: IDATA) => {
10
- // NFCAdapter实例
11
- const nfc = wx.getNFCAdapter();
12
- nfc.startDiscovery();
13
-
14
- // 监听nfc Tag
15
- nfc.onDiscovered(async (techs) => {
16
- console.log(techs, 'onDiscovered');
17
- let allSuccess: boolean = true;
18
- const { success, nfcA } = await nfcAConnect(nfc);
19
- if (success) {
20
- // 先发送SSID、PWD、PaaS IP、BSSID
21
- const byteLength = DATA.ArrayBuffer_others.byteLength;
22
- // @ts-ignore
23
- const remainder = parseInt(byteLength % 4); // 余数
24
- // @ts-ignore
25
- const quotient = parseInt(byteLength / 4); // 商数
26
- let temp_quo = quotient; // 用于计算blockID
27
- const DATAUint8 = new Uint8Array(DATA.ArrayBuffer_others);
28
-
29
- // 商数 - 写入数据
30
- for (let i = 0; i <= quotient * 4 - 4; i += 4) {
31
- if (temp_quo > 0) {
32
- const buffer = new ArrayBuffer(6);
33
- const uint8Array = new Uint8Array(buffer);
34
- const blockID = 49 + quotient - temp_quo;
35
- uint8Array[0] = parseInt('0xa2', 16);
36
- uint8Array[1] = blockID;
37
- uint8Array[2] = DATAUint8[0 + i];
38
- uint8Array[3] = DATAUint8[1 + i];
39
- uint8Array[4] = DATAUint8[2 + i];
40
- uint8Array[5] = DATAUint8[3 + i];
41
- const { transceiveSuccess } = await nfcATransceive(nfcA, buffer);
42
- temp_quo -= 1;
43
- if (!transceiveSuccess) {
44
- // 某次写入失败
45
- allSuccess = false;
46
- wx.hideLoading();
47
- wx.showToast({
48
- title: 'NFC写入失败!',
49
- icon: 'error',
50
- duration: 2000,
51
- });
52
- break;
53
- }
54
- }
55
-
56
- if (remainder !== 0 && allSuccess) {
57
- // 余数 - 写入数据
58
- const buffer = new ArrayBuffer(6);
59
- const uint8Array = new Uint8Array(buffer);
60
- const blockID = 49 + quotient;
61
- uint8Array[0] = parseInt('0xa2', 16);
62
- uint8Array[1] = blockID;
63
- switch (remainder) {
64
- case 1:
65
- uint8Array[2] = DATAUint8[byteLength - 1];
66
- break;
67
- case 2:
68
- uint8Array[2] = DATAUint8[byteLength - 2];
69
- uint8Array[3] = DATAUint8[byteLength - 1];
70
- break;
71
- case 3:
72
- uint8Array[2] = DATAUint8[byteLength - 3];
73
- uint8Array[3] = DATAUint8[byteLength - 2];
74
- uint8Array[4] = DATAUint8[byteLength - 1];
75
- break;
76
- }
77
- const { transceiveSuccess } = await nfcATransceive(nfcA, buffer);
78
- if (!transceiveSuccess) {
79
- // 写入失败
80
- wx.hideLoading();
81
- wx.showToast({
82
- title: 'NFC写入失败!',
83
- icon: 'error',
84
- duration: 2000,
85
- });
86
- }
87
- }
88
- }
89
- // 再发送标志位数据: block30
90
- const buffer = new ArrayBuffer(6);
91
- const uint8Array = new Uint8Array(buffer);
92
- const uint8Array_sign = new Uint8Array(DATA.ArrayBuffer_sign);
93
- uint8Array[0] = parseInt('0xa2', 16);
94
- uint8Array[1] = 48;
95
- uint8Array[2] = uint8Array_sign[0];
96
- uint8Array[3] = uint8Array_sign[1];
97
- uint8Array[4] = uint8Array_sign[2];
98
- uint8Array[5] = uint8Array_sign[3];
99
- const { transceiveSuccess } = await nfcATransceive(nfcA, buffer);
100
- wx.hideLoading();
101
- wx.showToast(
102
- transceiveSuccess
103
- ? {
104
- title: 'NFC写入成功!',
105
- icon: 'success',
106
- duration: 2000,
107
- }
108
- : {
109
- title: 'NFC写入失败!',
110
- icon: 'error',
111
- duration: 2000,
112
- }
113
- );
114
- nfcA.close();
115
- } else {
116
- wx.hideLoading();
117
- wx.showToast({
118
- title: 'NFC连接失败!',
119
- icon: 'error',
120
- duration: 2000,
121
- });
122
- }
123
- });
124
- };
@@ -1,18 +0,0 @@
1
- type PageStateProps = {
2
- store: {};
3
- };
4
-
5
- interface WifiInfo {
6
- SSID: string;
7
- BSSID: string;
8
- secure: boolean;
9
- signalStrength: number;
10
- frequency: number;
11
- }
12
-
13
- type IDATA = {
14
- ArrayBuffer_sign: ArrayBuffer;
15
- ArrayBuffer_others: ArrayBuffer;
16
- };
17
-
18
- export { PageStateProps, WifiInfo, IDATA };
@@ -1 +0,0 @@
1
- {"0": "Africa/Abidjan", "1": "Africa/Accra", "2": "Africa/Addis_Ababa", "3": "Africa/Algiers", "4": "Africa/Asmara", "5": "Africa/Asmera", "6": "Africa/Bamako", "7": "Africa/Bangui", "8": "Africa/Banjul", "9": "Africa/Bissau", "10": "Africa/Blantyre", "11": "Africa/Brazzaville", "12": "Africa/Bujumbura", "13": "Africa/Cairo", "14": "Africa/Casablanca", "15": "Africa/Ceuta", "16": "Africa/Conakry", "17": "Africa/Dakar", "18": "Africa/Dar_es_Salaam", "19": "Africa/Djibouti", "20": "Africa/Douala", "21": "Africa/El_Aaiun", "22": "Africa/Freetown", "23": "Africa/Gaborone", "24": "Africa/Harare", "25": "Africa/Johannesburg", "26": "Africa/Juba", "27": "Africa/Kampala", "28": "Africa/Khartoum", "29": "Africa/Kigali", "30": "Africa/Kinshasa", "31": "Africa/Lagos", "32": "Africa/Libreville", "33": "Africa/Lome", "34": "Africa/Luanda", "35": "Africa/Lubumbashi", "36": "Africa/Lusaka", "37": "Africa/Malabo", "38": "Africa/Maputo", "39": "Africa/Maseru", "40": "Africa/Mbabane", "41": "Africa/Mogadishu", "42": "Africa/Monrovia", "43": "Africa/Nairobi", "44": "Africa/Ndjamena", "45": "Africa/Niamey", "46": "Africa/Nouakchott", "47": "Africa/Ouagadougou", "48": "Africa/Porto-Novo", "49": "Africa/Sao_Tome", "50": "Africa/Timbuktu", "51": "Africa/Tripoli", "52": "Africa/Tunis", "53": "Africa/Windhoek", "54": "America/Adak", "55": "America/Anchorage", "56": "America/Anguilla", "57": "America/Antigua", "58": "America/Araguaina", "59": "America/Argentina/Buenos_Aires", "60": "America/Argentina/Catamarca", "61": "America/Argentina/ComodRivadavia", "62": "America/Argentina/Cordoba", "63": "America/Argentina/Jujuy", "64": "America/Argentina/La_Rioja", "65": "America/Argentina/Mendoza", "66": "America/Argentina/Rio_Gallegos", "67": "America/Argentina/Salta", "68": "America/Argentina/San_Juan", "69": "America/Argentina/San_Luis", "70": "America/Argentina/Tucuman", "71": "America/Argentina/Ushuaia", "72": "America/Aruba", "73": "America/Asuncion", "74": "America/Atikokan", "75": "America/Atka", "76": "America/Bahia", "77": "America/Bahia_Banderas", "78": "America/Barbados", "79": "America/Belem", "80": "America/Belize", "81": "America/Blanc-Sablon", "82": "America/Boa_Vista", "83": "America/Bogota", "84": "America/Boise", "85": "America/Buenos_Aires", "86": "America/Cambridge_Bay", "87": "America/Campo_Grande", "88": "America/Cancun", "89": "America/Caracas", "90": "America/Catamarca", "91": "America/Cayenne", "92": "America/Cayman", "93": "America/Chicago", "94": "America/Chihuahua", "95": "America/Coral_Harbour", "96": "America/Cordoba", "97": "America/Costa_Rica", "98": "America/Creston", "99": "America/Cuiaba", "100": "America/Curacao", "101": "America/Danmarkshavn", "102": "America/Dawson", "103": "America/Dawson_Creek", "104": "America/Denver", "105": "America/Detroit", "106": "America/Dominica", "107": "America/Edmonton", "108": "America/Eirunepe", "109": "America/El_Salvador", "110": "America/Ensenada", "111": "America/Fort_Nelson", "112": "America/Fort_Wayne", "113": "America/Fortaleza", "114": "America/Glace_Bay", "115": "America/Godthab", "116": "America/Goose_Bay", "117": "America/Grand_Turk", "118": "America/Grenada", "119": "America/Guadeloupe", "120": "America/Guatemala", "121": "America/Guayaquil", "122": "America/Guyana", "123": "America/Halifax", "124": "America/Havana", "125": "America/Hermosillo", "126": "America/Indiana/Indianapolis", "127": "America/Indiana/Knox", "128": "America/Indiana/Marengo", "129": "America/Indiana/Petersburg", "130": "America/Indiana/Tell_City", "131": "America/Indiana/Vevay", "132": "America/Indiana/Vincennes", "133": "America/Indiana/Winamac", "134": "America/Indianapolis", "135": "America/Inuvik", "136": "America/Iqaluit", "137": "America/Jamaica", "138": "America/Jujuy", "139": "America/Juneau", "140": "America/Kentucky/Louisville", "141": "America/Kentucky/Monticello", "142": "America/Knox_IN", "143": "America/Kralendijk", "144": "America/La_Paz", "145": "America/Lima", "146": "America/Los_Angeles", "147": "America/Louisville", "148": "America/Lower_Princes", "149": "America/Maceio", "150": "America/Managua", "151": "America/Manaus", "152": "America/Marigot", "153": "America/Martinique", "154": "America/Matamoros", "155": "America/Mazatlan", "156": "America/Mendoza", "157": "America/Menominee", "158": "America/Merida", "159": "America/Metlakatla", "160": "America/Mexico_City", "161": "America/Miquelon", "162": "America/Moncton", "163": "America/Monterrey", "164": "America/Montevideo", "165": "America/Montreal", "166": "America/Montserrat", "167": "America/Nassau", "168": "America/New_York", "169": "America/Nipigon", "170": "America/Nome", "171": "America/Noronha", "172": "America/North_Dakota/Beulah", "173": "America/North_Dakota/Center", "174": "America/North_Dakota/New_Salem", "175": "America/Ojinaga", "176": "America/Panama", "177": "America/Pangnirtung", "178": "America/Paramaribo", "179": "America/Phoenix", "180": "America/Port-au-Prince", "181": "America/Port_of_Spain", "182": "America/Porto_Acre", "183": "America/Porto_Velho", "184": "America/Puerto_Rico", "185": "America/Punta_Arenas", "186": "America/Rainy_River", "187": "America/Rankin_Inlet", "188": "America/Recife", "189": "America/Regina", "190": "America/Resolute", "191": "America/Rio_Branco", "192": "America/Rosario", "193": "America/Santa_Isabel", "194": "America/Santarem", "195": "America/Santiago", "196": "America/Santo_Domingo", "197": "America/Sao_Paulo", "198": "America/Scoresbysund", "199": "America/Shiprock", "200": "America/Sitka", "201": "America/St_Barthelemy", "202": "America/St_Johns", "203": "America/St_Kitts", "204": "America/St_Lucia", "205": "America/St_Thomas", "206": "America/St_Vincent", "207": "America/Swift_Current", "208": "America/Tegucigalpa", "209": "America/Thule", "210": "America/Thunder_Bay", "211": "America/Tijuana", "212": "America/Toronto", "213": "America/Tortola", "214": "America/Vancouver", "215": "America/Virgin", "216": "America/Whitehorse", "217": "America/Winnipeg", "218": "America/Yakutat", "219": "America/Yellowknife", "220": "Antarctica/Casey", "221": "Antarctica/Davis", "222": "Antarctica/DumontDUrville", "223": "Antarctica/Macquarie", "224": "Antarctica/Mawson", "225": "Antarctica/McMurdo", "226": "Antarctica/Palmer", "227": "Antarctica/Rothera", "228": "Antarctica/South_Pole", "229": "Antarctica/Syowa", "230": "Antarctica/Troll", "231": "Antarctica/Vostok", "232": "Arctic/Longyearbyen", "233": "Asia/Aden", "234": "Asia/Almaty", "235": "Asia/Amman", "236": "Asia/Anadyr", "237": "Asia/Aqtau", "238": "Asia/Aqtobe", "239": "Asia/Ashgabat", "240": "Asia/Ashkhabad", "241": "Asia/Atyrau", "242": "Asia/Baghdad", "243": "Asia/Bahrain", "244": "Asia/Baku", "245": "Asia/Bangkok", "246": "Asia/Barnaul", "247": "Asia/Beirut", "248": "Asia/Bishkek", "249": "Asia/Brunei", "250": "Asia/Calcutta", "251": "Asia/Chita", "252": "Asia/Choibalsan", "253": "Asia/Chongqing", "254": "Asia/Chungking", "255": "Asia/Colombo", "256": "Asia/Dacca", "257": "Asia/Damascus", "258": "Asia/Dhaka", "259": "Asia/Dili", "260": "Asia/Dubai", "261": "Asia/Dushanbe", "262": "Asia/Famagusta", "263": "Asia/Gaza", "264": "Asia/Harbin", "265": "Asia/Hebron", "266": "Asia/Ho_Chi_Minh", "267": "Asia/Hong_Kong", "268": "Asia/Hovd", "269": "Asia/Irkutsk", "270": "Asia/Istanbul", "271": "Asia/Jakarta", "272": "Asia/Jayapura", "273": "Asia/Jerusalem", "274": "Asia/Kabul", "275": "Asia/Kamchatka", "276": "Asia/Karachi", "277": "Asia/Kashgar", "278": "Asia/Kathmandu", "279": "Asia/Katmandu", "280": "Asia/Khandyga", "281": "Asia/Kolkata", "282": "Asia/Krasnoyarsk", "283": "Asia/Kuala_Lumpur", "284": "Asia/Kuching", "285": "Asia/Kuwait", "286": "Asia/Macao", "287": "Asia/Macau", "288": "Asia/Magadan", "289": "Asia/Makassar", "290": "Asia/Manila", "291": "Asia/Muscat", "292": "Asia/Nicosia", "293": "Asia/Novokuznetsk", "294": "Asia/Novosibirsk", "295": "Asia/Omsk", "296": "Asia/Oral", "297": "Asia/Phnom_Penh", "298": "Asia/Pontianak", "299": "Asia/Pyongyang", "300": "Asia/Qatar", "301": "Asia/Qostanay", "302": "Asia/Qyzylorda", "303": "Asia/Rangoon", "304": "Asia/Riyadh", "305": "Asia/Saigon", "306": "Asia/Sakhalin", "307": "Asia/Samarkand", "308": "Asia/Seoul", "309": "Asia/Shanghai", "310": "Asia/Singapore", "311": "Asia/Srednekolymsk", "312": "Asia/Taipei", "313": "Asia/Tashkent", "314": "Asia/Tbilisi", "315": "Asia/Tehran", "316": "Asia/Tel_Aviv", "317": "Asia/Thimbu", "318": "Asia/Thimphu", "319": "Asia/Tokyo", "320": "Asia/Tomsk", "321": "Asia/Ujung_Pandang", "322": "Asia/Ulaanbaatar", "323": "Asia/Ulan_Bator", "324": "Asia/Urumqi", "325": "Asia/Ust-Nera", "326": "Asia/Vientiane", "327": "Asia/Vladivostok", "328": "Asia/Yakutsk", "329": "Asia/Yangon", "330": "Asia/Yekaterinburg", "331": "Asia/Yerevan", "332": "Atlantic/Azores", "333": "Atlantic/Bermuda", "334": "Atlantic/Canary", "335": "Atlantic/Cape_Verde", "336": "Atlantic/Faeroe", "337": "Atlantic/Faroe", "338": "Atlantic/Jan_Mayen", "339": "Atlantic/Madeira", "340": "Atlantic/Reykjavik", "341": "Atlantic/South_Georgia", "342": "Atlantic/St_Helena", "343": "Atlantic/Stanley", "344": "Australia/ACT", "345": "Australia/Adelaide", "346": "Australia/Brisbane", "347": "Australia/Broken_Hill", "348": "Australia/Canberra", "349": "Australia/Currie", "350": "Australia/Darwin", "351": "Australia/Eucla", "352": "Australia/Hobart", "353": "Australia/LHI", "354": "Australia/Lindeman", "355": "Australia/Lord_Howe", "356": "Australia/Melbourne", "357": "Australia/NSW", "358": "Australia/North", "359": "Australia/Perth", "360": "Australia/Queensland", "361": "Australia/South", "362": "Australia/Sydney", "363": "Australia/Tasmania", "364": "Australia/Victoria", "365": "Australia/West", "366": "Australia/Yancowinna", "367": "Brazil/Acre", "368": "Brazil/DeNoronha", "369": "Brazil/East", "370": "Brazil/West", "371": "CET", "372": "CST6CDT", "373": "Canada/Atlantic", "374": "Canada/Central", "375": "Canada/Eastern", "376": "Canada/Mountain", "377": "Canada/Newfoundland", "378": "Canada/Pacific", "379": "Canada/Saskatchewan", "380": "Canada/Yukon", "381": "Chile/Continental", "382": "Chile/EasterIsland", "383": "Cuba", "384": "EET", "385": "EST", "386": "EST5EDT", "387": "Egypt", "388": "Eire", "389": "Etc/GMT", "390": "Etc/GMT+0", "391": "Etc/GMT+1", "392": "Etc/GMT+10", "393": "Etc/GMT+11", "394": "Etc/GMT+12", "395": "Etc/GMT+2", "396": "Etc/GMT+3", "397": "Etc/GMT+4", "398": "Etc/GMT+5", "399": "Etc/GMT+6", "400": "Etc/GMT+7", "401": "Etc/GMT+8", "402": "Etc/GMT+9", "403": "Etc/GMT-0", "404": "Etc/GMT-1", "405": "Etc/GMT-10", "406": "Etc/GMT-11", "407": "Etc/GMT-12", "408": "Etc/GMT-13", "409": "Etc/GMT-14", "410": "Etc/GMT-2", "411": "Etc/GMT-3", "412": "Etc/GMT-4", "413": "Etc/GMT-5", "414": "Etc/GMT-6", "415": "Etc/GMT-7", "416": "Etc/GMT-8", "417": "Etc/GMT-9", "418": "Etc/GMT0", "419": "Etc/Greenwich", "420": "Etc/UCT", "421": "Etc/UTC", "422": "Etc/Universal", "423": "Etc/Zulu", "424": "Europe/Amsterdam", "425": "Europe/Andorra", "426": "Europe/Astrakhan", "427": "Europe/Athens", "428": "Europe/Belfast", "429": "Europe/Belgrade", "430": "Europe/Berlin", "431": "Europe/Bratislava", "432": "Europe/Brussels", "433": "Europe/Bucharest", "434": "Europe/Budapest", "435": "Europe/Busingen", "436": "Europe/Chisinau", "437": "Europe/Copenhagen", "438": "Europe/Dublin", "439": "Europe/Gibraltar", "440": "Europe/Guernsey", "441": "Europe/Helsinki", "442": "Europe/Isle_of_Man", "443": "Europe/Istanbul", "444": "Europe/Jersey", "445": "Europe/Kaliningrad", "446": "Europe/Kiev", "447": "Europe/Kirov", "448": "Europe/Lisbon", "449": "Europe/Ljubljana", "450": "Europe/London", "451": "Europe/Luxembourg", "452": "Europe/Madrid", "453": "Europe/Malta", "454": "Europe/Mariehamn", "455": "Europe/Minsk", "456": "Europe/Monaco", "457": "Europe/Moscow", "458": "Europe/Nicosia", "459": "Europe/Oslo", "460": "Europe/Paris", "461": "Europe/Podgorica", "462": "Europe/Prague", "463": "Europe/Riga", "464": "Europe/Rome", "465": "Europe/Samara", "466": "Europe/San_Marino", "467": "Europe/Sarajevo", "468": "Europe/Saratov", "469": "Europe/Simferopol", "470": "Europe/Skopje", "471": "Europe/Sofia", "472": "Europe/Stockholm", "473": "Europe/Tallinn", "474": "Europe/Tirane", "475": "Europe/Tiraspol", "476": "Europe/Ulyanovsk", "477": "Europe/Uzhgorod", "478": "Europe/Vaduz", "479": "Europe/Vatican", "480": "Europe/Vienna", "481": "Europe/Vilnius", "482": "Europe/Volgograd", "483": "Europe/Warsaw", "484": "Europe/Zagreb", "485": "Europe/Zaporozhye", "486": "Europe/Zurich", "487": "GB", "488": "GB-Eire", "489": "GMT", "490": "GMT+0", "491": "GMT-0", "492": "GMT0", "493": "Greenwich", "494": "HST", "495": "Hongkong", "496": "Iceland", "497": "Indian/Antananarivo", "498": "Indian/Chagos", "499": "Indian/Christmas", "500": "Indian/Cocos", "501": "Indian/Comoro", "502": "Indian/Kerguelen", "503": "Indian/Mahe", "504": "Indian/Maldives", "505": "Indian/Mauritius", "506": "Indian/Mayotte", "507": "Indian/Reunion", "508": "Iran", "509": "Israel", "510": "Jamaica", "511": "Japan", "512": "Kwajalein", "513": "Libya", "514": "MET", "515": "MST", "516": "MST7MDT", "517": "Mexico/BajaNorte", "518": "Mexico/BajaSur", "519": "Mexico/General", "520": "NZ", "521": "NZ-CHAT", "522": "Navajo", "523": "PRC", "524": "PST8PDT", "525": "Pacific/Apia", "526": "Pacific/Auckland", "527": "Pacific/Bougainville", "528": "Pacific/Chatham", "529": "Pacific/Chuuk", "530": "Pacific/Easter", "531": "Pacific/Efate", "532": "Pacific/Enderbury", "533": "Pacific/Fakaofo", "534": "Pacific/Fiji", "535": "Pacific/Funafuti", "536": "Pacific/Galapagos", "537": "Pacific/Gambier", "538": "Pacific/Guadalcanal", "539": "Pacific/Guam", "540": "Pacific/Honolulu", "541": "Pacific/Johnston", "542": "Pacific/Kiritimati", "543": "Pacific/Kosrae", "544": "Pacific/Kwajalein", "545": "Pacific/Majuro", "546": "Pacific/Marquesas", "547": "Pacific/Midway", "548": "Pacific/Nauru", "549": "Pacific/Niue", "550": "Pacific/Norfolk", "551": "Pacific/Noumea", "552": "Pacific/Pago_Pago", "553": "Pacific/Palau", "554": "Pacific/Pitcairn", "555": "Pacific/Pohnpei", "556": "Pacific/Ponape", "557": "Pacific/Port_Moresby", "558": "Pacific/Rarotonga", "559": "Pacific/Saipan", "560": "Pacific/Samoa", "561": "Pacific/Tahiti", "562": "Pacific/Tarawa", "563": "Pacific/Tongatapu", "564": "Pacific/Truk", "565": "Pacific/Wake", "566": "Pacific/Wallis", "567": "Pacific/Yap", "568": "Poland", "569": "Portugal", "570": "ROC", "571": "ROK", "572": "Singapore", "573": "Turkey", "574": "UCT", "575": "US/Alaska", "576": "US/Aleutian", "577": "US/Arizona", "578": "US/Central", "579": "US/East-Indiana", "580": "US/Eastern", "581": "US/Hawaii", "582": "US/Indiana-Starke", "583": "US/Michigan", "584": "US/Mountain", "585": "US/Pacific", "586": "US/Samoa", "587": "UTC", "588": "Universal", "589": "W-SU", "590": "WET", "591": "Zulu"}