@wppconnect/server 1.8.4 → 2.0.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 (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/config/upload.js +4 -4
  3. package/dist/config.js +78 -0
  4. package/dist/controller/catalogController.js +127 -22
  5. package/dist/controller/deviceController.js +324 -114
  6. package/dist/controller/encryptController.js +4 -2
  7. package/dist/controller/groupController.js +157 -44
  8. package/dist/controller/labelsController.js +46 -8
  9. package/dist/controller/messageController.js +104 -39
  10. package/dist/controller/orderController.js +19 -7
  11. package/dist/controller/sessionController.js +100 -35
  12. package/dist/controller/statusController.js +18 -10
  13. package/dist/index.js +47 -25
  14. package/dist/mapper/index.js +7 -5
  15. package/dist/mapper/tagone-chat.js +1 -1
  16. package/dist/mapper/tagone-device.js +1 -1
  17. package/dist/mapper/tagone-message-document.js +1 -1
  18. package/dist/mapper/tagone-message-image.js +1 -1
  19. package/dist/mapper/tagone-message-location.js +1 -1
  20. package/dist/mapper/tagone-message-video.js +1 -1
  21. package/dist/mapper/tagone-message.js +1 -1
  22. package/dist/mapper/tagone-onack.js +1 -1
  23. package/dist/mapper/tagone-return.js +4 -2
  24. package/dist/middleware/auth.js +29 -9
  25. package/dist/middleware/healthCheck.js +1 -1
  26. package/dist/middleware/statusConnection.js +9 -3
  27. package/dist/routes/index.js +618 -112
  28. package/dist/server.js +2 -2
  29. package/dist/swagger.json +76 -0
  30. package/dist/types/Request.js +2 -0
  31. package/dist/types/ServerOptions.js +2 -0
  32. package/dist/types/WhatsAppServer.js +2 -0
  33. package/dist/util/chatWootClient.js +55 -22
  34. package/dist/util/createSessionUtil.js +65 -17
  35. package/dist/util/db/mongodb/db.js +10 -7
  36. package/dist/util/db/redis/db.js +7 -5
  37. package/dist/util/functions.js +81 -37
  38. package/dist/util/getAllTokens.js +1 -1
  39. package/dist/util/logger.js +2 -3
  40. package/dist/util/sessionUtil.js +5 -4
  41. package/dist/util/tokenStore/FileTokenStore/FileTokenStore.js +178 -0
  42. package/dist/util/tokenStore/factory.js +8 -11
  43. package/dist/util/tokenStore/fileTokenStory.js +21 -15
  44. package/dist/util/tokenStore/firebaseTokenStory.js +1 -1
  45. package/dist/util/tokenStore/model/token.js +7 -5
  46. package/dist/util/tokenStore/mongodbTokenStory.js +18 -11
  47. package/dist/util/tokenStore/redisTokenStory.js +39 -19
  48. package/dist/util/tokenStore/types.js +2 -0
  49. package/package.json +50 -28
  50. package/tsconfig.json +105 -0
  51. package/types.d.ts +2 -0
  52. package/dist/config/upload.js.map +0 -1
  53. package/dist/config.json +0 -77
  54. package/dist/controller/catalogController.js.map +0 -1
  55. package/dist/controller/deviceController.js.map +0 -1
  56. package/dist/controller/encryptController.js.map +0 -1
  57. package/dist/controller/groupController.js.map +0 -1
  58. package/dist/controller/labelsController.js.map +0 -1
  59. package/dist/controller/messageController.js.map +0 -1
  60. package/dist/controller/orderController.js.map +0 -1
  61. package/dist/controller/sessionController.js.map +0 -1
  62. package/dist/controller/statusController.js.map +0 -1
  63. package/dist/index.js.map +0 -1
  64. package/dist/mapper/index.js.map +0 -1
  65. package/dist/mapper/tagone-chat.js.map +0 -1
  66. package/dist/mapper/tagone-device.js.map +0 -1
  67. package/dist/mapper/tagone-message-document.js.map +0 -1
  68. package/dist/mapper/tagone-message-image.js.map +0 -1
  69. package/dist/mapper/tagone-message-location.js.map +0 -1
  70. package/dist/mapper/tagone-message-video.js.map +0 -1
  71. package/dist/mapper/tagone-message.js.map +0 -1
  72. package/dist/mapper/tagone-onack.js.map +0 -1
  73. package/dist/mapper/tagone-return.js.map +0 -1
  74. package/dist/middleware/auth.js.map +0 -1
  75. package/dist/middleware/healthCheck.js.map +0 -1
  76. package/dist/middleware/statusConnection.js.map +0 -1
  77. package/dist/routes/index.js.map +0 -1
  78. package/dist/server.js.map +0 -1
  79. package/dist/util/chatWootClient.js.map +0 -1
  80. package/dist/util/createSessionUtil.js.map +0 -1
  81. package/dist/util/db/mongodb/db.js.map +0 -1
  82. package/dist/util/db/redis/db.js.map +0 -1
  83. package/dist/util/functions.js.map +0 -1
  84. package/dist/util/getAllTokens.js.map +0 -1
  85. package/dist/util/logger.js.map +0 -1
  86. package/dist/util/sessionUtil.js.map +0 -1
  87. package/dist/util/tokenStore/factory.js.map +0 -1
  88. package/dist/util/tokenStore/fileTokenStory.js.map +0 -1
  89. package/dist/util/tokenStore/firebaseTokenStory.js.map +0 -1
  90. package/dist/util/tokenStore/model/token.js.map +0 -1
  91. package/dist/util/tokenStore/mongodbTokenStory.js.map +0 -1
  92. package/dist/util/tokenStore/redisTokenStory.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # 2.0.0 (2023-04-03)
2
+
3
+ ### Bug Fixes
4
+
5
+ - Fixed warning for aws-s3 ([d4d4b86](https://github.com/wppconnect-team/wppconnect-server/commit/d4d4b86331494f8514a87b41b76740070b9682a0))
6
+
7
+ ## 1.8.5 (2023-03-13)
8
+
9
+ ### Bug Fixes
10
+
11
+ - **deps:** update dependency @wppconnect-team/wppconnect to ^1.23.0 ([b61c75c](https://github.com/wppconnect-team/wppconnect-server/commit/b61c75ca4bda30288fe1833424f1ff52d65ae1da))
12
+
1
13
  ## 1.8.4 (2023-02-19)
2
14
 
3
15
  ### Bug Fixes
@@ -13,8 +13,8 @@
13
13
 
14
14
 
15
15
 
16
- var _path = _interopRequireDefault(require("path"));
17
- var _multer = _interopRequireDefault(require("multer")); /*
16
+ var _multer = _interopRequireDefault(require("multer"));
17
+ var _path = _interopRequireDefault(require("path")); /*
18
18
  * Copyright 2021 WPPConnect Team
19
19
  *
20
20
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,5 +28,5 @@ var _multer = _interopRequireDefault(require("multer")); /*
28
28
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29
29
  * See the License for the specific language governing permissions and
30
30
  * limitations under the License.
31
- */const storage = _multer.default.diskStorage({ destination: function (req, file, cb) {const __dirname = _path.default.resolve(_path.default.dirname(''));cb(null, _path.default.resolve(__dirname, 'uploads'));}, filename: function (req, file, cb) {let filename = `wppConnect-${Date.now()}-${file.originalname}`;cb(null, filename);} });const uploads = (0, _multer.default)({ storage: storage });var _default = uploads;exports.default = _default;
32
- //# sourceMappingURL=upload.js.map
31
+ */const storage = _multer.default.diskStorage({ destination: function (req, file, cb) {const __dirname = _path.default.resolve(_path.default.dirname(''));cb(null, _path.default.resolve(__dirname, 'uploads'));}, filename: function (req, file, cb) {const filename = `wppConnect-${Date.now()}-${file.originalname}`;cb(null, filename);} });const uploads = (0, _multer.default)({ storage: storage });var _default = uploads;exports.default = _default;
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbXVsdGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsInN0b3JhZ2UiLCJtdWx0ZXIiLCJkaXNrU3RvcmFnZSIsImRlc3RpbmF0aW9uIiwicmVxIiwiZmlsZSIsImNiIiwiX19kaXJuYW1lIiwicGF0aCIsInJlc29sdmUiLCJkaXJuYW1lIiwiZmlsZW5hbWUiLCJEYXRlIiwibm93Iiwib3JpZ2luYWxuYW1lIiwidXBsb2FkcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL3VwbG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgbXVsdGVyIGZyb20gJ211bHRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3Qgc3RvcmFnZSA9IG11bHRlci5kaXNrU3RvcmFnZSh7XG4gIGRlc3RpbmF0aW9uOiBmdW5jdGlvbiAocmVxLCBmaWxlLCBjYikge1xuICAgIGNvbnN0IF9fZGlybmFtZSA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoJycpKTtcbiAgICBjYihudWxsLCBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAndXBsb2FkcycpKTtcbiAgfSxcbiAgZmlsZW5hbWU6IGZ1bmN0aW9uIChyZXEsIGZpbGUsIGNiKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBgd3BwQ29ubmVjdC0ke0RhdGUubm93KCl9LSR7ZmlsZS5vcmlnaW5hbG5hbWV9YDtcbiAgICBjYihudWxsLCBmaWxlbmFtZSk7XG4gIH0sXG59KTtcblxuY29uc3QgdXBsb2FkcyA9IG11bHRlcih7IHN0b3JhZ2U6IHN0b3JhZ2UgfSk7XG5leHBvcnQgZGVmYXVsdCB1cGxvYWRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUEsVUFBd0IsQ0FoQnhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUlBLE1BQU1FLE9BQU8sR0FBR0MsZUFBTSxDQUFDQyxXQUFXLENBQUMsRUFDakNDLFdBQVcsRUFBRSxTQUFBQSxDQUFVQyxHQUFHLEVBQUVDLElBQUksRUFBRUMsRUFBRSxFQUFFLENBQ3BDLE1BQU1DLFNBQVMsR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUNELGFBQUksQ0FBQ0UsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ2hESixFQUFFLENBQUMsSUFBSSxFQUFFRSxhQUFJLENBQUNDLE9BQU8sQ0FBQ0YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQzlDLENBQUMsRUFDREksUUFBUSxFQUFFLFNBQUFBLENBQVVQLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxFQUFFLEVBQUUsQ0FDakMsTUFBTUssUUFBUSxHQUFJLGNBQWFDLElBQUksQ0FBQ0MsR0FBRyxFQUFHLElBQUdSLElBQUksQ0FBQ1MsWUFBYSxFQUFDLENBQ2hFUixFQUFFLENBQUMsSUFBSSxFQUFFSyxRQUFRLENBQUMsQ0FDcEIsQ0FBQyxDQUNILENBQUMsQ0FBQyxDQUVGLE1BQU1JLE9BQU8sR0FBRyxJQUFBZCxlQUFNLEVBQUMsRUFBRUQsT0FBTyxFQUFFQSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQWdCLFFBQUEsR0FDOUJELE9BQU8sQ0FBQUUsT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
package/dist/config.js ADDED
@@ -0,0 +1,78 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
2
+ secretKey: 'THISISMYSECURETOKEN',
3
+ host: 'http://localhost',
4
+ port: '21465',
5
+ deviceName: 'WppConnect',
6
+ poweredBy: 'WPPConnect-Server',
7
+ startAllSession: true,
8
+ tokenStoreType: 'file',
9
+ maxListeners: 15,
10
+ customUserDataDir: './userDataDir/',
11
+ webhook: {
12
+ url: null,
13
+ autoDownload: true,
14
+ uploadS3: false,
15
+ readMessage: true,
16
+ allUnreadOnStart: false,
17
+ listenAcks: true,
18
+ onPresenceChanged: true,
19
+ onParticipantsChanged: true,
20
+ onReactionMessage: true,
21
+ onPollResponse: true,
22
+ onRevokedMessage: true
23
+ },
24
+ archive: {
25
+ enable: false,
26
+ waitTime: 10,
27
+ daysToArchive: 45
28
+ },
29
+ log: {
30
+ level: 'silly', // Before open a issue, change level to silly and retry a action
31
+ logger: ['console', 'file']
32
+ },
33
+ createOptions: {
34
+ browserArgs: [
35
+ '--disable-web-security',
36
+ '--no-sandbox',
37
+ '--disable-web-security',
38
+ '--aggressive-cache-discard',
39
+ '--disable-cache',
40
+ '--disable-application-cache',
41
+ '--disable-offline-load-stale-cache',
42
+ '--disk-cache-size=0',
43
+ '--disable-background-networking',
44
+ '--disable-default-apps',
45
+ '--disable-extensions',
46
+ '--disable-sync',
47
+ '--disable-translate',
48
+ '--hide-scrollbars',
49
+ '--metrics-recording-only',
50
+ '--mute-audio',
51
+ '--no-first-run',
52
+ '--safebrowsing-disable-auto-update',
53
+ '--ignore-certificate-errors',
54
+ '--ignore-ssl-errors',
55
+ '--ignore-certificate-errors-spki-list']
56
+
57
+ },
58
+ mapper: {
59
+ enable: false,
60
+ prefix: 'tagone-'
61
+ },
62
+ db: {
63
+ mongodbDatabase: 'tokens',
64
+ mongodbCollection: '',
65
+ mongodbUser: '',
66
+ mongodbPassword: '',
67
+ mongodbHost: '',
68
+ mongoIsRemote: true,
69
+ mongoURLRemote: '',
70
+ mongodbPort: 27017,
71
+ redisHost: 'localhost',
72
+ redisPort: 6379,
73
+ redisPassword: '',
74
+ redisDb: 0,
75
+ redisPrefix: 'docker'
76
+ }
77
+ };exports.default = _default;
78
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWNyZXRLZXkiLCJob3N0IiwicG9ydCIsImRldmljZU5hbWUiLCJwb3dlcmVkQnkiLCJzdGFydEFsbFNlc3Npb24iLCJ0b2tlblN0b3JlVHlwZSIsIm1heExpc3RlbmVycyIsImN1c3RvbVVzZXJEYXRhRGlyIiwid2ViaG9vayIsInVybCIsImF1dG9Eb3dubG9hZCIsInVwbG9hZFMzIiwicmVhZE1lc3NhZ2UiLCJhbGxVbnJlYWRPblN0YXJ0IiwibGlzdGVuQWNrcyIsIm9uUHJlc2VuY2VDaGFuZ2VkIiwib25QYXJ0aWNpcGFudHNDaGFuZ2VkIiwib25SZWFjdGlvbk1lc3NhZ2UiLCJvblBvbGxSZXNwb25zZSIsIm9uUmV2b2tlZE1lc3NhZ2UiLCJhcmNoaXZlIiwiZW5hYmxlIiwid2FpdFRpbWUiLCJkYXlzVG9BcmNoaXZlIiwibG9nIiwibGV2ZWwiLCJsb2dnZXIiLCJjcmVhdGVPcHRpb25zIiwiYnJvd3NlckFyZ3MiLCJtYXBwZXIiLCJwcmVmaXgiLCJkYiIsIm1vbmdvZGJEYXRhYmFzZSIsIm1vbmdvZGJDb2xsZWN0aW9uIiwibW9uZ29kYlVzZXIiLCJtb25nb2RiUGFzc3dvcmQiLCJtb25nb2RiSG9zdCIsIm1vbmdvSXNSZW1vdGUiLCJtb25nb1VSTFJlbW90ZSIsIm1vbmdvZGJQb3J0IiwicmVkaXNIb3N0IiwicmVkaXNQb3J0IiwicmVkaXNQYXNzd29yZCIsInJlZGlzRGIiLCJyZWRpc1ByZWZpeCIsImV4cG9ydHMiLCJkZWZhdWx0IiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgc2VjcmV0S2V5OiAnVEhJU0lTTVlTRUNVUkVUT0tFTicsXG4gIGhvc3Q6ICdodHRwOi8vbG9jYWxob3N0JyxcbiAgcG9ydDogJzIxNDY1JyxcbiAgZGV2aWNlTmFtZTogJ1dwcENvbm5lY3QnLFxuICBwb3dlcmVkQnk6ICdXUFBDb25uZWN0LVNlcnZlcicsXG4gIHN0YXJ0QWxsU2Vzc2lvbjogdHJ1ZSxcbiAgdG9rZW5TdG9yZVR5cGU6ICdmaWxlJyxcbiAgbWF4TGlzdGVuZXJzOiAxNSxcbiAgY3VzdG9tVXNlckRhdGFEaXI6ICcuL3VzZXJEYXRhRGlyLycsXG4gIHdlYmhvb2s6IHtcbiAgICB1cmw6IG51bGwsXG4gICAgYXV0b0Rvd25sb2FkOiB0cnVlLFxuICAgIHVwbG9hZFMzOiBmYWxzZSxcbiAgICByZWFkTWVzc2FnZTogdHJ1ZSxcbiAgICBhbGxVbnJlYWRPblN0YXJ0OiBmYWxzZSxcbiAgICBsaXN0ZW5BY2tzOiB0cnVlLFxuICAgIG9uUHJlc2VuY2VDaGFuZ2VkOiB0cnVlLFxuICAgIG9uUGFydGljaXBhbnRzQ2hhbmdlZDogdHJ1ZSxcbiAgICBvblJlYWN0aW9uTWVzc2FnZTogdHJ1ZSxcbiAgICBvblBvbGxSZXNwb25zZTogdHJ1ZSxcbiAgICBvblJldm9rZWRNZXNzYWdlOiB0cnVlLFxuICB9LFxuICBhcmNoaXZlOiB7XG4gICAgZW5hYmxlOiBmYWxzZSxcbiAgICB3YWl0VGltZTogMTAsXG4gICAgZGF5c1RvQXJjaGl2ZTogNDUsXG4gIH0sXG4gIGxvZzoge1xuICAgIGxldmVsOiAnc2lsbHknLCAvLyBCZWZvcmUgb3BlbiBhIGlzc3VlLCBjaGFuZ2UgbGV2ZWwgdG8gc2lsbHkgYW5kIHJldHJ5IGEgYWN0aW9uXG4gICAgbG9nZ2VyOiBbJ2NvbnNvbGUnLCAnZmlsZSddLFxuICB9LFxuICBjcmVhdGVPcHRpb25zOiB7XG4gICAgYnJvd3NlckFyZ3M6IFtcbiAgICAgICctLWRpc2FibGUtd2ViLXNlY3VyaXR5JyxcbiAgICAgICctLW5vLXNhbmRib3gnLFxuICAgICAgJy0tZGlzYWJsZS13ZWItc2VjdXJpdHknLFxuICAgICAgJy0tYWdncmVzc2l2ZS1jYWNoZS1kaXNjYXJkJyxcbiAgICAgICctLWRpc2FibGUtY2FjaGUnLFxuICAgICAgJy0tZGlzYWJsZS1hcHBsaWNhdGlvbi1jYWNoZScsXG4gICAgICAnLS1kaXNhYmxlLW9mZmxpbmUtbG9hZC1zdGFsZS1jYWNoZScsXG4gICAgICAnLS1kaXNrLWNhY2hlLXNpemU9MCcsXG4gICAgICAnLS1kaXNhYmxlLWJhY2tncm91bmQtbmV0d29ya2luZycsXG4gICAgICAnLS1kaXNhYmxlLWRlZmF1bHQtYXBwcycsXG4gICAgICAnLS1kaXNhYmxlLWV4dGVuc2lvbnMnLFxuICAgICAgJy0tZGlzYWJsZS1zeW5jJyxcbiAgICAgICctLWRpc2FibGUtdHJhbnNsYXRlJyxcbiAgICAgICctLWhpZGUtc2Nyb2xsYmFycycsXG4gICAgICAnLS1tZXRyaWNzLXJlY29yZGluZy1vbmx5JyxcbiAgICAgICctLW11dGUtYXVkaW8nLFxuICAgICAgJy0tbm8tZmlyc3QtcnVuJyxcbiAgICAgICctLXNhZmVicm93c2luZy1kaXNhYmxlLWF1dG8tdXBkYXRlJyxcbiAgICAgICctLWlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnMnLFxuICAgICAgJy0taWdub3JlLXNzbC1lcnJvcnMnLFxuICAgICAgJy0taWdub3JlLWNlcnRpZmljYXRlLWVycm9ycy1zcGtpLWxpc3QnLFxuICAgIF0sXG4gIH0sXG4gIG1hcHBlcjoge1xuICAgIGVuYWJsZTogZmFsc2UsXG4gICAgcHJlZml4OiAndGFnb25lLScsXG4gIH0sXG4gIGRiOiB7XG4gICAgbW9uZ29kYkRhdGFiYXNlOiAndG9rZW5zJyxcbiAgICBtb25nb2RiQ29sbGVjdGlvbjogJycsXG4gICAgbW9uZ29kYlVzZXI6ICcnLFxuICAgIG1vbmdvZGJQYXNzd29yZDogJycsXG4gICAgbW9uZ29kYkhvc3Q6ICcnLFxuICAgIG1vbmdvSXNSZW1vdGU6IHRydWUsXG4gICAgbW9uZ29VUkxSZW1vdGU6ICcnLFxuICAgIG1vbmdvZGJQb3J0OiAyNzAxNyxcbiAgICByZWRpc0hvc3Q6ICdsb2NhbGhvc3QnLFxuICAgIHJlZGlzUG9ydDogNjM3OSxcbiAgICByZWRpc1Bhc3N3b3JkOiAnJyxcbiAgICByZWRpc0RiOiAwLFxuICAgIHJlZGlzUHJlZml4OiAnZG9ja2VyJyxcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiJtSEFBZTtFQUNiQSxTQUFTLEVBQUUscUJBQXFCO0VBQ2hDQyxJQUFJLEVBQUUsa0JBQWtCO0VBQ3hCQyxJQUFJLEVBQUUsT0FBTztFQUNiQyxVQUFVLEVBQUUsWUFBWTtFQUN4QkMsU0FBUyxFQUFFLG1CQUFtQjtFQUM5QkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLGNBQWMsRUFBRSxNQUFNO0VBQ3RCQyxZQUFZLEVBQUUsRUFBRTtFQUNoQkMsaUJBQWlCLEVBQUUsZ0JBQWdCO0VBQ25DQyxPQUFPLEVBQUU7SUFDUEMsR0FBRyxFQUFFLElBQUk7SUFDVEMsWUFBWSxFQUFFLElBQUk7SUFDbEJDLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLFdBQVcsRUFBRSxJQUFJO0lBQ2pCQyxnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCQyxVQUFVLEVBQUUsSUFBSTtJQUNoQkMsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QkMscUJBQXFCLEVBQUUsSUFBSTtJQUMzQkMsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QkMsY0FBYyxFQUFFLElBQUk7SUFDcEJDLGdCQUFnQixFQUFFO0VBQ3BCLENBQUM7RUFDREMsT0FBTyxFQUFFO0lBQ1BDLE1BQU0sRUFBRSxLQUFLO0lBQ2JDLFFBQVEsRUFBRSxFQUFFO0lBQ1pDLGFBQWEsRUFBRTtFQUNqQixDQUFDO0VBQ0RDLEdBQUcsRUFBRTtJQUNIQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQ2hCQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTTtFQUM1QixDQUFDO0VBQ0RDLGFBQWEsRUFBRTtJQUNiQyxXQUFXLEVBQUU7SUFDWCx3QkFBd0I7SUFDeEIsY0FBYztJQUNkLHdCQUF3QjtJQUN4Qiw0QkFBNEI7SUFDNUIsaUJBQWlCO0lBQ2pCLDZCQUE2QjtJQUM3QixvQ0FBb0M7SUFDcEMscUJBQXFCO0lBQ3JCLGlDQUFpQztJQUNqQyx3QkFBd0I7SUFDeEIsc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLDBCQUEwQjtJQUMxQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLG9DQUFvQztJQUNwQyw2QkFBNkI7SUFDN0IscUJBQXFCO0lBQ3JCLHVDQUF1Qzs7RUFFM0MsQ0FBQztFQUNEQyxNQUFNLEVBQUU7SUFDTlIsTUFBTSxFQUFFLEtBQUs7SUFDYlMsTUFBTSxFQUFFO0VBQ1YsQ0FBQztFQUNEQyxFQUFFLEVBQUU7SUFDRkMsZUFBZSxFQUFFLFFBQVE7SUFDekJDLGlCQUFpQixFQUFFLEVBQUU7SUFDckJDLFdBQVcsRUFBRSxFQUFFO0lBQ2ZDLGVBQWUsRUFBRSxFQUFFO0lBQ25CQyxXQUFXLEVBQUUsRUFBRTtJQUNmQyxhQUFhLEVBQUUsSUFBSTtJQUNuQkMsY0FBYyxFQUFFLEVBQUU7SUFDbEJDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCQyxTQUFTLEVBQUUsV0FBVztJQUN0QkMsU0FBUyxFQUFFLElBQUk7SUFDZkMsYUFBYSxFQUFFLEVBQUU7SUFDakJDLE9BQU8sRUFBRSxDQUFDO0lBQ1ZDLFdBQVcsRUFBRTtFQUNmO0FBQ0YsQ0FBQyxDQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FBQUMsUUFBQSJ9
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.addProductImage = addProductImage;exports.changeProductImage = changeProductImage;exports.createCollection = createCollection;exports.delProducts = delProducts;exports.deleteCollection = deleteCollection;exports.editCollection = editCollection;exports.editProduct = editProduct;exports.getCollections = getCollections;exports.getProductById = getProductById;exports.getProducts = getProducts;exports.removeProductImage = removeProductImage;exports.sendLinkCatalog = sendLinkCatalog;exports.setProductVisibility = setProductVisibility;exports.updateCartEnabled = updateCartEnabled;
1
+ "use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.addProduct = addProduct;exports.addProductImage = addProductImage;exports.changeProductImage = changeProductImage;exports.createCollection = createCollection;exports.delProducts = delProducts;exports.deleteCollection = deleteCollection;exports.editCollection = editCollection;exports.editProduct = editProduct;exports.getCollections = getCollections;exports.getProductById = getProductById;exports.getProducts = getProducts;exports.removeProductImage = removeProductImage;exports.sendLinkCatalog = sendLinkCatalog;exports.setProductVisibility = setProductVisibility;exports.updateCartEnabled = updateCartEnabled;
2
2
 
3
3
 
4
4
 
@@ -27,7 +27,15 @@ var _functions = require("../util/functions"); /*
27
27
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
28
28
  * See the License for the specific language governing permissions and
29
29
  * limitations under the License.
30
- */async function getProducts(req, res) {const { phone, qnt } = req.query;if (!phone) return res.status(401).send({ message: 'Please send the contact number you wish to return the products.' });try {const result = await req.client.getProducts(phone, qnt);res.status(201).json({ status: 'success', response: result });} catch (error) {res.status(500).json({ status: 'Error', message: 'Error on get products', error: error });}
30
+ */async function getProducts(req, res) {const { phone, qnt } = req.query;if (!phone) return res.status(401).send({ message: 'Please send the contact number you wish to return the products.' });try {const result = await req.client.getProducts(phone, qnt);
31
+ res.status(201).json({ status: 'success', response: result });
32
+ } catch (error) {
33
+ res.status(500).json({
34
+ status: 'Error',
35
+ message: 'Error on get products',
36
+ error: error
37
+ });
38
+ }
31
39
  }
32
40
 
33
41
  async function getProductById(req, res) {
@@ -38,13 +46,17 @@ async function getProductById(req, res) {
38
46
  });
39
47
 
40
48
  try {
41
- const result = await req.client.getProductById(phone, id);
49
+ const result = await req.client.getProductById(
50
+ phone,
51
+ id);
52
+
42
53
  res.status(201).json({ status: 'success', response: result });
43
54
  } catch (error) {
44
- res.status(500).json({ status: 'Error', message: 'Error on get product', error: error });
55
+ res.
56
+ status(500).
57
+ json({ status: 'Error', message: 'Error on get product', error: error });
45
58
  }
46
59
  }
47
-
48
60
  async function editProduct(req, res) {
49
61
  const { id, options } = req.body;
50
62
  if (!id || !options)
@@ -56,7 +68,11 @@ async function editProduct(req, res) {
56
68
  const result = await req.client.editProduct(id, options);
57
69
  res.status(201).json({ status: 'success', response: result });
58
70
  } catch (error) {
59
- res.status(500).json({ status: 'Error', message: 'Error on edit product.', error: error });
71
+ res.status(500).json({
72
+ status: 'Error',
73
+ message: 'Error on edit product.',
74
+ error: error
75
+ });
60
76
  }
61
77
  }
62
78
 
@@ -71,7 +87,11 @@ async function delProducts(req, res) {
71
87
  const result = await req.client.delProducts(id);
72
88
  res.status(201).json({ status: 'success', response: result });
73
89
  } catch (error) {
74
- res.status(500).json({ status: 'Error', message: 'Error on delete product.', error: error });
90
+ res.status(500).json({
91
+ status: 'Error',
92
+ message: 'Error on delete product.',
93
+ error: error
94
+ });
75
95
  }
76
96
  }
77
97
 
@@ -86,7 +106,48 @@ async function changeProductImage(req, res) {
86
106
  const result = await req.client.changeProductImage(id, base64);
87
107
  res.status(201).json({ status: 'success', response: result });
88
108
  } catch (error) {
89
- res.status(500).json({ status: 'Error', message: 'Error on change product image.', error: error });
109
+ res.status(500).json({
110
+ status: 'Error',
111
+ message: 'Error on change product image.',
112
+ error: error
113
+ });
114
+ }
115
+ }
116
+
117
+ async function addProduct(req, res) {
118
+ const {
119
+ name,
120
+ image,
121
+ description,
122
+ price,
123
+ url,
124
+ retailerId,
125
+ currency = 'BRL'
126
+ } = req.body;
127
+ if (!name || !image || !price)
128
+ return res.status(401).send({
129
+ message: 'name, price and image was not informed'
130
+ });
131
+
132
+ try {
133
+ const result = await req.client.createProduct(
134
+ name,
135
+ image,
136
+ description,
137
+ price,
138
+ false,
139
+ url,
140
+ retailerId,
141
+ currency);
142
+
143
+ res.status(201).json({ status: 'success', response: result });
144
+ } catch (error) {
145
+ console.log(error);
146
+ res.status(500).json({
147
+ status: 'Error',
148
+ message: 'Error on add product.',
149
+ error: error
150
+ });
90
151
  }
91
152
  }
92
153
 
@@ -101,7 +162,11 @@ async function addProductImage(req, res) {
101
162
  const result = await req.client.addProductImage(id, base64);
102
163
  res.status(201).json({ status: 'success', response: result });
103
164
  } catch (error) {
104
- res.status(500).json({ status: 'Error', message: 'Error on add product image.', error: error });
165
+ res.status(500).json({
166
+ status: 'Error',
167
+ message: 'Error on add product image.',
168
+ error: error
169
+ });
105
170
  }
106
171
  }
107
172
 
@@ -113,10 +178,14 @@ async function removeProductImage(req, res) {
113
178
  });
114
179
 
115
180
  try {
116
- const result = await req.client.addProductImage(id, index);
181
+ const result = await req.client.removeProductImage(id, index);
117
182
  res.status(201).json({ status: 'success', response: result });
118
183
  } catch (error) {
119
- res.status(500).json({ status: 'Error', message: 'Error on remove product image.', error: error });
184
+ res.status(500).json({
185
+ status: 'Error',
186
+ message: 'Error on remove product image.',
187
+ error: error
188
+ });
120
189
  }
121
190
  }
122
191
 
@@ -128,10 +197,18 @@ async function getCollections(req, res) {
128
197
  });
129
198
 
130
199
  try {
131
- const result = await req.client.getCollections(phone, qnt, max);
200
+ const result = await req.client.getCollections(
201
+ phone,
202
+ qnt,
203
+ max);
204
+
132
205
  res.status(201).json({ status: 'success', response: result });
133
206
  } catch (error) {
134
- res.status(500).json({ status: 'Error', message: 'Error on get collections.', error: error });
207
+ res.status(500).json({
208
+ status: 'Error',
209
+ message: 'Error on get collections.',
210
+ error: error
211
+ });
135
212
  }
136
213
  }
137
214
 
@@ -146,7 +223,11 @@ async function createCollection(req, res) {
146
223
  const result = await req.client.createCollection(name, products);
147
224
  res.status(201).json({ status: 'success', response: result });
148
225
  } catch (error) {
149
- res.status(500).json({ status: 'Error', message: 'Error on create collection.', error: error });
226
+ res.status(500).json({
227
+ status: 'Error',
228
+ message: 'Error on create collection.',
229
+ error: error
230
+ });
150
231
  }
151
232
  }
152
233
 
@@ -158,10 +239,14 @@ async function editCollection(req, res) {
158
239
  });
159
240
 
160
241
  try {
161
- const result = await req.client.createCollection(id, options);
242
+ const result = await req.client.editCollection(id, options);
162
243
  res.status(201).json({ status: 'success', response: result });
163
244
  } catch (error) {
164
- res.status(500).json({ status: 'Error', message: 'Error on edit collection.', error: error });
245
+ res.status(500).json({
246
+ status: 'Error',
247
+ message: 'Error on edit collection.',
248
+ error: error
249
+ });
165
250
  }
166
251
  }
167
252
 
@@ -176,7 +261,11 @@ async function deleteCollection(req, res) {
176
261
  const result = await req.client.deleteCollection(id);
177
262
  res.status(201).json({ status: 'success', response: result });
178
263
  } catch (error) {
179
- res.status(500).json({ status: 'Error', message: 'Error on delete collection.', error: error });
264
+ res.status(500).json({
265
+ status: 'Error',
266
+ message: 'Error on delete collection.',
267
+ error: error
268
+ });
180
269
  }
181
270
  }
182
271
 
@@ -191,7 +280,11 @@ async function setProductVisibility(req, res) {
191
280
  const result = await req.client.setProductVisibility(id, value);
192
281
  res.status(201).json({ status: 'success', response: result });
193
282
  } catch (error) {
194
- res.status(500).json({ status: 'Error', message: 'Error on set product visibility.', error: error });
283
+ res.status(500).json({
284
+ status: 'Error',
285
+ message: 'Error on set product visibility.',
286
+ error: error
287
+ });
195
288
  }
196
289
  }
197
290
 
@@ -206,7 +299,11 @@ async function updateCartEnabled(req, res) {
206
299
  const result = await req.client.updateCartEnabled(enabled);
207
300
  res.status(201).json({ status: 'success', response: result });
208
301
  } catch (error) {
209
- res.status(500).json({ status: 'Error', message: 'Error on set enabled cart.', error: error });
302
+ res.status(500).json({
303
+ status: 'Error',
304
+ message: 'Error on set enabled cart.',
305
+ error: error
306
+ });
210
307
  }
211
308
  }
212
309
 
@@ -221,7 +318,10 @@ async function sendLinkCatalog(req, res) {
221
318
  const session = await req.client.getWid();
222
319
  const catalogLink = (0, _functions.createCatalogLink)(session);
223
320
  for (const phone of phones) {
224
- const result = await req.client.sendText(phone, `${message} ${catalogLink}`, {
321
+ const result = await req.client.sendText(
322
+ phone,
323
+ `${message} ${catalogLink}`,
324
+ {
225
325
  useTemplateButtons: true,
226
326
  buttons: [
227
327
  {
@@ -230,11 +330,16 @@ async function sendLinkCatalog(req, res) {
230
330
  }]
231
331
 
232
332
  });
333
+
233
334
  results.push({ phone, status: result.id });
234
335
  }
235
336
  return res.status(200).json({ status: 'success', response: results });
236
337
  } catch (error) {
237
- res.status(500).json({ status: 'Error', message: 'Error on set enabled cart.', error: error });
338
+ res.status(500).json({
339
+ status: 'Error',
340
+ message: 'Error on set enabled cart.',
341
+ error: error
342
+ });
238
343
  }
239
344
  }
240
- //# sourceMappingURL=catalogController.js.map
345
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnVuY3Rpb25zIiwicmVxdWlyZSIsImdldFByb2R1Y3RzIiwicmVxIiwicmVzIiwicGhvbmUiLCJxbnQiLCJxdWVyeSIsInN0YXR1cyIsInNlbmQiLCJtZXNzYWdlIiwicmVzdWx0IiwiY2xpZW50IiwianNvbiIsInJlc3BvbnNlIiwiZXJyb3IiLCJnZXRQcm9kdWN0QnlJZCIsImlkIiwiZWRpdFByb2R1Y3QiLCJvcHRpb25zIiwiYm9keSIsImRlbFByb2R1Y3RzIiwiY2hhbmdlUHJvZHVjdEltYWdlIiwiYmFzZTY0IiwiYWRkUHJvZHVjdCIsIm5hbWUiLCJpbWFnZSIsImRlc2NyaXB0aW9uIiwicHJpY2UiLCJ1cmwiLCJyZXRhaWxlcklkIiwiY3VycmVuY3kiLCJjcmVhdGVQcm9kdWN0IiwiY29uc29sZSIsImxvZyIsImFkZFByb2R1Y3RJbWFnZSIsInJlbW92ZVByb2R1Y3RJbWFnZSIsImluZGV4IiwiZ2V0Q29sbGVjdGlvbnMiLCJtYXgiLCJjcmVhdGVDb2xsZWN0aW9uIiwicHJvZHVjdHMiLCJlZGl0Q29sbGVjdGlvbiIsImRlbGV0ZUNvbGxlY3Rpb24iLCJzZXRQcm9kdWN0VmlzaWJpbGl0eSIsInZhbHVlIiwidXBkYXRlQ2FydEVuYWJsZWQiLCJlbmFibGVkIiwic2VuZExpbmtDYXRhbG9nIiwicGhvbmVzIiwicmVzdWx0cyIsInNlc3Npb24iLCJnZXRXaWQiLCJjYXRhbG9nTGluayIsImNyZWF0ZUNhdGFsb2dMaW5rIiwic2VuZFRleHQiLCJ1c2VUZW1wbGF0ZUJ1dHRvbnMiLCJidXR0b25zIiwidGV4dCIsInB1c2giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9jYXRhbG9nQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjcmVhdGVDYXRhbG9nTGluayB9IGZyb20gJy4uL3V0aWwvZnVuY3Rpb25zJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2R1Y3RzKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lLCBxbnQgfSA9IHJlcS5xdWVyeTtcbiAgaWYgKCFwaG9uZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ1BsZWFzZSBzZW5kIHRoZSBjb250YWN0IG51bWJlciB5b3Ugd2lzaCB0byByZXR1cm4gdGhlIHByb2R1Y3RzLicsXG4gICAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LmdldFByb2R1Y3RzKFxuICAgICAgcGhvbmUgYXMgc3RyaW5nLFxuICAgICAgcW50IGFzIHVua25vd24gYXMgbnVtYmVyXG4gICAgKTtcbiAgICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgcHJvZHVjdHMnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9kdWN0QnlJZChyZXE6IGFueSwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBwaG9uZSwgaWQgfSA9IHJlcS5xdWVyeTtcbiAgaWYgKCFwaG9uZSB8fCAhaWQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VuZCB0aGUgY29udGFjdCBudW1iZXIgYW5kIHByb2R1Y3RJZC4nLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5nZXRQcm9kdWN0QnlJZChcbiAgICAgIHBob25lIGFzIHN0cmluZyxcbiAgICAgIGlkIGFzIHN0cmluZ1xuICAgICk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdFcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgcHJvZHVjdCcsIGVycm9yOiBlcnJvciB9KTtcbiAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRQcm9kdWN0KHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkLCBvcHRpb25zIH0gPSByZXEuYm9keTtcbiAgaWYgKCFpZCB8fCAhb3B0aW9ucylcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3RJZCBvciBvcHRpb25zIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5lZGl0UHJvZHVjdChpZCwgb3B0aW9ucyk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZWRpdCBwcm9kdWN0LicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbFByb2R1Y3RzKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkIH0gPSByZXEuYm9keTtcbiAgaWYgKCFpZClcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3RzIElkIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5kZWxQcm9kdWN0cyhpZCk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZGVsZXRlIHByb2R1Y3QuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hhbmdlUHJvZHVjdEltYWdlKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkLCBiYXNlNjQgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWlkIHx8ICFiYXNlNjQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdwcm9kdWN0SWQgYW5kIGJhc2U2NCB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuY2hhbmdlUHJvZHVjdEltYWdlKGlkLCBiYXNlNjQpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGNoYW5nZSBwcm9kdWN0IGltYWdlLicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZFByb2R1Y3QocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGltYWdlLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHByaWNlLFxuICAgIHVybCxcbiAgICByZXRhaWxlcklkLFxuICAgIGN1cnJlbmN5ID0gJ0JSTCcsXG4gIH0gPSByZXEuYm9keTtcbiAgaWYgKCFuYW1lIHx8ICFpbWFnZSB8fCAhcHJpY2UpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICduYW1lLCBwcmljZSBhbmQgaW1hZ2Ugd2FzIG5vdCBpbmZvcm1lZCcsXG4gICAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LmNyZWF0ZVByb2R1Y3QoXG4gICAgICBuYW1lLFxuICAgICAgaW1hZ2UsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHByaWNlLFxuICAgICAgZmFsc2UsXG4gICAgICB1cmwsXG4gICAgICByZXRhaWxlcklkLFxuICAgICAgY3VycmVuY3lcbiAgICApO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBhZGQgcHJvZHVjdC4nLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRQcm9kdWN0SW1hZ2UocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgaWQsIGJhc2U2NCB9ID0gcmVxLmJvZHk7XG4gIGlmICghaWQgfHwgIWJhc2U2NClcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3RJZCBhbmQgYmFzZTY0IHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5hZGRQcm9kdWN0SW1hZ2UoaWQsIGJhc2U2NCk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gYWRkIHByb2R1Y3QgaW1hZ2UuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVtb3ZlUHJvZHVjdEltYWdlKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkLCBpbmRleCB9ID0gcmVxLmJvZHk7XG4gIGlmICghaWQgfHwgIWluZGV4KVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAncHJvZHVjdElkIGFuZCBpbmRleCBpbWFnZSB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQucmVtb3ZlUHJvZHVjdEltYWdlKGlkLCBpbmRleCk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gcmVtb3ZlIHByb2R1Y3QgaW1hZ2UuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbnMocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgcGhvbmUsIHFudCwgbWF4IH0gPSByZXEucXVlcnk7XG4gIGlmICghcGhvbmUpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdwaG9uZSB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0Q29sbGVjdGlvbnMoXG4gICAgICBwaG9uZSBhcyBzdHJpbmcsXG4gICAgICBxbnQgYXMgc3RyaW5nLFxuICAgICAgbWF4IGFzIHN0cmluZ1xuICAgICk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZ2V0IGNvbGxlY3Rpb25zLicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbGxlY3Rpb24ocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgbmFtZSwgcHJvZHVjdHMgfSA9IHJlcS5ib2R5O1xuICBpZiAoIW5hbWUgfHwgIXByb2R1Y3RzKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAnbmFtZSBvciBwcm9kdWN0cyB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuY3JlYXRlQ29sbGVjdGlvbihuYW1lLCBwcm9kdWN0cyk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gY3JlYXRlIGNvbGxlY3Rpb24uJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdENvbGxlY3Rpb24ocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgaWQsIG9wdGlvbnMgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWlkIHx8ICFvcHRpb25zKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAnaWQgb3Igb3B0aW9ucyB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZWRpdENvbGxlY3Rpb24oaWQsIG9wdGlvbnMpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGVkaXQgY29sbGVjdGlvbi4nLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVDb2xsZWN0aW9uKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkIH0gPSByZXEuYm9keTtcbiAgaWYgKCFpZClcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ2lkIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5kZWxldGVDb2xsZWN0aW9uKGlkKTtcbiAgICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBkZWxldGUgY29sbGVjdGlvbi4nLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRQcm9kdWN0VmlzaWJpbGl0eShyZXE6IGFueSwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBpZCwgdmFsdWUgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWlkIHx8ICF2YWx1ZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3QgaWQgb3IgdmFsdWUgKGZhbHNlLCB0cnVlKSB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuc2V0UHJvZHVjdFZpc2liaWxpdHkoaWQsIHZhbHVlKTtcbiAgICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZXQgcHJvZHVjdCB2aXNpYmlsaXR5LicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNhcnRFbmFibGVkKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGVuYWJsZWQgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWVuYWJsZWQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdlbmFibGVkIChmYWxzZSwgdHJ1ZSkgd2FzIG5vdCBpbmZvcm1lZCcsXG4gICAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LnVwZGF0ZUNhcnRFbmFibGVkKGVuYWJsZWQpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCBlbmFibGVkIGNhcnQuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZExpbmtDYXRhbG9nKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lcywgbWVzc2FnZSB9ID0gcmVxLmJvZHk7XG4gIGlmICghcGhvbmVzKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAncGhvbmVzIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuICBjb25zdCByZXN1bHRzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0V2lkKCk7XG4gICAgY29uc3QgY2F0YWxvZ0xpbmsgPSBjcmVhdGVDYXRhbG9nTGluayhzZXNzaW9uKTtcbiAgICBmb3IgKGNvbnN0IHBob25lIG9mIHBob25lcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5zZW5kVGV4dChcbiAgICAgICAgcGhvbmUsXG4gICAgICAgIGAke21lc3NhZ2V9ICR7Y2F0YWxvZ0xpbmt9YCxcbiAgICAgICAge1xuICAgICAgICAgIHVzZVRlbXBsYXRlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHVybDogY2F0YWxvZ0xpbmssXG4gICAgICAgICAgICAgIHRleHQ6ICdBYnJpciBjYXTDoWxvZ28nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgKHJlc3VsdHMgYXMgYW55KS5wdXNoKHsgcGhvbmUsIHN0YXR1czogcmVzdWx0LmlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdHMgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCBlbmFibGVkIGNhcnQuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUEsc0JBQXNELENBZnREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUdPLGVBQWVDLFdBQVdBLENBQUNDLEdBQVEsRUFBRUMsR0FBUSxFQUFFLENBQ3BELE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxHQUFHLENBQUMsQ0FBQyxHQUFHSCxHQUFHLENBQUNJLEtBQUssQ0FDaEMsSUFBSSxDQUFDRixLQUFLLEVBQ1IsT0FBT0QsR0FBRyxDQUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUMxQkMsT0FBTyxFQUNMLGlFQUFpRSxDQUNyRSxDQUFDLENBQUMsQ0FFSixJQUFJLENBQ0YsTUFBTUMsTUFBTSxHQUFHLE1BQU1SLEdBQUcsQ0FBQ1MsTUFBTSxDQUFDVixXQUFXLENBQ3pDRyxLQUFLLEVBQ0xDLEdBQUcsQ0FDSjtJQUNERixHQUFHLENBQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0ssSUFBSSxDQUFDLEVBQUVMLE1BQU0sRUFBRSxTQUFTLEVBQUVNLFFBQVEsRUFBRUgsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUMvRCxDQUFDLENBQUMsT0FBT0ksS0FBSyxFQUFFO0lBQ2RYLEdBQUcsQ0FBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDSyxJQUFJLENBQUM7TUFDbkJMLE1BQU0sRUFBRSxP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