@witnet/sdk 1.0.1 → 1.0.4

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 (211) hide show
  1. package/.env_witnet +6 -6
  2. package/LICENSE +21 -21
  3. package/README.md +103 -103
  4. package/dist/bin/helpers.d.ts +88 -0
  5. package/dist/bin/helpers.d.ts.map +1 -0
  6. package/dist/bin/helpers.js +866 -0
  7. package/dist/index.d.ts +4 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +42 -0
  10. package/dist/lib/crypto/account.d.ts +18 -0
  11. package/dist/lib/crypto/account.d.ts.map +1 -0
  12. package/dist/lib/crypto/account.js +152 -0
  13. package/dist/lib/crypto/coinbase.d.ts +9 -0
  14. package/dist/lib/crypto/coinbase.d.ts.map +1 -0
  15. package/dist/lib/crypto/coinbase.js +39 -0
  16. package/dist/lib/crypto/index.d.ts +7 -0
  17. package/dist/lib/crypto/index.d.ts.map +1 -0
  18. package/dist/lib/crypto/index.js +28 -0
  19. package/dist/lib/crypto/interfaces.d.ts +80 -0
  20. package/dist/lib/crypto/interfaces.d.ts.map +1 -0
  21. package/dist/lib/crypto/interfaces.js +3 -0
  22. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts +47 -0
  23. package/dist/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
  24. package/dist/lib/crypto/payloads/DataRequestPayload.js +384 -0
  25. package/dist/lib/crypto/payloads/StakePayload.d.ts +27 -0
  26. package/dist/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
  27. package/dist/lib/crypto/payloads/StakePayload.js +184 -0
  28. package/dist/lib/crypto/payloads/UnstakePayload.d.ts +35 -0
  29. package/dist/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
  30. package/dist/lib/crypto/payloads/UnstakePayload.js +244 -0
  31. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts +24 -0
  32. package/dist/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
  33. package/dist/lib/crypto/payloads/ValueTransferPayload.js +182 -0
  34. package/dist/lib/crypto/payloads.d.ts +54 -0
  35. package/dist/lib/crypto/payloads.d.ts.map +1 -0
  36. package/dist/lib/crypto/payloads.js +224 -0
  37. package/dist/lib/crypto/signer.d.ts +26 -0
  38. package/dist/lib/crypto/signer.d.ts.map +1 -0
  39. package/dist/lib/crypto/signer.js +299 -0
  40. package/dist/lib/crypto/transmitters/DataRequests.d.ts +14 -0
  41. package/dist/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
  42. package/dist/lib/crypto/transmitters/DataRequests.js +62 -0
  43. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts +11 -0
  44. package/dist/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
  45. package/dist/lib/crypto/transmitters/StakeDeposits.js +48 -0
  46. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts +17 -0
  47. package/dist/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
  48. package/dist/lib/crypto/transmitters/StakeWithdrawals.js +115 -0
  49. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts +10 -0
  50. package/dist/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
  51. package/dist/lib/crypto/transmitters/ValueTransfers.js +47 -0
  52. package/dist/lib/crypto/transmitters.d.ts +46 -0
  53. package/dist/lib/crypto/transmitters.d.ts.map +1 -0
  54. package/dist/lib/crypto/transmitters.js +506 -0
  55. package/dist/lib/crypto/types.d.ts +127 -0
  56. package/dist/lib/crypto/types.d.ts.map +1 -0
  57. package/dist/lib/crypto/types.js +261 -0
  58. package/dist/lib/crypto/utils.d.ts +10 -0
  59. package/dist/lib/crypto/utils.d.ts.map +1 -0
  60. package/dist/lib/crypto/utils.js +97 -0
  61. package/dist/lib/crypto/wallet.d.ts +26 -0
  62. package/dist/lib/crypto/wallet.d.ts.map +1 -0
  63. package/dist/lib/crypto/wallet.js +327 -0
  64. package/dist/lib/helpers.d.ts +90 -0
  65. package/dist/lib/helpers.d.ts.map +1 -0
  66. package/dist/lib/helpers.js +1031 -0
  67. package/dist/lib/index.d.ts +5 -0
  68. package/dist/lib/index.d.ts.map +1 -0
  69. package/dist/lib/index.js +21 -0
  70. package/dist/lib/radon/artifacts.d.ts +55 -0
  71. package/dist/lib/radon/artifacts.d.ts.map +1 -0
  72. package/dist/lib/radon/artifacts.js +347 -0
  73. package/dist/lib/radon/ccdr/eth.d.ts +100 -0
  74. package/dist/lib/radon/ccdr/eth.d.ts.map +1 -0
  75. package/dist/lib/radon/ccdr/eth.js +237 -0
  76. package/dist/lib/radon/ccdr/index.d.ts +34 -0
  77. package/dist/lib/radon/ccdr/index.d.ts.map +1 -0
  78. package/dist/lib/radon/ccdr/index.js +63 -0
  79. package/dist/lib/radon/ccdr/wit.d.ts +29 -0
  80. package/dist/lib/radon/ccdr/wit.d.ts.map +1 -0
  81. package/dist/lib/radon/ccdr/wit.js +60 -0
  82. package/dist/lib/radon/filters.d.ts +14 -0
  83. package/dist/lib/radon/filters.d.ts.map +1 -0
  84. package/dist/lib/radon/filters.js +47 -0
  85. package/dist/lib/radon/index.d.ts +36 -0
  86. package/dist/lib/radon/index.d.ts.map +1 -0
  87. package/dist/lib/radon/index.js +154 -0
  88. package/dist/lib/radon/reducers.d.ts +29 -0
  89. package/dist/lib/radon/reducers.d.ts.map +1 -0
  90. package/dist/lib/radon/reducers.js +101 -0
  91. package/dist/lib/radon/retrievals.d.ts +120 -0
  92. package/dist/lib/radon/retrievals.d.ts.map +1 -0
  93. package/dist/lib/radon/retrievals.js +358 -0
  94. package/dist/lib/radon/sources.d.ts +102 -0
  95. package/dist/lib/radon/sources.d.ts.map +1 -0
  96. package/dist/lib/radon/sources.js +294 -0
  97. package/dist/lib/radon/types.d.ts +521 -0
  98. package/dist/lib/radon/types.d.ts.map +1 -0
  99. package/dist/lib/radon/types.js +1066 -0
  100. package/dist/lib/radon/utils.d.ts +55 -0
  101. package/dist/lib/radon/utils.d.ts.map +1 -0
  102. package/dist/lib/radon/utils.js +181 -0
  103. package/dist/lib/rpc/farm.d.ts +66 -0
  104. package/dist/lib/rpc/farm.d.ts.map +1 -0
  105. package/dist/lib/rpc/farm.js +808 -0
  106. package/dist/lib/rpc/index.d.ts +3 -0
  107. package/dist/lib/rpc/index.d.ts.map +1 -0
  108. package/dist/lib/rpc/index.js +19 -0
  109. package/dist/lib/rpc/node.d.ts +38 -0
  110. package/dist/lib/rpc/node.d.ts.map +1 -0
  111. package/dist/lib/rpc/node.js +335 -0
  112. package/dist/lib/rpc/nodes.d.ts +40 -0
  113. package/dist/lib/rpc/nodes.d.ts.map +1 -0
  114. package/dist/lib/rpc/nodes.js +531 -0
  115. package/dist/lib/rpc/provider.d.ts +72 -0
  116. package/dist/lib/rpc/provider.d.ts.map +1 -0
  117. package/dist/lib/rpc/provider.js +402 -0
  118. package/dist/lib/rpc/reporter.d.ts +18 -0
  119. package/dist/lib/rpc/reporter.d.ts.map +1 -0
  120. package/dist/lib/rpc/reporter.js +99 -0
  121. package/dist/lib/rpc/types.d.ts +396 -0
  122. package/dist/lib/rpc/types.d.ts.map +1 -0
  123. package/dist/lib/rpc/types.js +81 -0
  124. package/dist/lib/rpc/wallet.d.ts +72 -0
  125. package/dist/lib/rpc/wallet.d.ts.map +1 -0
  126. package/dist/lib/rpc/wallet.js +41 -0
  127. package/dist/lib/types.d.ts +19 -0
  128. package/dist/lib/types.d.ts.map +1 -0
  129. package/dist/lib/types.js +7 -0
  130. package/dist/lib/utils.d.ts +5 -0
  131. package/dist/lib/utils.d.ts.map +1 -0
  132. package/dist/lib/utils.js +51 -0
  133. package/dist/package.json +1 -1
  134. package/dist/src/bin/helpers.js +2 -2
  135. package/dist/src/index.js +1 -1
  136. package/dist/src/lib/crypto/account.js +1 -1
  137. package/dist/src/lib/crypto/coinbase.js +1 -1
  138. package/dist/src/lib/crypto/index.js +1 -1
  139. package/dist/src/lib/crypto/interfaces.js +1 -1
  140. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +2 -2
  141. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
  142. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +8 -8
  143. package/dist/src/lib/crypto/payloads/StakePayload.js +1 -1
  144. package/dist/src/lib/crypto/payloads/UnstakePayload.js +1 -1
  145. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +1 -1
  146. package/dist/src/lib/crypto/payloads.js +1 -1
  147. package/dist/src/lib/crypto/signer.js +1 -1
  148. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +0 -1
  149. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
  150. package/dist/src/lib/crypto/transmitters/DataRequests.js +1 -2
  151. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +1 -1
  152. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +1 -1
  153. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +1 -1
  154. package/dist/src/lib/crypto/transmitters.js +1 -1
  155. package/dist/src/lib/crypto/types.js +1 -1
  156. package/dist/src/lib/crypto/utils.js +1 -1
  157. package/dist/src/lib/crypto/wallet.js +1 -1
  158. package/dist/src/lib/index.js +1 -1
  159. package/dist/src/lib/radon/ccdr/eth.js +1 -1
  160. package/dist/src/lib/radon/ccdr/index.js +1 -1
  161. package/dist/src/lib/radon/ccdr/wit.d.ts +11 -0
  162. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
  163. package/dist/src/lib/radon/ccdr/wit.js +17 -2
  164. package/dist/src/lib/radon/filters.js +1 -1
  165. package/dist/src/lib/radon/index.d.ts +1 -1
  166. package/dist/src/lib/radon/index.d.ts.map +1 -1
  167. package/dist/src/lib/radon/index.js +9 -3
  168. package/dist/src/lib/radon/reducers.js +1 -1
  169. package/dist/src/lib/radon/types.js +1 -1
  170. package/dist/src/lib/radon/utils.js +1 -1
  171. package/dist/src/lib/rpc/index.js +1 -1
  172. package/dist/src/lib/rpc/nodes.js +1 -1
  173. package/dist/src/lib/rpc/provider.d.ts +5 -3
  174. package/dist/src/lib/rpc/provider.d.ts.map +1 -1
  175. package/dist/src/lib/rpc/provider.js +14 -3
  176. package/dist/src/lib/rpc/reporter.d.ts +2 -3
  177. package/dist/src/lib/rpc/reporter.d.ts.map +1 -1
  178. package/dist/src/lib/rpc/reporter.js +1 -4
  179. package/dist/src/lib/rpc/types.d.ts +49 -24
  180. package/dist/src/lib/rpc/types.d.ts.map +1 -1
  181. package/dist/src/lib/rpc/types.js +3 -1
  182. package/dist/src/lib/types.d.ts +1 -1
  183. package/dist/src/lib/types.d.ts.map +1 -1
  184. package/dist/src/lib/types.js +1 -1
  185. package/dist/src/lib/utils.js +1 -1
  186. package/dist/witnet/assets/index.js +1 -1
  187. package/dist/witnet/assets/modals/index.js +1 -1
  188. package/dist/witnet/assets/modals/web3/eth.js +1 -1
  189. package/dist/witnet/assets/modals/web3/ipfs.js +1 -1
  190. package/dist/witnet/assets/modals/web3/wit.js +4 -7
  191. package/dist/witnet/assets/requests.js +1 -1
  192. package/package.json +1 -1
  193. package/src/bin/cli/history.js +31 -31
  194. package/src/bin/cli/inspect.js +405 -359
  195. package/src/bin/cli/network.js +594 -592
  196. package/src/bin/cli/nodes.js +364 -364
  197. package/src/bin/cli/radon.js +815 -815
  198. package/src/bin/cli/wallet.js +1117 -1094
  199. package/src/bin/helpers.js +840 -840
  200. package/src/bin/postinstall.js +9 -9
  201. package/src/bin/toolkit.js +295 -295
  202. package/witnet/assets/_index.js +8 -8
  203. package/witnet/assets/_requests.js +25 -25
  204. package/witnet/assets/_sources.js +36 -36
  205. package/witnet/assets/_templates.js +36 -36
  206. package/witnet/assets/index.js +4 -4
  207. package/witnet/assets/modals/index.js +9 -9
  208. package/witnet/assets/modals/web3/eth.js +29 -29
  209. package/witnet/assets/modals/web3/ipfs.js +19 -19
  210. package/witnet/assets/modals/web3/wit.js +21 -23
  211. package/witnet/assets/requests.js +95 -95
@@ -0,0 +1,1031 @@
1
+ var __awaiter =
2
+ (this && this.__awaiter) ||
3
+ ((thisArg, _arguments, P, generator) => {
4
+ function adopt(value) {
5
+ return value instanceof P
6
+ ? value
7
+ : new P((resolve) => {
8
+ resolve(value)
9
+ })
10
+ }
11
+ return new (P || (P = Promise))((resolve, reject) => {
12
+ function fulfilled(value) {
13
+ try {
14
+ step(generator.next(value))
15
+ } catch (e) {
16
+ reject(e)
17
+ }
18
+ }
19
+ function rejected(value) {
20
+ try {
21
+ step(generator["throw"](value))
22
+ } catch (e) {
23
+ reject(e)
24
+ }
25
+ }
26
+ function step(result) {
27
+ result.done
28
+ ? resolve(result.value)
29
+ : adopt(result.value).then(fulfilled, rejected)
30
+ }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next())
32
+ })
33
+ })
34
+ var __generator =
35
+ (this && this.__generator) ||
36
+ ((thisArg, body) => {
37
+ var _ = {
38
+ label: 0,
39
+ sent: () => {
40
+ if (t[0] & 1) throw t[1]
41
+ return t[1]
42
+ },
43
+ trys: [],
44
+ ops: [],
45
+ },
46
+ f,
47
+ y,
48
+ t,
49
+ g = Object.create(
50
+ (typeof Iterator === "function" ? Iterator : Object).prototype,
51
+ )
52
+ return (
53
+ (g.next = verb(0)),
54
+ (g["throw"] = verb(1)),
55
+ (g["return"] = verb(2)),
56
+ typeof Symbol === "function" &&
57
+ (g[Symbol.iterator] = function () {
58
+ return this
59
+ }),
60
+ g
61
+ )
62
+ function verb(n) {
63
+ return (v) => step([n, v])
64
+ }
65
+ function step(op) {
66
+ if (f) throw new TypeError("Generator is already executing.")
67
+ while ((g && ((g = 0), op[0] && (_ = 0)), _))
68
+ try {
69
+ if (
70
+ ((f = 1),
71
+ y &&
72
+ (t =
73
+ op[0] & 2
74
+ ? y["return"]
75
+ : op[0]
76
+ ? y["throw"] || ((t = y["return"]) && t.call(y), 0)
77
+ : y.next) &&
78
+ !(t = t.call(y, op[1])).done)
79
+ )
80
+ return t
81
+ if (((y = 0), t)) op = [op[0] & 2, t.value]
82
+ switch (op[0]) {
83
+ case 0:
84
+ case 1:
85
+ t = op
86
+ break
87
+ case 4:
88
+ _.label++
89
+ return { value: op[1], done: false }
90
+ case 5:
91
+ _.label++
92
+ y = op[1]
93
+ op = [0]
94
+ continue
95
+ case 7:
96
+ op = _.ops.pop()
97
+ _.trys.pop()
98
+ continue
99
+ default:
100
+ if (
101
+ !((t = _.trys), (t = t.length > 0 && t[t.length - 1])) &&
102
+ (op[0] === 6 || op[0] === 2)
103
+ ) {
104
+ _ = 0
105
+ continue
106
+ }
107
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
108
+ _.label = op[1]
109
+ break
110
+ }
111
+ if (op[0] === 6 && _.label < t[1]) {
112
+ _.label = t[1]
113
+ t = op
114
+ break
115
+ }
116
+ if (t && _.label < t[2]) {
117
+ _.label = t[2]
118
+ _.ops.push(op)
119
+ break
120
+ }
121
+ if (t[2]) _.ops.pop()
122
+ _.trys.pop()
123
+ continue
124
+ }
125
+ op = body.call(thisArg, _)
126
+ } catch (e) {
127
+ op = [6, e]
128
+ y = 0
129
+ } finally {
130
+ f = t = 0
131
+ }
132
+ if (op[0] & 5) throw op[1]
133
+ return { value: op[0] ? op[1] : void 0, done: true }
134
+ }
135
+ })
136
+ var __read =
137
+ (this && this.__read) ||
138
+ ((o, n) => {
139
+ var m = typeof Symbol === "function" && o[Symbol.iterator]
140
+ if (!m) return o
141
+ var i = m.call(o),
142
+ r,
143
+ ar = [],
144
+ e
145
+ try {
146
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value)
147
+ } catch (error) {
148
+ e = { error: error }
149
+ } finally {
150
+ try {
151
+ if (r && !r.done && (m = i["return"])) m.call(i)
152
+ } finally {
153
+ if (e) throw e.error
154
+ }
155
+ }
156
+ return ar
157
+ })
158
+ var __spreadArray =
159
+ (this && this.__spreadArray) ||
160
+ ((to, from, pack) => {
161
+ if (pack || arguments.length === 2)
162
+ for (var i = 0, l = from.length, ar; i < l; i++) {
163
+ if (ar || !(i in from)) {
164
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i)
165
+ ar[i] = from[i]
166
+ }
167
+ }
168
+ return to.concat(ar || Array.prototype.slice.call(from))
169
+ })
170
+ var exec = require("child_process").exec
171
+ var net = require("net")
172
+ var readline = require("readline")
173
+ var colorstrip = (str) =>
174
+ str.replace(
175
+ /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,
176
+ "",
177
+ )
178
+ var commas = (number) => {
179
+ parts = number.toString().split(".")
180
+ var result =
181
+ parts.length <= 1
182
+ ? "".concat(parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","))
183
+ : ""
184
+ .concat(parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","), ".")
185
+ .concat(parts[1])
186
+ return result
187
+ }
188
+ var fromNanowits = (x) => Math.floor(x / Math.pow(10, 9))
189
+ function toFixedTrunc(x, n) {
190
+ var v = (typeof x === "string" ? x : x.toString()).split(".")
191
+ if (n <= 0) return v[0]
192
+ var f = v[1] || ""
193
+ if (f.length > n) return "".concat(v[0], ".").concat(f.substr(0, n))
194
+ while (f.length < n) f += "0"
195
+ return "".concat(v[0], ".").concat(f)
196
+ }
197
+ var whole_wits = (number, digits) => {
198
+ var lookup = [
199
+ { value: 1, symbol: " nWits" },
200
+ { value: 1e3, symbol: " μWits" },
201
+ { value: 1e6, symbol: " mWits" },
202
+ { value: 1e9, symbol: " Wits" },
203
+ { value: 1e12, symbol: " KWits" },
204
+ { value: 1e15, symbol: " MWits" },
205
+ ]
206
+ var regexp = /\.0+$|(?<=\.[0-9])0+$/
207
+ var item = lookup.findLast((item) => number >= item.value)
208
+ return item
209
+ ? toFixedTrunc(
210
+ commas(number / item.value),
211
+ digits,
212
+ )./*replace(regexp, "")*/ concat(item.symbol)
213
+ : "(no Wits)"
214
+ }
215
+ var lcyan = (str) => "\u001B[1;96m".concat(str, "\u001B[0m")
216
+ var lgray = (str) => "\u001B[1;90m".concat(str, "\u001B[0m")
217
+ var lgreen = (str) => "\u001B[1;92m".concat(str, "\u001B[0m")
218
+ var lmagenta = (str) => "\u001B[1;95m".concat(str, "\u001B[0m")
219
+ var lyellow = (str) => "\u001B[1;93m".concat(str, "\u001B[0m")
220
+ var mcyan = (str) => "\u001B[96m".concat(str, "\u001B[0m")
221
+ var mgreen = (str) => "\u001B[92m".concat(str, "\u001B[0m")
222
+ var mmagenta = (str) => "\u001B[95m".concat(str, "\u001B[0m")
223
+ var mred = (str) => "\u001B[91m".concat(str, "\u001B[0m")
224
+ var myellow = (str) => "\u001B[93m".concat(str, "\u001B[0m")
225
+ var cyan = (str) => "\u001B[36m".concat(str, "\u001B[0m")
226
+ var gray = (str) => "\u001B[90m".concat(str, "\u001B[0m")
227
+ var green = (str) => "\u001B[32m".concat(str, "\u001B[0m")
228
+ var magenta = (str) => "\u001B[35m".concat(str, "\u001B[0m")
229
+ var normal = (str) => "\u001B[98m".concat(str, "\u001B[0m")
230
+ var red = (str) => "\u001B[31m".concat(str, "\u001B[0m")
231
+ var white = (str) => "\u001B[1;98m".concat(str, "\u001B[0m")
232
+ var yellow = (str) => "\u001B[33m".concat(str, "\u001B[0m")
233
+ function countLeaves(t, obj) {
234
+ if (!obj) return 0
235
+ if (obj instanceof t) return 1
236
+ if (Array.isArray(obj))
237
+ return obj.reduce((sum, item) => sum + countLeaves(t, item), 0)
238
+ else
239
+ return Object.values(obj).reduce(
240
+ (sum, item) => sum + countLeaves(t, item),
241
+ 0,
242
+ )
243
+ }
244
+ function deleteExtraFlags(args) {
245
+ return args.filter((arg) => !arg.startsWith("--"))
246
+ }
247
+ function extractFromArgs(args, flags) {
248
+ var curated = {}
249
+ if (args && flags) {
250
+ Object.keys(flags).forEach((flag) => {
251
+ var flagIndex = args.indexOf("--".concat(flag))
252
+ if (flagIndex >= 0) {
253
+ if (flags[flag].param) {
254
+ curated[flag] = args[flagIndex]
255
+ if (!args[flagIndex + 1] || args[flagIndex + 1].startsWith("--")) {
256
+ throw "Missing required parameter for --".concat(flag)
257
+ } else {
258
+ curated[flag] = args[flagIndex + 1]
259
+ args.splice(flagIndex, 2)
260
+ }
261
+ } else {
262
+ curated[flag] = true
263
+ args.splice(flagIndex, 1)
264
+ }
265
+ }
266
+ })
267
+ }
268
+ return [args, curated]
269
+ }
270
+ function fromHexString(hexString) {
271
+ if (hexString.startsWith("0x")) hexString = hexString.slice(2)
272
+ return Uint8Array.from(
273
+ hexString.match(/.{1,2}/g).map((byte) => Number.parseInt(byte, 16)),
274
+ )
275
+ }
276
+ function ipIsPrivateOrLocalhost(ip) {
277
+ if (ip.substring(0, 7) === "::ffff:") ip = ip.substring(7)
278
+ if (net.isIPv4(ip)) {
279
+ // check localhost
280
+ if (ip === "127.0.0.1") return true
281
+ // 10.0.0.0 - 10.255.255.255 || 172.16.0.0 - 172.31.255.255 || 192.168.0.0 - 192.168.255.255
282
+ return (
283
+ /^(10)\.(.*)\.(.*)\.(.*)$/.test(ip) ||
284
+ /^(172)\.(1[6-9]|2[0-9]|3[0-1])\.(.*)\.(.*)$/.test(ip) ||
285
+ /^(192)\.(168)\.(.*)\.(.*)$/.test(ip)
286
+ )
287
+ }
288
+ // else: ip is IPv6
289
+ var firstWord = ip.split(":").find((el) => !!el) //get first not empty word
290
+ // equivalent of 127.0.0.1 in IPv6
291
+ if (ip === "::1") return true
292
+ // The original IPv6 Site Local addresses (fec0::/10) are deprecated. Range: fec0 - feff
293
+ else if (/^fe[c-f][0-f]$/.test(firstWord)) return true
294
+ // These days Unique Local Addresses (ULA) are used in place of Site Local.
295
+ // Range: fc00 - fcff
296
+ else if (/^fc[0-f]{2}$/.test(firstWord)) return true
297
+ // Range: fd00 - fcff
298
+ else if (/^fd[0-f]{2}$/.test(firstWord)) return true
299
+ // Link local addresses (prefixed with fe80) are not routable
300
+ else if (firstWord === "fe80") return true
301
+ // Discard Prefix
302
+ else if (firstWord === "100") return true
303
+ // Any other IP address is not Unique Local Address (ULA)
304
+ return false
305
+ }
306
+ function isHexStringOfLength(str, length) {
307
+ return (
308
+ isHexString(str) &&
309
+ ((str.starsWith("0x") && str.slice(2).length === length * 2) ||
310
+ str.length === length * 2)
311
+ )
312
+ }
313
+ function isHexString(str) {
314
+ return (
315
+ typeof str === "string" &&
316
+ ((str.startsWith("0x") && /^[a-fA-F0-9]+$/i.test(str.slice(2))) ||
317
+ /^[a-fA-F0-9]+$/i.test(str))
318
+ )
319
+ }
320
+ function toHexString(buffer) {
321
+ return (
322
+ "0x" +
323
+ Array.prototype.map
324
+ .call(buffer, (x) => ("00" + x.toString(16)).slice(-2))
325
+ .join("")
326
+ .match(/[a-fA-F0-9]{2}/g)
327
+ .join("")
328
+ )
329
+ }
330
+ function parseURL(url) {
331
+ try {
332
+ var parsedUrl = new URL(url)
333
+ return [
334
+ parsedUrl.protocol + "//",
335
+ parsedUrl.host,
336
+ parsedUrl.pathname.slice(1),
337
+ parsedUrl.search.slice(1),
338
+ ]
339
+ } catch (_a) {
340
+ throw new TypeError("Invalid URL was provided: ".concat(url))
341
+ }
342
+ }
343
+ function showUsage(cmd, module) {
344
+ showUsageHeadline(cmd)
345
+ if (module === null || module === void 0 ? void 0 : module.flags)
346
+ showUsageFlags(module.flags)
347
+ if (module === null || module === void 0 ? void 0 : module.router)
348
+ showUsageRouter(module.router)
349
+ if (module === null || module === void 0 ? void 0 : module.envars)
350
+ showUsageEnvars(module.envars)
351
+ }
352
+ function showUsageRouter(router) {
353
+ var cmds = Object.entries(router)
354
+ if (cmds.length > 0) {
355
+ console.info("\nSUBCOMMANDS:")
356
+ var maxLength_1 = Math.max.apply(
357
+ Math,
358
+ __spreadArray(
359
+ [],
360
+ __read(
361
+ cmds.map((_a) => {
362
+ var _b = __read(_a, 1),
363
+ cmd = _b[0]
364
+ return cmd.length
365
+ }),
366
+ ),
367
+ false,
368
+ ),
369
+ )
370
+ cmds.forEach((cmd) => {
371
+ console.info(
372
+ " ",
373
+ "".concat(cmd[0]).concat(" ".repeat(maxLength_1 - cmd[0].length)),
374
+ " ",
375
+ cmd[1].hint,
376
+ )
377
+ })
378
+ }
379
+ }
380
+ function showUsageError(cmd, subcmd, module, error) {
381
+ var _a
382
+ showUsageSubcommand(cmd, subcmd, module, error)
383
+ if (error) {
384
+ console.info("\nERROR:")
385
+ console.error(
386
+ ((_a = error === null || error === void 0 ? void 0 : error.stack) ===
387
+ null || _a === void 0
388
+ ? void 0
389
+ : _a.split("\n")[0]) || error,
390
+ )
391
+ }
392
+ }
393
+ function showUsageEnvars(envars) {
394
+ envars = Object.entries(envars)
395
+ if (envars.length > 0) {
396
+ console.info("\nENVARS:")
397
+ var maxWidth_1 = Math.max.apply(
398
+ Math,
399
+ __spreadArray(
400
+ [],
401
+ __read(
402
+ envars.map((_a) => {
403
+ var _b = __read(_a, 1),
404
+ envar = _b[0]
405
+ return envar.length
406
+ }),
407
+ ),
408
+ false,
409
+ ),
410
+ )
411
+ envars.forEach((_a) => {
412
+ var _b = __read(_a, 2),
413
+ envar = _b[0],
414
+ hint = _b[1]
415
+ if (envar.toUpperCase().indexOf("KEY") < 0 && process.env[envar]) {
416
+ console.info(
417
+ " ",
418
+ ""
419
+ .concat(yellow(envar.toUpperCase()))
420
+ .concat(" ".repeat(maxWidth_1 - envar.length)),
421
+ ' => Settled to "'.concat(myellow(process.env[envar]), '"'),
422
+ )
423
+ } else {
424
+ console.info(
425
+ " ",
426
+ ""
427
+ .concat(yellow(envar.toUpperCase()))
428
+ .concat(" ".repeat(maxWidth_1 - envar.length)),
429
+ " ".concat(hint),
430
+ )
431
+ }
432
+ })
433
+ }
434
+ }
435
+ function showUsageFlags(flags) {
436
+ flags = Object.entries(flags)
437
+ if (flags.length > 0) {
438
+ console.info("\nFLAGS:")
439
+ var maxLength_2 = Math.max.apply(
440
+ Math,
441
+ __spreadArray(
442
+ [],
443
+ __read(
444
+ flags.map((_a) => {
445
+ var _b = __read(_a, 2),
446
+ key = _b[0],
447
+ param = _b[1].param
448
+ return param ? key.length + param.length + 3 : key.length
449
+ }),
450
+ ),
451
+ false,
452
+ ),
453
+ )
454
+ flags.forEach((flag) => {
455
+ var str = ""
456
+ .concat(flag[0])
457
+ .concat(flag[1].param ? gray(" <".concat(flag[1].param, ">")) : "")
458
+ console.info(
459
+ " ",
460
+ "--"
461
+ .concat(str)
462
+ .concat(" ".repeat(maxLength_2 - colorstrip(str).length)),
463
+ " ",
464
+ flag[1].hint,
465
+ )
466
+ })
467
+ }
468
+ }
469
+ function showUsageHeadline(cmd, subcmd, module) {
470
+ var _a, _b, _c
471
+ console.info("USAGE:")
472
+ if (subcmd) {
473
+ var params =
474
+ (_a = module.router[subcmd]) === null || _a === void 0
475
+ ? void 0
476
+ : _a.params
477
+ var options =
478
+ (_b = module.router[subcmd]) === null || _b === void 0
479
+ ? void 0
480
+ : _b.options
481
+ if (params) {
482
+ var optionalize_1 = (str) =>
483
+ str.endsWith(" ...]")
484
+ ? "[<".concat(str.slice(1, -5), "> ...]")
485
+ : str[0] === "["
486
+ ? "[<".concat(str.slice(1, -1), ">]")
487
+ : "<".concat(str, ">")
488
+ if (Array.isArray(params)) {
489
+ params = params.map((param) => optionalize_1(param)).join(" ") + " "
490
+ } else {
491
+ params = optionalize_1(params)
492
+ }
493
+ }
494
+ console.info(
495
+ " "
496
+ .concat(white("npx witnet ".concat(cmd)), " [FLAGS] ")
497
+ .concat(white(subcmd), " ")
498
+ .concat(params ? green(params) + " " : "")
499
+ .concat(options && Object.keys(options).length > 0 ? "[OPTIONS]" : ""),
500
+ )
501
+ if (
502
+ (_c =
503
+ module === null || module === void 0
504
+ ? void 0
505
+ : module.router[subcmd]) === null || _c === void 0
506
+ ? void 0
507
+ : _c.hint
508
+ ) {
509
+ console.info("\nDESCRIPTION:")
510
+ console.info(" ".concat(module.router[subcmd].hint))
511
+ }
512
+ } else {
513
+ console.info(
514
+ " ".concat(
515
+ white("npx witnet ".concat(cmd)),
516
+ " [FLAGS] <SUBCOMMAND> ... [OPTIONS]",
517
+ ),
518
+ )
519
+ }
520
+ }
521
+ function showUsageOptions(options) {
522
+ options = Object.entries(options)
523
+ if (options.length > 0) {
524
+ console.info("\nOPTIONS:")
525
+ var maxLength_3 = options
526
+ .map((option) =>
527
+ option[1].param
528
+ ? option[1].param.length + option[0].length + 3
529
+ : option[0].length,
530
+ )
531
+ .reduce((prev, curr) => (curr > prev ? curr : prev))
532
+ options.forEach((option) => {
533
+ if (option[1].hint) {
534
+ var str = ""
535
+ .concat(option[0])
536
+ .concat(
537
+ option[1].param ? gray(" <".concat(option[1].param, ">")) : "",
538
+ )
539
+ console.info(
540
+ " ",
541
+ "--"
542
+ .concat(str)
543
+ .concat(" ".repeat(maxLength_3 - colorstrip(str).length)),
544
+ " ",
545
+ option[1].hint,
546
+ )
547
+ }
548
+ })
549
+ }
550
+ }
551
+ function showUsageSubcommand(cmd, subcmd, module) {
552
+ var _a, _b
553
+ showUsageHeadline(cmd, subcmd, module)
554
+ if (module === null || module === void 0 ? void 0 : module.flags)
555
+ showUsageFlags(module === null || module === void 0 ? void 0 : module.flags)
556
+ if (
557
+ (_a =
558
+ module === null || module === void 0 ? void 0 : module.router[subcmd]) ===
559
+ null || _a === void 0
560
+ ? void 0
561
+ : _a.options
562
+ )
563
+ showUsageOptions(
564
+ (_b = module.router[subcmd]) === null || _b === void 0
565
+ ? void 0
566
+ : _b.options,
567
+ )
568
+ if (module === null || module === void 0 ? void 0 : module.envars)
569
+ showUsageEnvars(
570
+ module === null || module === void 0 ? void 0 : module.envars,
571
+ )
572
+ }
573
+ function showVersion() {
574
+ console.info(
575
+ "".concat(
576
+ mcyan(
577
+ "Wit/Oracle Toolkit CLI v".concat(
578
+ require("../../package.json").version,
579
+ ),
580
+ ),
581
+ ),
582
+ )
583
+ }
584
+ function getWildcardsCountFromString(str) {
585
+ var maxArgsIndex = 0
586
+ if (str) {
587
+ var match = void 0
588
+ var regexp = /\\\d\\/g
589
+ while ((match = regexp.exec(str)) !== null) {
590
+ var argsIndex = Number.parseInt(match[0][1]) + 1
591
+ if (argsIndex > maxArgsIndex) maxArgsIndex = argsIndex
592
+ }
593
+ }
594
+ return maxArgsIndex
595
+ }
596
+ function isWildcard(str) {
597
+ return str.length == 3 && /\\\d\\/g.test(str)
598
+ }
599
+ function replaceWildcards(obj, args) {
600
+ if (args.length > 10) args = args.slice(0, 10)
601
+ if (obj && typeof obj === "string") {
602
+ for (var argIndex = 0; argIndex < args.length; argIndex++) {
603
+ var wildcard = "\\".concat(argIndex, "\\")
604
+ obj = obj.replaceAll(wildcard, args[argIndex])
605
+ }
606
+ } else if (obj && Array.isArray(obj)) {
607
+ obj = obj.map((value) =>
608
+ typeof value === "string" || Array.isArray(value)
609
+ ? replaceWildcards(value, args)
610
+ : value,
611
+ )
612
+ }
613
+ return obj
614
+ }
615
+ function spliceWildcard(obj, argIndex, argValue, argsCount) {
616
+ if (obj && typeof obj === "string") {
617
+ var wildcard = "\\".concat(argIndex, "\\")
618
+ obj = obj.replaceAll(wildcard, argValue)
619
+ for (var j = argIndex + 1; j < argsCount; j++) {
620
+ obj = obj.replaceAll("\\".concat(j, "\\"), "\\".concat(j - 1, "\\"))
621
+ }
622
+ } else if (obj && Array.isArray(obj)) {
623
+ obj = obj.map((value) =>
624
+ typeof value === "string" || Array.isArray(value)
625
+ ? spliceWildcard(value, argIndex, argValue, argsCount)
626
+ : value,
627
+ )
628
+ }
629
+ return obj
630
+ }
631
+ function toolkitRun(settings, args) {
632
+ return __awaiter(this, void 0, void 0, function () {
633
+ var cmd
634
+ return __generator(this, (_a) => {
635
+ cmd = "".concat(settings.paths.toolkitBinPath, " ").concat(args.join(" "))
636
+ return [
637
+ 2 /*return*/,
638
+ new Promise((resolve, reject) => {
639
+ exec(
640
+ cmd,
641
+ { maxBuffer: 1024 * 1024 * 10 },
642
+ (error, stdout, stderr) => {
643
+ if (error) {
644
+ reject(error)
645
+ }
646
+ if (stderr) {
647
+ reject(stderr)
648
+ }
649
+ resolve(stdout)
650
+ },
651
+ )
652
+ }),
653
+ ]
654
+ })
655
+ })
656
+ }
657
+ function toUpperCamelCase(str) {
658
+ return str
659
+ .replace(/\b(\w)/g, (match, capture) => capture.toUpperCase())
660
+ .replace(/\s+/g, "")
661
+ }
662
+ function toUtf8Array(str) {
663
+ var utf8 = []
664
+ for (var i = 0; i < str.length; i++) {
665
+ var charcode = str.charCodeAt(i)
666
+ if (charcode < 0x80) utf8.push(charcode)
667
+ else if (charcode < 0x800) {
668
+ utf8.push(0xc0 | (charcode >> 6), 0x80 | (charcode & 0x3f))
669
+ } else if (charcode < 0xd800 || charcode >= 0xe000) {
670
+ utf8.push(
671
+ 0xe0 | (charcode >> 12),
672
+ 0x80 | ((charcode >> 6) & 0x3f),
673
+ 0x80 | (charcode & 0x3f),
674
+ )
675
+ }
676
+ // surrogate pair
677
+ else {
678
+ i++
679
+ // UTF-16 encodes 0x10000-0x10FFFF by
680
+ // subtracting 0x10000 and splitting the
681
+ // 20 bits of 0x0-0xFFFFF into two halves
682
+ charcode =
683
+ 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff))
684
+ utf8.push(
685
+ 0xf0 | (charcode >> 18),
686
+ 0x80 | ((charcode >> 12) & 0x3f),
687
+ 0x80 | ((charcode >> 6) & 0x3f),
688
+ 0x80 | (charcode & 0x3f),
689
+ )
690
+ }
691
+ }
692
+ return utf8
693
+ }
694
+ function utf8ArrayToStr(array) {
695
+ var out, i, len, c
696
+ var char2, char3
697
+ out = ""
698
+ len = array.length
699
+ i = 0
700
+ while (i < len) {
701
+ c = array[i++]
702
+ switch (c >> 4) {
703
+ case 0:
704
+ case 1:
705
+ case 2:
706
+ case 3:
707
+ case 4:
708
+ case 5:
709
+ case 6:
710
+ case 7:
711
+ // 0xxxxxxx
712
+ out += String.fromCharCode(c)
713
+ break
714
+ case 12:
715
+ case 13:
716
+ // 110x xxxx 10xx xxxx
717
+ char2 = array[i++]
718
+ out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f))
719
+ break
720
+ case 14:
721
+ // 1110 xxxx 10xx xxxx 10xx xxxx
722
+ char2 = array[i++]
723
+ char3 = array[i++]
724
+ out += String.fromCharCode(
725
+ ((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0),
726
+ )
727
+ break
728
+ }
729
+ }
730
+ return out
731
+ }
732
+ function prompt(question) {
733
+ return __awaiter(this, void 0, void 0, function () {
734
+ var readlineInterface
735
+ return __generator(this, (_a) => {
736
+ readlineInterface = readline.createInterface({
737
+ input: process.stdin,
738
+ output: process.stdout,
739
+ })
740
+ return [
741
+ 2 /*return*/,
742
+ new Promise((resolve, _) => {
743
+ readlineInterface.question("".concat(question, " "), (response) => {
744
+ readlineInterface.close()
745
+ resolve(response.trim())
746
+ })
747
+ }),
748
+ ]
749
+ })
750
+ })
751
+ }
752
+ function prompter(promise) {
753
+ return __awaiter(this, void 0, void 0, function () {
754
+ var loading
755
+ return __generator(this, (_a) => {
756
+ loading = (() => {
757
+ var h = ["|", "/", "-", "\\"]
758
+ var i = 0
759
+ return setInterval(() => {
760
+ i = i > 3 ? 0 : i
761
+ process.stdout.write("\b\b".concat(h[i], " "))
762
+ i++
763
+ }, 50)
764
+ })()
765
+ return [
766
+ 2 /*return*/,
767
+ promise.then((result) => {
768
+ clearInterval(loading)
769
+ process.stdout.write("\b\b")
770
+ return result
771
+ }),
772
+ ]
773
+ })
774
+ })
775
+ }
776
+ function traceChecklists(checklists) {
777
+ if (checklists && Object.keys(checklists).length > 0) {
778
+ var headlines = __spreadArray(
779
+ ["NODES"],
780
+ __read(Object.keys(checklists).map((key) => ":".concat(key))),
781
+ false,
782
+ )
783
+ checklists = Object.values(checklists)
784
+ var urls = Object.keys(checklists[0])
785
+ var records = urls.map((url) => {
786
+ var errors = checklists.filter(
787
+ (checklist) => checklist[url] instanceof Error,
788
+ ).length
789
+ return __spreadArray(
790
+ [
791
+ errors === checklists.length
792
+ ? red(url)
793
+ : errors > 0
794
+ ? myellow(url)
795
+ : mcyan(url),
796
+ ],
797
+ __read(
798
+ checklists.map((checklist) =>
799
+ checklist[url] instanceof Error
800
+ ? red(checklist[url])
801
+ : checklist[url] === true
802
+ ? lcyan("Aye")
803
+ : cyan("Nay"),
804
+ ),
805
+ ),
806
+ false,
807
+ )
808
+ })
809
+ traceTable(records, {
810
+ headlines: headlines,
811
+ maxColumnWidth: 31,
812
+ })
813
+ }
814
+ }
815
+ function traceHeader(headline, color, indent) {
816
+ if (color === void 0) {
817
+ color = normal
818
+ }
819
+ if (indent === void 0) {
820
+ indent = ""
821
+ }
822
+ console.info(
823
+ ""
824
+ .concat(indent, "\u250C\u2500")
825
+ .concat("─".repeat(headline.length), "\u2500\u2510"),
826
+ )
827
+ console.info("".concat(indent, "\u2502 ").concat(color(headline), " \u2502"))
828
+ console.info(
829
+ ""
830
+ .concat(indent, "\u2514\u2500")
831
+ .concat("─".repeat(headline.length), "\u2500\u2518"),
832
+ )
833
+ }
834
+ function traceTable(records, options) {
835
+ var stringify = (data, humanizers, index) => {
836
+ var _a
837
+ return humanizers && humanizers[index]
838
+ ? humanizers[index](data).toString()
839
+ : (_a = data === null || data === void 0 ? void 0 : data.toString()) !==
840
+ null && _a !== void 0
841
+ ? _a
842
+ : ""
843
+ }
844
+ var max = (a, b) => (a > b ? a : b)
845
+ var reduceMax = (numbers) =>
846
+ numbers.reduce((curr, prev) => (prev > curr ? prev : curr), 0)
847
+ if (!options) options = {}
848
+ var indent =
849
+ (options === null || options === void 0 ? void 0 : options.indent) || ""
850
+ var numColumns = reduceMax(
851
+ records.map(
852
+ (record) =>
853
+ (record === null || record === void 0 ? void 0 : record.length) || 1,
854
+ ),
855
+ )
856
+ var maxColumnWidth =
857
+ (options === null || options === void 0
858
+ ? void 0
859
+ : options.maxColumnWidth) || 80
860
+ var table = transpose(records, numColumns)
861
+ options.widths =
862
+ (options === null || options === void 0 ? void 0 : options.widths) ||
863
+ table.map((column, index) => {
864
+ var maxWidth = reduceMax(
865
+ column.map(
866
+ (field) =>
867
+ colorstrip(
868
+ stringify(
869
+ field,
870
+ options === null || options === void 0
871
+ ? void 0
872
+ : options.humanizers,
873
+ index,
874
+ ),
875
+ ).length,
876
+ ),
877
+ )
878
+ if (
879
+ (options === null || options === void 0 ? void 0 : options.headlines) &&
880
+ options.headlines[index]
881
+ ) {
882
+ maxWidth = max(
883
+ maxWidth,
884
+ colorstrip(options.headlines[index].replaceAll(":", "")).length,
885
+ )
886
+ }
887
+ return Math.min(maxWidth, maxColumnWidth)
888
+ })
889
+ var headline = options.widths.map((maxWidth) => "─".repeat(maxWidth))
890
+ console.info(
891
+ ""
892
+ .concat(indent, "\u250C\u2500")
893
+ .concat(headline.join("─┬─"), "\u2500\u2510"),
894
+ )
895
+ if (options === null || options === void 0 ? void 0 : options.headlines) {
896
+ headline = options.widths.map((maxWidth, index) => {
897
+ var caption = options.headlines[index].replaceAll(":", "")
898
+ var captionLength = colorstrip(caption).length
899
+ return ""
900
+ .concat(white(caption))
901
+ .concat(" ".repeat(maxWidth - captionLength))
902
+ })
903
+ console.info(
904
+ "".concat(indent, "\u2502 ").concat(headline.join(" │ "), " \u2502"),
905
+ )
906
+ headline = options.widths.map((maxWidth) => "─".repeat(maxWidth))
907
+ console.info(
908
+ ""
909
+ .concat(indent, "\u251C\u2500")
910
+ .concat(headline.join("─┼─"), "\u2500\u2524"),
911
+ )
912
+ }
913
+ for (var i = 0; i < records.length; i++) {
914
+ var line = ""
915
+ for (var j = 0; j < numColumns; j++) {
916
+ var data = table[j][i]
917
+ var color = void 0
918
+ if (
919
+ (options === null || options === void 0 ? void 0 : options.colors) &&
920
+ options.colors[j]
921
+ ) {
922
+ color = options.colors[j]
923
+ } else {
924
+ color =
925
+ typeof data === "string"
926
+ ? green
927
+ : Number(data) === data && data % 1 !== 0 // is float number?
928
+ ? yellow
929
+ : (x) => x
930
+ }
931
+ data = stringify(
932
+ data,
933
+ options === null || options === void 0 ? void 0 : options.humanizers,
934
+ j,
935
+ )
936
+ if (colorstrip(data).length > maxColumnWidth) {
937
+ while (colorstrip(data).length > maxColumnWidth - 3) {
938
+ data = data.slice(0, -1)
939
+ }
940
+ data += "..."
941
+ }
942
+ var dataLength = colorstrip(data).length
943
+ if (
944
+ (options === null || options === void 0 ? void 0 : options.headlines) &&
945
+ options.headlines[j][0] === ":"
946
+ ) {
947
+ data = ""
948
+ .concat(color(data))
949
+ .concat(" ".repeat(options.widths[j] - dataLength))
950
+ } else {
951
+ data = ""
952
+ .concat(" ".repeat(options.widths[j] - dataLength))
953
+ .concat(color(data))
954
+ }
955
+ line += "\u2502 ".concat(data, " ")
956
+ }
957
+ console.info("".concat(indent).concat(line, "\u2502"))
958
+ }
959
+ headline = options.widths.map((maxWidth) => "─".repeat(maxWidth))
960
+ console.info(
961
+ ""
962
+ .concat(indent, "\u2514\u2500")
963
+ .concat(headline.join("─┴─"), "\u2500\u2518"),
964
+ )
965
+ }
966
+ function transpose(records, numColumns) {
967
+ var columns = []
968
+ var _loop_1 = (index) => {
969
+ columns.push(records.map((row) => row[index]))
970
+ }
971
+ for (var index = 0; index < numColumns; index++) {
972
+ _loop_1(index)
973
+ }
974
+ return columns
975
+ }
976
+ module.exports = {
977
+ colors: {
978
+ cyan: cyan,
979
+ gray: gray,
980
+ green: green,
981
+ magenta: magenta,
982
+ red: red,
983
+ white: white,
984
+ yellow: yellow,
985
+ normal: normal,
986
+ lcyan: lcyan,
987
+ lgray: lgray,
988
+ lgreen: lgreen,
989
+ lmagenta: lmagenta,
990
+ lyellow: lyellow,
991
+ mcyan: mcyan,
992
+ mgreen: mgreen,
993
+ mmagenta: mmagenta,
994
+ mred: mred,
995
+ myellow: myellow,
996
+ },
997
+ colorstrip: colorstrip,
998
+ commas: commas,
999
+ whole_wits: whole_wits,
1000
+ toFixedTrunc: toFixedTrunc,
1001
+ fromNanowits: fromNanowits,
1002
+ countLeaves: countLeaves,
1003
+ deleteExtraFlags: deleteExtraFlags,
1004
+ extractFromArgs: extractFromArgs,
1005
+ fromHexString: fromHexString,
1006
+ isHexString: isHexString,
1007
+ isHexStringOfLength: isHexStringOfLength,
1008
+ toHexString: toHexString,
1009
+ parseURL: parseURL,
1010
+ ipIsPrivateOrLocalhost: ipIsPrivateOrLocalhost,
1011
+ showUsage: showUsage,
1012
+ showUsageError: showUsageError,
1013
+ showUsageSubcommand: showUsageSubcommand,
1014
+ showVersion: showVersion,
1015
+ toolkitRun: toolkitRun,
1016
+ toUpperCamelCase: toUpperCamelCase,
1017
+ toUtf8Array: toUtf8Array,
1018
+ utf8ArrayToStr: utf8ArrayToStr,
1019
+ prompt: prompt,
1020
+ prompter: prompter,
1021
+ traceChecklists: traceChecklists,
1022
+ traceHeader: traceHeader,
1023
+ traceTable: traceTable,
1024
+ wildcards: {
1025
+ isWildcard: isWildcard,
1026
+ getWildcardsCountFromString: getWildcardsCountFromString,
1027
+ replaceWildcards: replaceWildcards,
1028
+ spliceWildcard: spliceWildcard,
1029
+ },
1030
+ }
1031
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvaGVscGVycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFRLElBQUEsSUFBSSxHQUFLLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBN0IsQ0FBOEI7QUFDMUMsSUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzFCLElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUVwQyxJQUFNLFVBQVUsR0FBRyxVQUFDLEdBQUcsSUFBSyxPQUFBLEdBQUcsQ0FBQyxPQUFPLENBQy9CLDZFQUE2RSxFQUFFLEVBQUUsQ0FDeEYsRUFGMkIsQ0FFM0IsQ0FBQztBQUVGLElBQU0sTUFBTSxHQUFHLFVBQUMsTUFBTTtJQUNsQixLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNwQyxJQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDNUIsQ0FBQyxDQUFDLFVBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBRTtRQUNyRCxDQUFDLENBQUMsVUFBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxjQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFBO0lBQ3JFLE9BQU8sTUFBTSxDQUFBO0FBQ2pCLENBQUMsQ0FBQztBQUVGLElBQU0sWUFBWSxHQUFHLFVBQUMsQ0FBQyxJQUFLLE9BQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsU0FBQSxFQUFFLEVBQUksQ0FBQyxDQUFBLENBQUMsRUFBdkIs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QUFVLFlBQUE7SUFBRSxZQUFZLGNBQUE7SUFBRSxZQUFZLGNBQUE7SUFDMUQsV0FBVyxhQUFBO0lBQ1gsZ0JBQWdCLGtCQUFBO0lBQUUsZUFBZSxpQkFBQTtJQUNqQyxhQUFhLGVBQUE7SUFBRSxXQUFXLGFBQUE7SUFBRSxtQkFBbUIscUJBQUE7SUFBRSxXQUFXLGFBQUE7SUFDNUQsUUFBUSxVQUFBO0lBQUUsc0JBQXNCLHdCQUFBO0lBQ2hDLFNBQVMsV0FBQTtJQUFFLGNBQWMsZ0JBQUE7SUFBRSxtQkFBbUIscUJBQUE7SUFBRSxXQUFXLGFBQUE7SUFDM0QsVUFBVSxZQUFBO0lBQ1YsZ0JBQWdCLGtCQUFBO0lBQUUsV0FBVyxhQUFBO0lBQUUsY0FBYyxnQkFBQTtJQUM3QyxNQUFNLFFBQUE7SUFBRSxRQUFRLFVBQUE7SUFDaEIsZUFBZSxpQkFBQTtJQUFFLFdBQVcsYUFBQTtJQUFFLFVBQVUsWUFBQTtJQUN4QyxTQUFTLEVBQUU7UUFDUCxVQUFVLFlBQUE7UUFDViwyQkFBMkIsNkJBQUE7UUFDM0IsZ0JBQWdCLGtCQUFBO1FBQ2hCLGNBQWMsZ0JBQUE7S0FDakI7Q0FDSixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgeyBleGVjIH0gPSByZXF1aXJlKFwiY2hpbGRfcHJvY2Vzc1wiKTtcbmNvbnN0IG5ldCA9IHJlcXVpcmUoXCJuZXRcIilcbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKVxuXG5jb25zdCBjb2xvcnN0cmlwID0gKHN0cikgPT4gc3RyLnJlcGxhY2UoXG4gICAgICAgIC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csICcnXG4pO1xuXG5jb25zdCBjb21tYXMgPSAobnVtYmVyKSA9PiB7XG4gICAgcGFydHMgPSBudW1iZXIudG9TdHJpbmcoKS5zcGxpdCgnLicpXG4gICAgY29uc3QgcmVzdWx0ID0gcGFydHMubGVuZ3RoIDw9IDFcbiAgICAgICAgPyBgJHtwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIixcIil9YFxuICAgICAgICA6IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX0uJHtwYXJ0c1sxXX1gXG4gICAgcmV0dXJuIHJlc3VsdCBcbn07XG5cbmNvbnN0IGZyb21OYW5vd2l0cyA9ICh4KSA9PiBNYXRoLmZsb29yKHggLyAxMCAqKiA5KVxuXG5mdW5jdGlvbiB0b0ZpeGVkVHJ1bmMoeCwgbikge1xuICAgIGNvbnN0IHYgPSAodHlwZW9mIHggPT09ICdzdHJpbmcnID8geCA6IHgudG9TdHJpbmcoKSkuc3BsaXQoJy4nKTtcbiAgICBpZiAobiA8PSAwKSByZXR1cm4gdlswXTtcbiAgICBsZXQgZiA9IHZbMV0gfHwgJyc7XG4gICAgaWYgKGYubGVuZ3RoID4gbikgcmV0dXJuIGAke3ZbMF19LiR7Zi5zdWJzdHIoMCxuKX1gO1xuICAgIHdoaWxlIChmLmxlbmd0aCA8IG4pIGYgKz0gJzAnO1xuICAgIHJldHVybiBgJHt2WzBdfS4ke2Z9YFxufTtcblxuY29uc3Qgd2hvbGVfd2l0cyA9IChudW1iZXIsIGRpZ2l0cykgPT4ge1xuICAgIGNvbnN0IGxvb2t1cCA9IFtcbiAgICAgICAgeyB2YWx1ZTogMSwgc3ltYm9sOiBcIiBuV2l0c1wiIH0sXG4gICAgICAgIHsgdmFsdWU6IDFlMywgc3ltYm9sOiBcIiDOvFdpdHNcIiB9LFxuICAgICAgICB7IHZhbHVlOiAxZTYsIHN5bWJvbDogXCIgbVdpdHNcIiB9LFxuICAgICAgICB7IHZhbHVlOiAxZTksIHN5bWJvbDogXCIgIFdpdHNcIiB9LFxuICAgICAgICB7IHZhbHVlOiAxZTEyLCBzeW1ib2w6IFwiIEtXaXRzXCIgfSxcbiAgICAgICAgeyB2YWx1ZTogMWUxNSwgc3ltYm9sOiBcIiBNV2l0c1wiIH0sXG4gICAgXTtcbiAgICBjb25zdCByZWdleHAgPSAvXFwuMCskfCg/PD1cXC5bMC05XSkwKyQvO1xuICAgIGNvbnN0IGl0ZW0gPSBsb29rdXAuZmluZExhc3QoaXRlbSA9PiBudW1iZXIgPj0gaXRlbS52YWx1ZSk7XG4gICAgcmV0dXJuIGl0ZW0gPyB0b0ZpeGVkVHJ1bmMoY29tbWFzKG51bWJlciAvIGl0ZW0udmFsdWUpLCBkaWdpdHMpLi8qcmVwbGFjZShyZWdleHAsIFwiXCIpKi9jb25jYXQoaXRlbS5zeW1ib2wpIDogXCIobm8gV2l0cylcIjtcbn07XG5cbmNvbnN0IGxjeWFuID0gKHN0cikgPT4gYFxceDFiWzE7OTZtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBsZ3JheSA9IChzdHIpID0+IGBcXHgxYlsxOzkwbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbGdyZWVuID0gKHN0cikgPT4gYFxceDFiWzE7OTJtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBsbWFnZW50YSA9IChzdHIpID0+IGBcXHgxYlsxOzk1bSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbHllbGxvdyA9IChzdHIpID0+IGBcXHgxYlsxOzkzbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgbWN5YW4gPSAoc3RyKSA9PiBgXFx4MWJbOTZtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtZ3JlZW4gPSAoc3RyKSA9PiBgXFx4MWJbOTJtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBtbWFnZW50YSA9IChzdHIpID0+IGBcXHgxYls5NW0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IG1yZWQgPSAoc3RyKSA9PiBgXFx4MWJbOTFtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBteWVsbG93ID0gKHN0cikgPT4gYFxceDFiWzkzbSR7c3RyfVxceDFiWzBtYFxuY29uc3QgY3lhbiA9IChzdHIpID0+IGBcXHgxYlszNm0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IGdyYXkgPSAoc3RyKSA9PiBgXFx4MWJbOTBtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBncmVlbiA9IChzdHIpID0+IGBcXHgxYlszMm0ke3N0cn1cXHgxYlswbWBcbmNvbnN0IG1hZ2VudGEgPSAoc3RyKSA9PiBgXFx4MWJbMzVtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCBub3JtYWwgPSAoc3RyKSA9PiBgXFx4MWJbOThtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCByZWQgPSAoc3RyKSA9PiBgXFx4MWJbMzFtJHtzdHJ9XFx4MWJbMG1gXG5jb25zdCB3aGl0ZSA9IChzdHIpID0+IGBcXHgxYlsxOzk4bSR7c3RyfVxceDFiWzBtYFxuY29uc3QgeWVsbG93ID0gKHN0cikgPT4gYFxceDFiWzMzbSR7c3RyfVxceDFiWzBtYFxuXG5mdW5jdGlvbiBjb3VudExlYXZlcyh0LCBvYmopIHtcbiAgICBpZiAoIW9iaikgcmV0dXJuIDA7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIHQpIHJldHVybiAxO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGNvdW50TGVhdmVzKHQsIGl0ZW0pLCAwKVxuICAgIGVsc2UgcmV0dXJuIE9iamVjdC52YWx1ZXMob2JqKS5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgY291bnRMZWF2ZXModCwgaXRlbSksIDApO1xufVxuXG5mdW5jdGlvbiBkZWxldGVFeHRyYUZsYWdzKGFyZ3MpIHtcbiAgICByZXR1cm4gYXJncy5maWx0ZXIoYXJnID0+ICFhcmcuc3RhcnRzV2l0aCgnLS0nKSlcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEZyb21BcmdzKGFyZ3MsIGZsYWdzKSB7XG4gICAgY29uc3QgY3VyYXRlZCA9IHt9XG4gICAgaWYgKGFyZ3MgJiYgZmxhZ3MpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MpLmZvckVhY2goZmxhZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBmbGFnSW5kZXggPSBhcmdzLmluZGV4T2YoYC0tJHtmbGFnfWApXG4gICAgICAgICAgICBpZiAoZmxhZ0luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoZmxhZ3NbZmxhZ10ucGFyYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyYXRlZFtmbGFnXSA9IGFyZ3NbZmxhZ0luZGV4XVxuICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3NbZmxhZ0luZGV4ICsgMV0gfHwgYXJnc1tmbGFnSW5kZXggKyAxXS5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBgTWlzc2luZyByZXF1aXJlZCBwYXJhbWV0ZXIgZm9yIC0tJHtmbGFnfWBcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cmF0ZWRbZmxhZ10gPSBhcmdzW2ZsYWdJbmRleCArIDFdXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnNwbGljZShmbGFnSW5kZXgsIDIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJhdGVkW2ZsYWddID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnNwbGljZShmbGFnSW5kZXgsIDEpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gW2FyZ3MsIGN1cmF0ZWQsXVxufVxuXG5mdW5jdGlvbiBmcm9tSGV4U3RyaW5nKGhleFN0cmluZykge1xuICAgIGlmIChoZXhTdHJpbmcuc3RhcnRzV2l0aChcIjB4XCIpKSBoZXhTdHJpbmcgPSBoZXhTdHJpbmcuc2xpY2UoMilcbiAgICByZXR1cm4gVWludDhBcnJheS5mcm9tKGhleFN0cmluZy5tYXRjaCgvLnsxLDJ9L2cpLm1hcCgoYnl0ZSkgPT4gcGFyc2VJbnQoYnl0ZSwgMTYpKSlcbn1cblxuZnVuY3Rpb24gaXBJc1ByaXZhdGVPckxvY2FsaG9zdChpcCkge1xuICAgIGlmIChpcC5zdWJzdHJpbmcoMCwgNykgPT09IFwiOjpmZmZmOlwiKVxuICAgICAgICBpcCA9IGlwLnN1YnN0cmluZyg3KTtcblxuICAgIGlmIChuZXQuaXNJUHY0KGlwKSkge1xuICAgICAgICAvLyBjaGVjayBsb2NhbGhvc3RcbiAgICAgICAgaWYgKGlwID09PSAnMTI3LjAuMC4xJylcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgIC8vICAgICAgICAgMTAuMC4wLjAgLSAxMC4yNTUuMjU1LjI1NSAgICAgICAgfHwgICAxNzIuMTYuMC4wIC0gMTcyLjMxLjI1NS4yNTUgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICAgIDE5Mi4xNjguMC4wIC0gMTkyLjE2OC4yNTUuMjU1XG4gICAgICAgIHJldHVybiAvXigxMClcXC4oLiopXFwuKC4qKVxcLiguKikkLy50ZXN0KGlwKSB8fCAvXigxNzIpXFwuKDFbNi05XXwyWzAtOV18M1swLTFdKVxcLiguKilcXC4oLiopJC8udGVzdChpcCkgfHwgL14oMTkyKVxcLigxNjgpXFwuKC4qKVxcLiguKikkLy50ZXN0KGlwKVxuICAgIH1cblxuICAgIC8vIGVsc2U6IGlwIGlzIElQdjZcbiAgICBjb25zdCBmaXJzdFdvcmQgPSBpcC5zcGxpdChcIjpcIikuZmluZChlbCA9PiAhIWVsKTsgLy9nZXQgZmlyc3Qgbm90IGVtcHR5IHdvcmRcblxuICAgIC8vIGVxdWl2YWxlbnQgb2YgMTI3LjAuMC4xIGluIElQdjZcbiAgICBpZiAoaXAgPT09IFwiOjoxXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgLy8gVGhlIG9yaWdpbmFsIElQdjYgU2l0ZSBMb2NhbCBhZGRyZXNzZXMgKGZlYzA6Oi8xMCkgYXJlIGRlcHJlY2F0ZWQuIFJhbmdlOiBmZWMwIC0gZmVmZlxuICAgIGVsc2UgaWYgKC9eZmVbYy1mXVswLWZdJC8udGVzdChmaXJzdFdvcmQpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIFRoZXNlIGRheXMgVW5pcXVlIExvY2FsIEFkZHJlc3NlcyAoVUxBKSBhcmUgdXNlZCBpbiBwbGFjZSBvZiBTaXRlIExvY2FsLlxuICAgIC8vIFJhbmdlOiBmYzAwIC0gZmNmZlxuICAgIGVsc2UgaWYgKC9eZmNbMC1mXXsyfSQvLnRlc3QoZmlyc3RXb3JkKSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBSYW5nZTogZmQwMCAtIGZjZmZcbiAgICBlbHNlIGlmICgvXmZkWzAtZl17Mn0kLy50ZXN0KGZpcnN0V29yZCkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgLy8gTGluayBsb2NhbCBhZGRyZXNzZXMgKHByZWZpeGVkIHdpdGggZmU4MCkgYXJlIG5vdCByb3V0YWJsZVxuICAgIGVsc2UgaWYgKGZpcnN0V29yZCA9PT0gXCJmZTgwXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgLy8gRGlzY2FyZCBQcmVmaXhcbiAgICBlbHNlIGlmIChmaXJzdFdvcmQgPT09IFwiMTAwXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgLy8gQW55IG90aGVyIElQIGFkZHJlc3MgaXMgbm90IFVuaXF1ZSBMb2NhbCBBZGRyZXNzIChVTEEpXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0hleFN0cmluZ09mTGVuZ3RoKHN0ciwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIChpc0hleFN0cmluZyhzdHIpXG4gICAgICAgICYmIChcbiAgICAgICAgICAgIChzdHIuc3RhcnNXaXRoKCcweCcpICYmIHN0ci5zbGljZSgyKS5sZW5ndGggPT09IGxlbmd0aCAqIDIpXG4gICAgICAgICAgICB8fCBzdHIubGVuZ3RoID09PSBsZW5ndGggKiAyXG4gICAgICAgIClcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc0hleFN0cmluZyhzdHIpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJ1xuICAgICAgICAmJiAoXG4gICAgICAgICAgICAoc3RyLnN0YXJ0c1dpdGgoXCIweFwiKSAmJiAvXlthLWZBLUYwLTldKyQvaS50ZXN0KHN0ci5zbGljZSgyKSkpXG4gICAgICAgICAgICB8fCAvXlthLWZBLUYwLTldKyQvaS50ZXN0KHN0cilcbiAgICAgICAgKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHRvSGV4U3RyaW5nKGJ1ZmZlcikge1xuICAgIHJldHVybiBcIjB4XCIgKyBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYnVmZmVyLCB4ID0+ICgnMDAnICsgeC50b1N0cmluZygxNikpLnNsaWNlKC0yKSlcbiAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIC5tYXRjaCgvW2EtZkEtRjAtOV17Mn0vZylcbiAgICAgICAgLmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwodXJsKVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcGFyc2VkVXJsLnByb3RvY29sICsgXCIvL1wiLCBcbiAgICAgICAgICAgIHBhcnNlZFVybC5ob3N0LCBcbiAgICAgICAgICAgIHBhcnNlZFVybC5wYXRobmFtZS5zbGljZSgxKSwgXG4gICAgICAgICAgICBwYXJzZWRVcmwuc2VhcmNoLnNsaWNlKDEpXG4gICAgICAgIF1cbiAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBVUkwgd2FzIHByb3ZpZGVkOiAke3VybH1gKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc2hvd1VzYWdlKGNtZCwgbW9kdWxlKSB7XG4gICAgc2hvd1VzYWdlSGVhZGxpbmUoY21kKVxuICAgIGlmIChtb2R1bGU/LmZsYWdzKSBzaG93VXNhZ2VGbGFncyhtb2R1bGUuZmxhZ3MpXG4gICAgaWYgKG1vZHVsZT8ucm91dGVyKSBzaG93VXNhZ2VSb3V0ZXIobW9kdWxlLnJvdXRlcilcbiAgICBpZiAobW9kdWxlPy5lbnZhcnMpIHNob3dVc2FnZUVudmFycyhtb2R1bGUuZW52YXJzKVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VSb3V0ZXIocm91dGVyKSB7XG4gICAgY29uc3QgY21kcyA9IE9iamVjdC5lbnRyaWVzKHJvdXRlcilcbiAgICBpZiAoY21kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuU1VCQ09NTUFORFM6YClcbiAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gTWF0aC5tYXgoLi4uY21kcy5tYXAoKFtjbWRdKSA9PiBjbWQubGVuZ3RoKSlcbiAgICAgICAgY21kcy5mb3JFYWNoKGNtZCA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgJHtjbWRbMF19JHtcIiBcIi5yZXBlYXQobWF4TGVuZ3RoIC0gY21kWzBdLmxlbmd0aCl9YCwgXCIgIFwiLCBjbWRbMV0uaGludClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZUVycm9yKGNtZCwgc3ViY21kLCBtb2R1bGUsIGVycm9yKSB7XG4gICAgc2hvd1VzYWdlU3ViY29tbWFuZChjbWQsIHN1YmNtZCwgbW9kdWxlLCBlcnJvcikgXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuRVJST1I6YClcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcj8uc3RhY2s/LnNwbGl0KCdcXG4nKVswXSB8fCBlcnJvcilcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZUVudmFycyhlbnZhcnMpIHtcbiAgICBlbnZhcnMgPSBPYmplY3QuZW50cmllcyhlbnZhcnMpXG4gICAgaWYgKGVudmFycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuRU5WQVJTOmApXG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5tYXgoLi4uZW52YXJzLm1hcCgoW2VudmFyXSkgPT4gZW52YXIubGVuZ3RoKSlcbiAgICAgICAgZW52YXJzLmZvckVhY2goKFtlbnZhciwgaGludF0pID0+IHtcbiAgICAgICAgICAgIGlmIChlbnZhci50b1VwcGVyQ2FzZSgpLmluZGV4T2YoXCJLRVlcIikgPCAwICYmIHByb2Nlc3MuZW52W2VudmFyXSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIiAgXCIsIGAke3llbGxvdyhlbnZhci50b1VwcGVyQ2FzZSgpKX0ke1wiIFwiLnJlcGVhdChtYXhXaWR0aCAtIGVudmFyLmxlbmd0aCl9YCwgYCA9PiBTZXR0bGVkIHRvIFwiJHtteWVsbG93KHByb2Nlc3MuZW52W2VudmFyXSl9XCJgKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgJHt5ZWxsb3coZW52YXIudG9VcHBlckNhc2UoKSl9JHtcIiBcIi5yZXBlYXQobWF4V2lkdGggLSBlbnZhci5sZW5ndGgpfWAsIGAgJHtoaW50fWApXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VGbGFncyhmbGFncykge1xuICAgIGZsYWdzID0gT2JqZWN0LmVudHJpZXMoZmxhZ3MpXG4gICAgaWYgKGZsYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBcXG5GTEFHUzpgKVxuICAgICAgICBjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1heCguLi5mbGFncy5tYXAoKFtrZXksIHsgcGFyYW0gfV0pID0+IHBhcmFtID8ga2V5Lmxlbmd0aCArIHBhcmFtLmxlbmd0aCArIDMgOiBrZXkubGVuZ3RoKSlcbiAgICAgICAgZmxhZ3MuZm9yRWFjaChmbGFnID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0ciA9IGAke2ZsYWdbMF19JHtmbGFnWzFdLnBhcmFtID8gZ3JheShgIDwke2ZsYWdbMV0ucGFyYW19PmApIDogXCJcIn1gXG4gICAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgLS0ke3N0cn0ke1wiIFwiLnJlcGVhdChtYXhMZW5ndGggLSBjb2xvcnN0cmlwKHN0cikubGVuZ3RoKX1gLCBcIiAgXCIsIGZsYWdbMV0uaGludClcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZUhlYWRsaW5lKGNtZCwgc3ViY21kLCBtb2R1bGUpIHtcbiAgICBjb25zb2xlLmluZm8oXCJVU0FHRTpcIilcbiAgICBpZiAoc3ViY21kKSB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBtb2R1bGUucm91dGVyW3N1YmNtZF0/LnBhcmFtc1xuICAgICAgICBjb25zdCBvcHRpb25zID0gbW9kdWxlLnJvdXRlcltzdWJjbWRdPy5vcHRpb25zXG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbmFsaXplID0gKHN0cikgPT4gc3RyLmVuZHNXaXRoKCcgLi4uXScpID8gYFs8JHtzdHIuc2xpY2UoMSwgLTUpfT4gLi4uXWAgOiAoXG4gICAgICAgICAgICAgICAgc3RyWzBdID09PSAnWycgPyBgWzwke3N0ci5zbGljZSgxLCAtMSl9Pl1gIDogYDwke3N0cn0+YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5tYXAocGFyYW0gPT4gb3B0aW9uYWxpemUocGFyYW0pKS5qb2luKCcgJykgKyBcIiBcIlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBvcHRpb25hbGl6ZShwYXJhbXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5pbmZvKGAgICAke3doaXRlKGBucHggd2l0bmV0ICR7Y21kfWApfSBbRkxBR1NdICR7d2hpdGUoc3ViY21kKX0gJHtwYXJhbXMgPyBncmVlbihwYXJhbXMpICsgXCIgXCIgOiBcIlwifSR7b3B0aW9ucyAmJiBPYmplY3Qua2V5cyhvcHRpb25zKS5sZW5ndGggPiAwID8gXCJbT1BUSU9OU11cIiA6IFwiXCJ9YClcbiAgICAgICAgaWYgKG1vZHVsZT8ucm91dGVyW3N1YmNtZF0/LmhpbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgXFxuREVTQ1JJUFRJT046YClcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgICAgJHttb2R1bGUucm91dGVyW3N1YmNtZF0uaGludH1gKVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGAgICAke3doaXRlKGBucHggd2l0bmV0ICR7Y21kfWApfSBbRkxBR1NdIDxTVUJDT01NQU5EPiAuLi4gW09QVElPTlNdYClcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNob3dVc2FnZU9wdGlvbnMob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBcXG5PUFRJT05TOmApXG4gICAgICAgIGNvbnN0IG1heExlbmd0aCA9IG9wdGlvbnNcbiAgICAgICAgICAgIC5tYXAob3B0aW9uID0+IG9wdGlvblsxXS5wYXJhbSA/IG9wdGlvblsxXS5wYXJhbS5sZW5ndGggKyBvcHRpb25bMF0ubGVuZ3RoICsgMyA6IG9wdGlvblswXS5sZW5ndGgpXG4gICAgICAgICAgICAucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBjdXJyID4gcHJldiA/IGN1cnIgOiBwcmV2KTtcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9uWzFdLmhpbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHIgPSBgJHtvcHRpb25bMF19JHtvcHRpb25bMV0ucGFyYW0gPyBncmF5KGAgPCR7b3B0aW9uWzFdLnBhcmFtfT5gKSA6IFwiXCJ9YFxuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIiAgXCIsIGAtLSR7c3RyfSR7XCIgXCIucmVwZWF0KG1heExlbmd0aCAtIGNvbG9yc3RyaXAoc3RyKS5sZW5ndGgpfWAsIFwiICBcIiwgb3B0aW9uWzFdLmhpbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiBzaG93VXNhZ2VTdWJjb21tYW5kKGNtZCwgc3ViY21kLCBtb2R1bGUpIHtcbiAgICBzaG93VXNhZ2VIZWFkbGluZShjbWQsIHN1YmNtZCwgbW9kdWxlKVxuICAgIGlmIChtb2R1bGU/LmZsYWdzKSBzaG93VXNhZ2VGbGFncyhtb2R1bGU/LmZsYWdzKVxuICAgIGlmIChtb2R1bGU/LnJvdXRlcltzdWJjbWRdPy5vcHRpb25zKSBzaG93VXNhZ2VPcHRpb25zKG1vZHVsZS5yb3V0ZXJbc3ViY21kXT8ub3B0aW9ucylcbiAgICBpZiAobW9kdWxlPy5lbnZhcnMpIHNob3dVc2FnZUVudmFycyhtb2R1bGU/LmVudmFycylcbn1cblxuZnVuY3Rpb24gc2hvd1ZlcnNpb24oKSB7XG4gICAgY29uc29sZS5pbmZvKGAke21jeWFuKGBXaXQvT3JhY2xlIFRvb2xraXQgQ0xJIHYke3JlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIikudmVyc2lvbn1gKX1gKVxufVxuXG5mdW5jdGlvbiBnZXRXaWxkY2FyZHNDb3VudEZyb21TdHJpbmcoc3RyKSB7XG4gICAgbGV0IG1heEFyZ3NJbmRleCA9IDBcbiAgICBpZiAoc3RyKSB7XG4gICAgICAgIGxldCBtYXRjaFxuICAgICAgICBjb25zdCByZWdleHAgPSAvXFxcXFxcZFxcXFwvZ1xuICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBhcmdzSW5kZXggPSBwYXJzZUludChtYXRjaFswXVsxXSkgKyAxXG4gICAgICAgICAgICBpZiAoYXJnc0luZGV4ID4gbWF4QXJnc0luZGV4KSBtYXhBcmdzSW5kZXggPSBhcmdzSW5kZXhcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF4QXJnc0luZGV4XG59XG5cblxuZnVuY3Rpb24gaXNXaWxkY2FyZChzdHIpIHtcbiAgICByZXR1cm4gc3RyLmxlbmd0aCA9PSAzICYmIC9cXFxcXFxkXFxcXC9nLnRlc3Qoc3RyKVxufVxuXG5mdW5jdGlvbiByZXBsYWNlV2lsZGNhcmRzKG9iaiwgYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDEwKSBhcmdzID0gYXJncy5zbGljZSgwLCAxMCk7XG4gICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGZvciAobGV0IGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBhcmdzLmxlbmd0aDsgYXJnSW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3Qgd2lsZGNhcmQgPSBgXFxcXCR7YXJnSW5kZXh9XFxcXGBcbiAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlQWxsKHdpbGRjYXJkLCBhcmdzW2FyZ0luZGV4XSlcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2JqICYmIEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICBvYmogPSBvYmoubWFwKHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKVxuICAgICAgICAgICAgPyByZXBsYWNlV2lsZGNhcmRzKHZhbHVlLCBhcmdzKVxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICApXG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIHNwbGljZVdpbGRjYXJkKG9iaiwgYXJnSW5kZXgsIGFyZ1ZhbHVlLCBhcmdzQ291bnQpIHtcbiAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY29uc3Qgd2lsZGNhcmQgPSBgXFxcXCR7YXJnSW5kZXh9XFxcXGBcbiAgICAgICAgb2JqID0gb2JqLnJlcGxhY2VBbGwod2lsZGNhcmQsIGFyZ1ZhbHVlKVxuICAgICAgICBmb3IgKGxldCBqID0gYXJnSW5kZXggKyAxOyBqIDwgYXJnc0NvdW50OyBqKyspIHtcbiAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlQWxsKGBcXFxcJHtqfVxcXFxgLCBgXFxcXCR7aiAtIDF9XFxcXGApXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9iaiAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgb2JqID0gb2JqLm1hcCh2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICAgID8gc3BsaWNlV2lsZGNhcmQodmFsdWUsIGFyZ0luZGV4LCBhcmdWYWx1ZSwgYXJnc0NvdW50KVxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICApXG4gICAgfVxuICAgIHJldHVybiBvYmo7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRvb2xraXRSdW4oc2V0dGluZ3MsIGFyZ3MpIHtcbiAgICBjb25zdCBjbWQgPSBgJHtzZXR0aW5ncy5wYXRocy50b29sa2l0QmluUGF0aH0gJHthcmdzLmpvaW4oJyAnKX1gXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZXhlYyhjbWQsIHsgbWF4QnVmZmVyOiAxMDI0ICogMTAyNCAqIDEwIH0sIChlcnJvciwgc3Rkb3V0LCBzdGRlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGRlcnIpIHtcbiAgICAgICAgICAgICAgICByZWplY3Qoc3RkZXJyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShzdGRvdXQpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuZnVuY3Rpb24gdG9VcHBlckNhbWVsQ2FzZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1xcYihcXHcpL2csIGZ1bmN0aW9uIChtYXRjaCwgY2FwdHVyZSkge1xuICAgICAgICByZXR1cm4gY2FwdHVyZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0pLnJlcGxhY2UoL1xccysvZywgJycpO1xufVxuXG5mdW5jdGlvbiB0b1V0ZjhBcnJheShzdHIpIHtcbiAgICBjb25zdCB1dGY4ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhcmNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGNoYXJjb2RlIDwgMHg4MCkgdXRmOC5wdXNoKGNoYXJjb2RlKTtcbiAgICAgICAgZWxzZSBpZiAoY2hhcmNvZGUgPCAweDgwMCkge1xuICAgICAgICAgICAgdXRmOC5wdXNoKDB4YzAgfCAoY2hhcmNvZGUgPj4gNiksXG4gICAgICAgICAgICAgICAgMHg4MCB8IChjaGFyY29kZSAmIDB4M2YpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFyY29kZSA8IDB4ZDgwMCB8fCBjaGFyY29kZSA+PSAweGUwMDApIHtcbiAgICAgICAgICAgIHV0ZjgucHVzaCgweGUwIHwgKGNoYXJjb2RlID4+IDEyKSxcbiAgICAgICAgICAgICAgICAweDgwIHwgKChjaGFyY29kZSA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc3Vycm9nYXRlIHBhaXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAvLyBVVEYtMTYgZW5jb2RlcyAweDEwMDAwLTB4MTBGRkZGIGJ5XG4gICAgICAgICAgICAvLyBzdWJ0cmFjdGluZyAweDEwMDAwIGFuZCBzcGxpdHRpbmcgdGhlXG4gICAgICAgICAgICAvLyAyMCBiaXRzIG9mIDB4MC0weEZGRkZGIGludG8gdHdvIGhhbHZlc1xuICAgICAgICAgICAgY2hhcmNvZGUgPSAweDEwMDAwICsgKCgoY2hhcmNvZGUgJiAweDNmZikgPDwgMTApXG4gICAgICAgICAgICAgICAgfCAoc3RyLmNoYXJDb2RlQXQoaSkgJiAweDNmZikpO1xuICAgICAgICAgICAgdXRmOC5wdXNoKDB4ZjAgfCAoY2hhcmNvZGUgPj4gMTgpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlID4+IDEyKSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgMHg4MCB8IChjaGFyY29kZSAmIDB4M2YpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXRmODtcbn1cblxuZnVuY3Rpb24gdXRmOEFycmF5VG9TdHIoYXJyYXkpIHtcbiAgICBsZXQgb3V0LCBpLCBsZW4sIGM7XG4gICAgbGV0IGNoYXIyLCBjaGFyMztcblxuICAgIG91dCA9IFwiXCI7XG4gICAgbGVuID0gYXJyYXkubGVuZ3RoO1xuICAgIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIGMgPSBhcnJheVtpKytdO1xuICAgICAgICBzd2l0Y2ggKGMgPj4gNCkge1xuICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IGNhc2UgMjogY2FzZSAzOiBjYXNlIDQ6IGNhc2UgNTogY2FzZSA2OiBjYXNlIDc6XG4gICAgICAgICAgICAgICAgLy8gMHh4eHh4eHhcbiAgICAgICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTI6IGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgLy8gMTEweCB4eHh4ICAgMTB4eCB4eHh4XG4gICAgICAgICAgICAgICAgY2hhcjIgPSBhcnJheVtpKytdO1xuICAgICAgICAgICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDB4MUYpIDw8IDYpIHwgKGNoYXIyICYgMHgzRikpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICAvLyAxMTEwIHh4eHggIDEweHggeHh4eCAgMTB4eCB4eHh4XG4gICAgICAgICAgICAgICAgY2hhcjIgPSBhcnJheVtpKytdO1xuICAgICAgICAgICAgICAgIGNoYXIzID0gYXJyYXlbaSsrXTtcbiAgICAgICAgICAgICAgICBvdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAweDBGKSA8PCAxMikgfFxuICAgICAgICAgICAgICAgICAgICAoKGNoYXIyICYgMHgzRikgPDwgNikgfFxuICAgICAgICAgICAgICAgICAgICAoKGNoYXIzICYgMHgzRikgPDwgMCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByb21wdCAocXVlc3Rpb24pIHtcbiAgICBjb25zdCByZWFkbGluZUludGVyZmFjZSA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XG4gICAgICAgIGlucHV0OiBwcm9jZXNzLnN0ZGluLFxuICAgICAgICBvdXRwdXQ6IHByb2Nlc3Muc3Rkb3V0XG4gICAgfSlcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIF8pID0+IHtcbiAgICAgICAgcmVhZGxpbmVJbnRlcmZhY2UucXVlc3Rpb24oYCR7cXVlc3Rpb259IGAsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgcmVhZGxpbmVJbnRlcmZhY2UuY2xvc2UoKVxuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS50cmltKCkpXG4gICAgICAgIH0pXG4gICAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJvbXB0ZXIocHJvbWlzZSkge1xuICAgIGNvbnN0IGxvYWRpbmcgPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IGggPSBbJ3wnLCAnLycsICctJywgJ1xcXFwnXTtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaSA9IChpID4gMykgPyAwIDogaTsgIFxuICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcYlxcYiR7aFtpXX0gYClcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfSwgNTApO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgLnRoZW4ocmVzdWx0ID0+IHsgXG4gICAgICAgICAgICBjbGVhckludGVydmFsKGxvYWRpbmcpOyBcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXGJcXGInKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9KVxufVxuXG5mdW5jdGlvbiB0cmFjZUNoZWNrbGlzdHMoY2hlY2tsaXN0cykge1xuICAgIGlmIChjaGVja2xpc3RzICYmIE9iamVjdC5rZXlzKGNoZWNrbGlzdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaGVhZGxpbmVzID0gW1wiTk9ERVNcIiwgLi4uT2JqZWN0LmtleXMoY2hlY2tsaXN0cykubWFwKGtleSA9PiBgOiR7a2V5fWApLCBdXG4gICAgICAgIGNoZWNrbGlzdHMgPSBPYmplY3QudmFsdWVzKGNoZWNrbGlzdHMpXG4gICAgICAgIGNvbnN0IHVybHMgPSBPYmplY3Qua2V5cyhjaGVja2xpc3RzWzBdKVxuICAgICAgICBjb25zdCByZWNvcmRzID0gdXJscy5tYXAodXJsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IGNoZWNrbGlzdHMuZmlsdGVyKGNoZWNrbGlzdCA9PiBjaGVja2xpc3RbdXJsXSBpbnN0YW5jZW9mIEVycm9yKS5sZW5ndGhcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgZXJyb3JzID09PSBjaGVja2xpc3RzLmxlbmd0aCA/IHJlZCh1cmwpIDogKGVycm9ycyA+IDAgPyBteWVsbG93KHVybCkgOiBtY3lhbih1cmwpKSxcbiAgICAgICAgICAgICAgICAuLi5jaGVja2xpc3RzLm1hcChjaGVja2xpc3QgPT4gY2hlY2tsaXN0W3VybF0gaW5zdGFuY2VvZiBFcnJvclxuICAgICAgICAgICAgICAgICAgICA/IHJlZChjaGVja2xpc3RbdXJsXSlcbiAgICAgICAgICAgICAgICAgICAgOiAoY2hlY2tsaXN0W3VybF0gPT09IHRydWUgPyBsY3lhbihcIkF5ZVwiKSA6IGN5YW4oXCJOYXlcIikpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICAgICAgdHJhY2VUYWJsZShyZWNvcmRzLCB7XG4gICAgICAgICAgICBoZWFkbGluZXMsXG4gICAgICAgICAgICBtYXhDb2x1bW5XaWR0aDogMzEsXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5mdW5jdGlvbiB0cmFjZUhlYWRlcihoZWFkbGluZSwgY29sb3IgPSBub3JtYWwsIGluZGVudCA9IFwiXCIsICkge1xuICAgIGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSM4pSAJHtcIuKUgFwiLnJlcGVhdChoZWFkbGluZS5sZW5ndGgpfeKUgOKUkGApXG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilIIgJHtjb2xvcihoZWFkbGluZSl9IOKUgmApXG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilJTilIAke1wi4pSAXCIucmVwZWF0KGhlYWRsaW5lLmxlbmd0aCl94pSA4pSYYClcbn1cblxuZnVuY3Rpb24gdHJhY2VUYWJsZShyZWNvcmRzLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgc3RyaW5naWZ5ID0gKGRhdGEsIGh1bWFuaXplcnMsIGluZGV4KSA9PiBodW1hbml6ZXJzICYmIGh1bWFuaXplcnNbaW5kZXhdID8gaHVtYW5pemVyc1tpbmRleF0oZGF0YSkudG9TdHJpbmcoKSA6IGRhdGE/LnRvU3RyaW5nKCkgPz8gXCJcIlxuICAgIGNvbnN0IG1heCA9IChhLCBiKSA9PiBhID4gYiA/IGEgOiBiXG4gICAgY29uc3QgcmVkdWNlTWF4ID0gKG51bWJlcnMpID0+IG51bWJlcnMucmVkdWNlKChjdXJyLCBwcmV2KSA9PiBwcmV2ID4gY3VyciA/IHByZXYgOiBjdXJyLCAwKVxuICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9XG4gICAgY29uc3QgaW5kZW50ID0gb3B0aW9ucz8uaW5kZW50IHx8IFwiXCJcbiAgICBjb25zdCBudW1Db2x1bW5zID0gcmVkdWNlTWF4KHJlY29yZHMubWFwKHJlY29yZCA9PiByZWNvcmQ/Lmxlbmd0aCB8fCAxKSlcbiAgICBjb25zdCBtYXhDb2x1bW5XaWR0aCA9IG9wdGlvbnM/Lm1heENvbHVtbldpZHRoIHx8IDgwXG4gICAgY29uc3QgdGFibGUgPSB0cmFuc3Bvc2UocmVjb3JkcywgbnVtQ29sdW1ucylcbiAgICBvcHRpb25zLndpZHRocyA9IG9wdGlvbnM/LndpZHRocyB8fCB0YWJsZS5tYXAoKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IG1heFdpZHRoID0gcmVkdWNlTWF4KGNvbHVtbi5tYXAoZmllbGQgPT4gY29sb3JzdHJpcChzdHJpbmdpZnkoZmllbGQsIG9wdGlvbnM/Lmh1bWFuaXplcnMsIGluZGV4KSkubGVuZ3RoKSlcbiAgICAgICAgaWYgKG9wdGlvbnM/LmhlYWRsaW5lcyAmJiBvcHRpb25zLmhlYWRsaW5lc1tpbmRleF0pIHtcbiAgICAgICAgICAgIG1heFdpZHRoID0gbWF4KG1heFdpZHRoLCBjb2xvcnN0cmlwKG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XS5yZXBsYWNlQWxsKCc6JywgJycpKS5sZW5ndGgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKG1heFdpZHRoLCBtYXhDb2x1bW5XaWR0aClcbiAgICB9KVxuICAgIGxldCBoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcChtYXhXaWR0aCA9PiBcIuKUgFwiLnJlcGVhdChtYXhXaWR0aCkpXG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilIzilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilKzilIBcIil94pSA4pSQYClcbiAgICBpZiAob3B0aW9ucz8uaGVhZGxpbmVzKSB7XG4gICAgICAgIGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKChtYXhXaWR0aCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNhcHRpb24gPSBvcHRpb25zLmhlYWRsaW5lc1tpbmRleF0ucmVwbGFjZUFsbCgnOicsICcnKVxuICAgICAgICAgICAgY29uc3QgY2FwdGlvbkxlbmd0aCA9IGNvbG9yc3RyaXAoY2FwdGlvbikubGVuZ3RoXG4gICAgICAgICAgICByZXR1cm4gYCR7d2hpdGUoY2FwdGlvbil9JHtcIiBcIi5yZXBlYXQobWF4V2lkdGggLSBjYXB0aW9uTGVuZ3RoKX1gXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSCICR7aGVhZGxpbmUuam9pbihcIiDilIIgXCIpfSDilIJgKVxuICAgICAgICBoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcChtYXhXaWR0aCA9PiBcIuKUgFwiLnJlcGVhdChtYXhXaWR0aCkpXG4gICAgICAgIGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSc4pSAJHtoZWFkbGluZS5qb2luKFwi4pSA4pS84pSAXCIpfeKUgOKUpGApXG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkgKyspIHtcbiAgICAgICAgbGV0IGxpbmUgPSBcIlwiXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29sdW1uczsgaiArKykge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSB0YWJsZVtqXVtpXVxuICAgICAgICAgICAgbGV0IGNvbG9yXG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uY29sb3JzICYmIG9wdGlvbnMuY29sb3JzW2pdKSB7XG4gICAgICAgICAgICAgIGNvbG9yID0gb3B0aW9ucy5jb2xvcnNbal0gIFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sb3IgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgXG4gICAgICAgICAgICAgICAgPyBncmVlbiBcbiAgICAgICAgICAgICAgICA6IChOdW1iZXIoZGF0YSkgPT09IGRhdGEgJiYgZGF0YSAlIDEgIT09IDAgLy8gaXMgZmxvYXQgbnVtYmVyP1xuICAgICAgICAgICAgICAgICAgICA/IHllbGxvdyBcbiAgICAgICAgICAgICAgICAgICAgOiAoeCkgPT4geFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBzdHJpbmdpZnkoZGF0YSwgb3B0aW9ucz8uaHVtYW5pemVycywgailcbiAgICAgICAgICAgIGlmIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGNvbG9yc3RyaXAoZGF0YSkubGVuZ3RoID4gbWF4Q29sdW1uV2lkdGggLSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhICs9IFwiLi4uXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBkYXRhTGVuZ3RoID0gY29sb3JzdHJpcChkYXRhKS5sZW5ndGhcbiAgICAgICAgICAgIGlmIChvcHRpb25zPy5oZWFkbGluZXMgJiYgb3B0aW9ucy5oZWFkbGluZXNbal1bMF0gPT09ICc6Jykge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBgJHtjb2xvcihkYXRhKX0ke1wiIFwiLnJlcGVhdChvcHRpb25zLndpZHRoc1tqXSAtIGRhdGFMZW5ndGgpfWBcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGAke1wiIFwiLnJlcGVhdChvcHRpb25zLndpZHRoc1tqXSAtIGRhdGFMZW5ndGgpfSR7Y29sb3IoZGF0YSl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGluZSArPSBg4pSCICR7ZGF0YX0gYFxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR9JHtsaW5lfeKUgmApXG4gICAgfVxuICAgIGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKG1heFdpZHRoID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSlcbiAgICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUlOKUgCR7aGVhZGxpbmUuam9pbihcIuKUgOKUtOKUgFwiKX3ilIDilJhgKVxufVxuXG5mdW5jdGlvbiB0cmFuc3Bvc2UocmVjb3JkcywgbnVtQ29sdW1ucykge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBbXVxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBudW1Db2x1bW5zOyBpbmRleCArKykge1xuICAgICAgICBjb2x1bW5zLnB1c2gocmVjb3Jkcy5tYXAocm93ID0+IHJvd1tpbmRleF0pKVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBjb2xvcnM6IHtcbiAgICAgICAgY3lhbiwgZ3JheSwgZ3JlZW4sIG1hZ2VudGEsIHJlZCwgd2hpdGUsIHllbGxvdywgbm9ybWFsLFxuICAgICAgICBsY3lhbiwgbGdyYXksIGxncmVlbiwgbG1hZ2VudGEsIGx5ZWxsb3csXG4gICAgICAgIG1jeWFuLCBtZ3JlZW4sIG1tYWdlbnRhLCBtcmVkLCBteWVsbG93LFxuICAgIH0sXG4gICAgY29sb3JzdHJpcCwgY29tbWFzLCB3aG9sZV93aXRzLCB0b0ZpeGVkVHJ1bmMsIGZyb21OYW5vd2l0cyxcbiAgICBjb3VudExlYXZlcyxcbiAgICBkZWxldGVFeHRyYUZsYWdzLCBleHRyYWN0RnJvbUFyZ3MsXG4gICAgZnJvbUhleFN0cmluZywgaXNIZXhTdHJpbmcsIGlzSGV4U3RyaW5nT2ZMZW5ndGgsIHRvSGV4U3RyaW5nLFxuICAgIHBhcnNlVVJMLCBpcElzUHJpdmF0ZU9yTG9jYWxob3N0LFxuICAgIHNob3dVc2FnZSwgc2hvd1VzYWdlRXJyb3IsIHNob3dVc2FnZVN1YmNvbW1hbmQsIHNob3dWZXJzaW9uLFxuICAgIHRvb2xraXRSdW4sXG4gICAgdG9VcHBlckNhbWVsQ2FzZSwgdG9VdGY4QXJyYXksIHV0ZjhBcnJheVRvU3RyLFxuICAgIHByb21wdCwgcHJvbXB0ZXIsIFxuICAgIHRyYWNlQ2hlY2tsaXN0cywgdHJhY2VIZWFkZXIsIHRyYWNlVGFibGUsXG4gICAgd2lsZGNhcmRzOiB7XG4gICAgICAgIGlzV2lsZGNhcmQsXG4gICAgICAgIGdldFdpbGRjYXJkc0NvdW50RnJvbVN0cmluZyxcbiAgICAgICAgcmVwbGFjZVdpbGRjYXJkcyxcbiAgICAgICAgc3BsaWNlV2lsZGNhcmQsXG4gICAgfSxcbn1cbiJdfQ==