starknet 4.12.0 → 4.13.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 (224) hide show
  1. package/.eslintrc +1 -0
  2. package/CHANGELOG.md +14 -0
  3. package/__tests__/account.test.ts +0 -2
  4. package/dist/index.d.ts +2683 -24
  5. package/dist/index.global.js +22994 -0
  6. package/dist/index.global.js.map +1 -0
  7. package/dist/index.js +4713 -53
  8. package/dist/index.js.map +1 -0
  9. package/dist/index.mjs +4655 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/index.d.ts +2683 -24
  12. package/index.global.js +22994 -0
  13. package/index.global.js.map +1 -0
  14. package/index.js +4713 -53
  15. package/index.js.map +1 -0
  16. package/index.mjs +4655 -0
  17. package/index.mjs.map +1 -0
  18. package/package.json +8 -2
  19. package/src/account/default.ts +43 -8
  20. package/src/account/interface.ts +25 -2
  21. package/src/constants.ts +0 -1
  22. package/src/provider/default.ts +3 -0
  23. package/src/provider/interface.ts +2 -0
  24. package/src/provider/rpc.ts +4 -4
  25. package/src/provider/sequencer.ts +4 -1
  26. package/src/types/lib.ts +1 -1
  27. package/src/types/provider.ts +5 -0
  28. package/src/utils/ellipticCurve.ts +3 -1
  29. package/src/utils/fetchPonyfill.ts +3 -2
  30. package/src/utils/hash.ts +3 -2
  31. package/src/utils/number.ts +2 -2
  32. package/tsup.config.ts +10 -0
  33. package/account/default.d.ts +0 -30
  34. package/account/default.js +0 -526
  35. package/account/index.d.ts +0 -2
  36. package/account/index.js +0 -18
  37. package/account/interface.d.ts +0 -161
  38. package/account/interface.js +0 -27
  39. package/constants.d.ts +0 -36
  40. package/constants.js +0 -2067
  41. package/contract/contractFactory.d.ts +0 -31
  42. package/contract/contractFactory.js +0 -102
  43. package/contract/default.d.ts +0 -108
  44. package/contract/default.js +0 -640
  45. package/contract/index.d.ts +0 -3
  46. package/contract/index.js +0 -19
  47. package/contract/interface.d.ts +0 -80
  48. package/contract/interface.js +0 -9
  49. package/dist/account/default.d.ts +0 -30
  50. package/dist/account/default.js +0 -526
  51. package/dist/account/index.d.ts +0 -2
  52. package/dist/account/index.js +0 -18
  53. package/dist/account/interface.d.ts +0 -161
  54. package/dist/account/interface.js +0 -27
  55. package/dist/constants.d.ts +0 -36
  56. package/dist/constants.js +0 -2067
  57. package/dist/contract/contractFactory.d.ts +0 -31
  58. package/dist/contract/contractFactory.js +0 -102
  59. package/dist/contract/default.d.ts +0 -108
  60. package/dist/contract/default.js +0 -640
  61. package/dist/contract/index.d.ts +0 -3
  62. package/dist/contract/index.js +0 -19
  63. package/dist/contract/interface.d.ts +0 -80
  64. package/dist/contract/interface.js +0 -9
  65. package/dist/provider/default.d.ts +0 -37
  66. package/dist/provider/default.js +0 -207
  67. package/dist/provider/errors.d.ts +0 -9
  68. package/dist/provider/errors.js +0 -40
  69. package/dist/provider/index.d.ts +0 -7
  70. package/dist/provider/index.js +0 -24
  71. package/dist/provider/interface.d.ts +0 -203
  72. package/dist/provider/interface.js +0 -9
  73. package/dist/provider/rpc.d.ts +0 -86
  74. package/dist/provider/rpc.js +0 -605
  75. package/dist/provider/sequencer.d.ts +0 -79
  76. package/dist/provider/sequencer.js +0 -575
  77. package/dist/provider/utils.d.ts +0 -30
  78. package/dist/provider/utils.js +0 -84
  79. package/dist/signer/default.d.ts +0 -13
  80. package/dist/signer/default.js +0 -102
  81. package/dist/signer/index.d.ts +0 -2
  82. package/dist/signer/index.js +0 -18
  83. package/dist/signer/interface.d.ts +0 -60
  84. package/dist/signer/interface.js +0 -9
  85. package/dist/types/account.d.ts +0 -11
  86. package/dist/types/account.js +0 -2
  87. package/dist/types/api/index.d.ts +0 -10
  88. package/dist/types/api/index.js +0 -18
  89. package/dist/types/api/openrpc.d.ts +0 -572
  90. package/dist/types/api/openrpc.js +0 -45
  91. package/dist/types/api/rpc.d.ts +0 -43
  92. package/dist/types/api/rpc.js +0 -2
  93. package/dist/types/api/sequencer.d.ts +0 -320
  94. package/dist/types/api/sequencer.js +0 -2
  95. package/dist/types/contract.d.ts +0 -5
  96. package/dist/types/contract.js +0 -2
  97. package/dist/types/index.d.ts +0 -7
  98. package/dist/types/index.js +0 -35
  99. package/dist/types/lib.d.ts +0 -120
  100. package/dist/types/lib.js +0 -8
  101. package/dist/types/provider.d.ts +0 -99
  102. package/dist/types/provider.js +0 -2
  103. package/dist/types/signer.d.ts +0 -19
  104. package/dist/types/signer.js +0 -2
  105. package/dist/utils/address.d.ts +0 -5
  106. package/dist/utils/address.js +0 -41
  107. package/dist/utils/ellipticCurve.d.ts +0 -29
  108. package/dist/utils/ellipticCurve.js +0 -132
  109. package/dist/utils/encode.d.ts +0 -15
  110. package/dist/utils/encode.js +0 -96
  111. package/dist/utils/fetchPonyfill.d.ts +0 -2
  112. package/dist/utils/fetchPonyfill.js +0 -6
  113. package/dist/utils/hash.d.ts +0 -37
  114. package/dist/utils/hash.js +0 -162
  115. package/dist/utils/json.d.ts +0 -16
  116. package/dist/utils/json.js +0 -19
  117. package/dist/utils/merkle.d.ts +0 -10
  118. package/dist/utils/merkle.js +0 -89
  119. package/dist/utils/number.d.ts +0 -16
  120. package/dist/utils/number.js +0 -112
  121. package/dist/utils/provider.d.ts +0 -4
  122. package/dist/utils/provider.js +0 -38
  123. package/dist/utils/responseParser/index.d.ts +0 -11
  124. package/dist/utils/responseParser/index.js +0 -9
  125. package/dist/utils/responseParser/rpc.d.ts +0 -20
  126. package/dist/utils/responseParser/rpc.js +0 -44
  127. package/dist/utils/responseParser/sequencer.d.ts +0 -17
  128. package/dist/utils/responseParser/sequencer.js +0 -99
  129. package/dist/utils/shortString.d.ts +0 -4
  130. package/dist/utils/shortString.js +0 -26
  131. package/dist/utils/stark.d.ts +0 -16
  132. package/dist/utils/stark.js +0 -91
  133. package/dist/utils/transaction.d.ts +0 -20
  134. package/dist/utils/transaction.js +0 -79
  135. package/dist/utils/typedData/index.d.ts +0 -72
  136. package/dist/utils/typedData/index.js +0 -239
  137. package/dist/utils/typedData/types.d.ts +0 -32
  138. package/dist/utils/typedData/types.js +0 -2
  139. package/dist/utils/typedData/utils.d.ts +0 -8
  140. package/dist/utils/typedData/utils.js +0 -16
  141. package/dist/utils/uint256.d.ts +0 -11
  142. package/dist/utils/uint256.js +0 -28
  143. package/dist/utils/url.d.ts +0 -7
  144. package/dist/utils/url.js +0 -49
  145. package/provider/default.d.ts +0 -37
  146. package/provider/default.js +0 -207
  147. package/provider/errors.d.ts +0 -9
  148. package/provider/errors.js +0 -40
  149. package/provider/index.d.ts +0 -7
  150. package/provider/index.js +0 -24
  151. package/provider/interface.d.ts +0 -203
  152. package/provider/interface.js +0 -9
  153. package/provider/rpc.d.ts +0 -86
  154. package/provider/rpc.js +0 -605
  155. package/provider/sequencer.d.ts +0 -79
  156. package/provider/sequencer.js +0 -575
  157. package/provider/utils.d.ts +0 -30
  158. package/provider/utils.js +0 -84
  159. package/signer/default.d.ts +0 -13
  160. package/signer/default.js +0 -102
  161. package/signer/index.d.ts +0 -2
  162. package/signer/index.js +0 -18
  163. package/signer/interface.d.ts +0 -60
  164. package/signer/interface.js +0 -9
  165. package/types/account.d.ts +0 -11
  166. package/types/account.js +0 -2
  167. package/types/api/index.d.ts +0 -10
  168. package/types/api/index.js +0 -18
  169. package/types/api/openrpc.d.ts +0 -572
  170. package/types/api/openrpc.js +0 -45
  171. package/types/api/rpc.d.ts +0 -43
  172. package/types/api/rpc.js +0 -2
  173. package/types/api/sequencer.d.ts +0 -320
  174. package/types/api/sequencer.js +0 -2
  175. package/types/contract.d.ts +0 -5
  176. package/types/contract.js +0 -2
  177. package/types/index.d.ts +0 -7
  178. package/types/index.js +0 -35
  179. package/types/lib.d.ts +0 -120
  180. package/types/lib.js +0 -8
  181. package/types/provider.d.ts +0 -99
  182. package/types/provider.js +0 -2
  183. package/types/signer.d.ts +0 -19
  184. package/types/signer.js +0 -2
  185. package/utils/address.d.ts +0 -5
  186. package/utils/address.js +0 -41
  187. package/utils/ellipticCurve.d.ts +0 -29
  188. package/utils/ellipticCurve.js +0 -132
  189. package/utils/encode.d.ts +0 -15
  190. package/utils/encode.js +0 -96
  191. package/utils/fetchPonyfill.d.ts +0 -2
  192. package/utils/fetchPonyfill.js +0 -6
  193. package/utils/hash.d.ts +0 -37
  194. package/utils/hash.js +0 -162
  195. package/utils/json.d.ts +0 -16
  196. package/utils/json.js +0 -19
  197. package/utils/merkle.d.ts +0 -10
  198. package/utils/merkle.js +0 -89
  199. package/utils/number.d.ts +0 -16
  200. package/utils/number.js +0 -112
  201. package/utils/provider.d.ts +0 -4
  202. package/utils/provider.js +0 -38
  203. package/utils/responseParser/index.d.ts +0 -11
  204. package/utils/responseParser/index.js +0 -9
  205. package/utils/responseParser/rpc.d.ts +0 -20
  206. package/utils/responseParser/rpc.js +0 -44
  207. package/utils/responseParser/sequencer.d.ts +0 -17
  208. package/utils/responseParser/sequencer.js +0 -99
  209. package/utils/shortString.d.ts +0 -4
  210. package/utils/shortString.js +0 -26
  211. package/utils/stark.d.ts +0 -16
  212. package/utils/stark.js +0 -91
  213. package/utils/transaction.d.ts +0 -20
  214. package/utils/transaction.js +0 -79
  215. package/utils/typedData/index.d.ts +0 -72
  216. package/utils/typedData/index.js +0 -239
  217. package/utils/typedData/types.d.ts +0 -32
  218. package/utils/typedData/types.js +0 -2
  219. package/utils/typedData/utils.d.ts +0 -8
  220. package/utils/typedData/utils.js +0 -16
  221. package/utils/uint256.d.ts +0 -11
  222. package/utils/uint256.js +0 -28
  223. package/utils/url.d.ts +0 -7
  224. package/utils/url.js +0 -49
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["(disabled):buffer","../node_modules/bn.js/lib/bn.js","../node_modules/minimalistic-assert/index.js","../node_modules/whatwg-fetch/fetch.js","../node_modules/isomorphic-fetch/fetch-npm-browserify.js","../node_modules/@noble/hashes/_assert.js","../node_modules/@noble/hashes/_u64.js","../node_modules/@noble/hashes/cryptoBrowser.js","../node_modules/@noble/hashes/utils.js","../node_modules/@noble/hashes/sha3.js","../node_modules/ethereum-cryptography/utils.js","../node_modules/ethereum-cryptography/keccak.js","../node_modules/elliptic/node_modules/bn.js/lib/bn.js","../node_modules/minimalistic-crypto-utils/lib/utils.js","../node_modules/elliptic/lib/elliptic/utils.js","(disabled):crypto","../node_modules/brorand/index.js","../node_modules/elliptic/lib/elliptic/curve/base.js","../node_modules/inherits/inherits_browser.js","../node_modules/elliptic/lib/elliptic/curve/short.js","../node_modules/elliptic/lib/elliptic/curve/mont.js","../node_modules/elliptic/lib/elliptic/curve/edwards.js","../node_modules/elliptic/lib/elliptic/curve/index.js","../node_modules/hash.js/lib/hash/utils.js","../node_modules/hash.js/lib/hash/common.js","../node_modules/hash.js/lib/hash/sha/common.js","../node_modules/hash.js/lib/hash/sha/1.js","../node_modules/hash.js/lib/hash/sha/256.js","../node_modules/hash.js/lib/hash/sha/224.js","../node_modules/hash.js/lib/hash/sha/512.js","../node_modules/hash.js/lib/hash/sha/384.js","../node_modules/hash.js/lib/hash/sha.js","../node_modules/hash.js/lib/hash/ripemd.js","../node_modules/hash.js/lib/hash/hmac.js","../node_modules/hash.js/lib/hash.js","../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","../node_modules/elliptic/lib/elliptic/curves.js","../node_modules/hmac-drbg/lib/hmac-drbg.js","../node_modules/elliptic/lib/elliptic/ec/key.js","../node_modules/elliptic/lib/elliptic/ec/signature.js","../node_modules/elliptic/lib/elliptic/ec/index.js","../node_modules/elliptic/lib/elliptic/eddsa/key.js","../node_modules/elliptic/lib/elliptic/eddsa/signature.js","../node_modules/elliptic/lib/elliptic/eddsa/index.js","../node_modules/elliptic/lib/elliptic.js","../node_modules/bignumber.js/bignumber.js","../node_modules/json-bigint/lib/stringify.js","../node_modules/json-bigint/lib/parse.js","../node_modules/json-bigint/index.js","../node_modules/url-join/lib/url-join.js","../src/index.ts","../src/contract/default.ts","../src/utils/fetchPonyfill.ts","../src/utils/hash.ts","../src/constants.ts","../src/utils/number.ts","../src/utils/encode.ts","../src/utils/ellipticCurve.ts","../src/utils/json.ts","../src/utils/stark.ts","../node_modules/pako/dist/pako.esm.mjs","../src/utils/provider.ts","../src/utils/responseParser/rpc.ts","../src/provider/utils.ts","../src/provider/rpc.ts","../src/provider/sequencer.ts","../src/utils/responseParser/index.ts","../src/utils/responseParser/sequencer.ts","../src/utils/url.ts","../node_modules/ts-custom-error/dist/src/utils.js","../node_modules/ts-custom-error/dist/src/custom-error.js","../node_modules/ts-custom-error/dist/src/factory.js","../src/provider/errors.ts","../src/provider/default.ts","../src/provider/interface.ts","../src/provider/index.ts","../src/contract/interface.ts","../src/contract/contractFactory.ts","../src/types/api/index.ts","../src/signer/interface.ts","../src/utils/transaction.ts","../src/utils/typedData/index.ts","../src/utils/merkle.ts","../src/utils/shortString.ts","../src/utils/typedData/utils.ts","../src/signer/default.ts","../src/account/default.ts","../src/account/interface.ts","../src/utils/uint256.ts","../node_modules/@ethersproject/logger/src.ts/_version.ts","../node_modules/@ethersproject/logger/src.ts/index.ts","../node_modules/@ethersproject/bytes/src.ts/_version.ts","../node_modules/@ethersproject/bytes/src.ts/index.ts","../src/utils/address.ts"],"sourcesContent":["","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","var global =\n (typeof globalThis !== 'undefined' && globalThis) ||\n (typeof self !== 'undefined' && self) ||\n (typeof global !== 'undefined' && global)\n\nvar support = {\n searchParams: 'URLSearchParams' in global,\n iterable: 'Symbol' in global && 'iterator' in Symbol,\n blob:\n 'FileReader' in global &&\n 'Blob' in global &&\n (function() {\n try {\n new Blob()\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in global,\n arrayBuffer: 'ArrayBuffer' in global\n}\n\nfunction isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n}\n\nif (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ]\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n }\n}\n\nfunction normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name)\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {\n throw new TypeError('Invalid character in header field name: \"' + name + '\"')\n }\n return name.toLowerCase()\n}\n\nfunction normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value)\n }\n return value\n}\n\n// Build a destructive iterator for the value list\nfunction iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift()\n return {done: value === undefined, value: value}\n }\n }\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n }\n }\n\n return iterator\n}\n\nexport function Headers(headers) {\n this.map = {}\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value)\n }, this)\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1])\n }, this)\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name])\n }, this)\n }\n}\n\nHeaders.prototype.append = function(name, value) {\n name = normalizeName(name)\n value = normalizeValue(value)\n var oldValue = this.map[name]\n this.map[name] = oldValue ? oldValue + ', ' + value : value\n}\n\nHeaders.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)]\n}\n\nHeaders.prototype.get = function(name) {\n name = normalizeName(name)\n return this.has(name) ? this.map[name] : null\n}\n\nHeaders.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n}\n\nHeaders.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value)\n}\n\nHeaders.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this)\n }\n }\n}\n\nHeaders.prototype.keys = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push(name)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.values = function() {\n var items = []\n this.forEach(function(value) {\n items.push(value)\n })\n return iteratorFor(items)\n}\n\nHeaders.prototype.entries = function() {\n var items = []\n this.forEach(function(value, name) {\n items.push([name, value])\n })\n return iteratorFor(items)\n}\n\nif (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n}\n\nfunction consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true\n}\n\nfunction fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result)\n }\n reader.onerror = function() {\n reject(reader.error)\n }\n })\n}\n\nfunction readBlobAsArrayBuffer(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsArrayBuffer(blob)\n return promise\n}\n\nfunction readBlobAsText(blob) {\n var reader = new FileReader()\n var promise = fileReaderReady(reader)\n reader.readAsText(blob)\n return promise\n}\n\nfunction readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf)\n var chars = new Array(view.length)\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i])\n }\n return chars.join('')\n}\n\nfunction bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength)\n view.set(new Uint8Array(buf))\n return view.buffer\n }\n}\n\nfunction Body() {\n this.bodyUsed = false\n\n this._initBody = function(body) {\n /*\n fetch-mock wraps the Response object in an ES6 Proxy to\n provide useful test harness features such as flush. However, on\n ES5 browsers without fetch or Proxy support pollyfills must be used;\n the proxy-pollyfill is unable to proxy an attribute unless it exists\n on the object before the Proxy is created. This change ensures\n Response.bodyUsed exists on the instance, while maintaining the\n semantic of setting Request.bodyUsed in the constructor before\n _initBody is called.\n */\n this.bodyUsed = this.bodyUsed\n this._bodyInit = body\n if (!body) {\n this._bodyText = ''\n } else if (typeof body === 'string') {\n this._bodyText = body\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString()\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer)\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer])\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body)\n } else {\n this._bodyText = body = Object.prototype.toString.call(body)\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8')\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type)\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n }\n }\n }\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n }\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n var isConsumed = consumed(this)\n if (isConsumed) {\n return isConsumed\n }\n if (ArrayBuffer.isView(this._bodyArrayBuffer)) {\n return Promise.resolve(\n this._bodyArrayBuffer.buffer.slice(\n this._bodyArrayBuffer.byteOffset,\n this._bodyArrayBuffer.byteOffset + this._bodyArrayBuffer.byteLength\n )\n )\n } else {\n return Promise.resolve(this._bodyArrayBuffer)\n }\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n }\n }\n\n this.text = function() {\n var rejected = consumed(this)\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n }\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n }\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n }\n\n return this\n}\n\n// HTTP methods whose capitalization should be normalized\nvar methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\nfunction normalizeMethod(method) {\n var upcased = method.toUpperCase()\n return methods.indexOf(upcased) > -1 ? upcased : method\n}\n\nexport function Request(input, options) {\n if (!(this instanceof Request)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n\n options = options || {}\n var body = options.body\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url\n this.credentials = input.credentials\n if (!options.headers) {\n this.headers = new Headers(input.headers)\n }\n this.method = input.method\n this.mode = input.mode\n this.signal = input.signal\n if (!body && input._bodyInit != null) {\n body = input._bodyInit\n input.bodyUsed = true\n }\n } else {\n this.url = String(input)\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin'\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers)\n }\n this.method = normalizeMethod(options.method || this.method || 'GET')\n this.mode = options.mode || this.mode || null\n this.signal = options.signal || this.signal\n this.referrer = null\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body)\n\n if (this.method === 'GET' || this.method === 'HEAD') {\n if (options.cache === 'no-store' || options.cache === 'no-cache') {\n // Search for a '_' parameter in the query string\n var reParamSearch = /([?&])_=[^&]*/\n if (reParamSearch.test(this.url)) {\n // If it already exists then set the value with the current time\n this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime())\n } else {\n // Otherwise add a new '_' parameter to the end with the current time\n var reQueryString = /\\?/\n this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime()\n }\n }\n }\n}\n\nRequest.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n}\n\nfunction decode(body) {\n var form = new FormData()\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=')\n var name = split.shift().replace(/\\+/g, ' ')\n var value = split.join('=').replace(/\\+/g, ' ')\n form.append(decodeURIComponent(name), decodeURIComponent(value))\n }\n })\n return form\n}\n\nfunction parseHeaders(rawHeaders) {\n var headers = new Headers()\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n // Avoiding split via regex to work around a common IE11 bug with the core-js 3.6.0 regex polyfill\n // https://github.com/github/fetch/issues/748\n // https://github.com/zloirock/core-js/issues/751\n preProcessedHeaders\n .split('\\r')\n .map(function(header) {\n return header.indexOf('\\n') === 0 ? header.substr(1, header.length) : header\n })\n .forEach(function(line) {\n var parts = line.split(':')\n var key = parts.shift().trim()\n if (key) {\n var value = parts.join(':').trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nBody.call(Request.prototype)\n\nexport function Response(bodyInit, options) {\n if (!(this instanceof Response)) {\n throw new TypeError('Please use the \"new\" operator, this DOM object constructor cannot be called as a function.')\n }\n if (!options) {\n options = {}\n }\n\n this.type = 'default'\n this.status = options.status === undefined ? 200 : options.status\n this.ok = this.status >= 200 && this.status < 300\n this.statusText = options.statusText === undefined ? '' : '' + options.statusText\n this.headers = new Headers(options.headers)\n this.url = options.url || ''\n this._initBody(bodyInit)\n}\n\nBody.call(Response.prototype)\n\nResponse.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n}\n\nResponse.error = function() {\n var response = new Response(null, {status: 0, statusText: ''})\n response.type = 'error'\n return response\n}\n\nvar redirectStatuses = [301, 302, 303, 307, 308]\n\nResponse.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n}\n\nexport var DOMException = global.DOMException\ntry {\n new DOMException()\n} catch (err) {\n DOMException = function(message, name) {\n this.message = message\n this.name = name\n var error = Error(message)\n this.stack = error.stack\n }\n DOMException.prototype = Object.create(Error.prototype)\n DOMException.prototype.constructor = DOMException\n}\n\nexport function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init)\n\n if (request.signal && request.signal.aborted) {\n return reject(new DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest()\n\n function abortXhr() {\n xhr.abort()\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n }\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n var body = 'response' in xhr ? xhr.response : xhr.responseText\n setTimeout(function() {\n resolve(new Response(body, options))\n }, 0)\n }\n\n xhr.onerror = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.ontimeout = function() {\n setTimeout(function() {\n reject(new TypeError('Network request failed'))\n }, 0)\n }\n\n xhr.onabort = function() {\n setTimeout(function() {\n reject(new DOMException('Aborted', 'AbortError'))\n }, 0)\n }\n\n function fixUrl(url) {\n try {\n return url === '' && global.location.href ? global.location.href : url\n } catch (e) {\n return url\n }\n }\n\n xhr.open(request.method, fixUrl(request.url), true)\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false\n }\n\n if ('responseType' in xhr) {\n if (support.blob) {\n xhr.responseType = 'blob'\n } else if (\n support.arrayBuffer &&\n request.headers.get('Content-Type') &&\n request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1\n ) {\n xhr.responseType = 'arraybuffer'\n }\n }\n\n if (init && typeof init.headers === 'object' && !(init.headers instanceof Headers)) {\n Object.getOwnPropertyNames(init.headers).forEach(function(name) {\n xhr.setRequestHeader(name, normalizeValue(init.headers[name]))\n })\n } else {\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value)\n })\n }\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr)\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr)\n }\n }\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n })\n}\n\nfetch.polyfill = true\n\nif (!global.fetch) {\n global.fetch = fetch\n global.Headers = Headers\n global.Request = Request\n global.Response = Response\n}\n","// the whatwg-fetch polyfill installs the fetch() function\n// on the global object (window or self)\n//\n// Return that as the export for use in Webpack, Browserify etc.\nrequire('whatwg-fetch');\nmodule.exports = self.fetch.bind(self);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.output = exports.exists = exports.hash = exports.bytes = exports.bool = exports.number = void 0;\nfunction number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexports.number = number;\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nexports.bool = bool;\nfunction bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new TypeError('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new TypeError(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nexports.bytes = bytes;\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nexports.hash = hash;\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nexports.exists = exists;\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexports.output = output;\nconst assert = {\n number,\n bool,\n bytes,\n hash,\n exists,\n output,\n};\nexports.default = assert;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.add = exports.toBig = exports.split = exports.fromBig = void 0;\nconst U32_MASK64 = BigInt(2 ** 32 - 1);\nconst _32n = BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nexports.fromBig = fromBig;\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nexports.split = split;\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\nexports.toBig = toBig;\n// for Shift in [0, 32)\nconst shrSH = (h, l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (h, l) => l;\nconst rotr32L = (h, l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\n// Removing \"export\" has 5% perf penalty -_-\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\nexports.add = add;\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig: exports.toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexports.default = u64;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = void 0;\nexports.crypto = {\n node: undefined,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\n","\"use strict\";\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.randomBytes = exports.wrapConstructorWithOpts = exports.wrapConstructor = exports.checkOpts = exports.Hash = exports.concatBytes = exports.toBytes = exports.utf8ToBytes = exports.asyncLoop = exports.nextTick = exports.hexToBytes = exports.bytesToHex = exports.isLE = exports.rotr = exports.createView = exports.u32 = exports.u8 = void 0;\n// The import here is via the package name. This is to ensure\n// that exports mapping/resolution does fall into place.\nconst crypto_1 = require(\"@noble/hashes/crypto\");\n// Cast array to different type\nconst u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexports.u8 = u8;\nconst u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\nexports.u32 = u32;\n// Cast array to view\nconst createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\nexports.createView = createView;\n// The rotate right (circular right shift) operation for uint32\nconst rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\nexports.rotr = rotr;\nexports.isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// There is almost no big endian hardware, but js typed arrays uses platform specific endianness.\n// So, just to be sure not to corrupt anything.\nif (!exports.isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xde, 0xad, 0xbe, 0xef]))\n */\nfunction bytesToHex(uint8a) {\n // pre-caching improves the speed 6x\n if (!(uint8a instanceof Uint8Array))\n throw new Error('Uint8Array expected');\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nexports.bytesToHex = bytesToHex;\n/**\n * @example hexToBytes('deadbeef')\n */\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nexports.hexToBytes = hexToBytes;\n// There is no setImmediate in browser and setTimeout is slow. However, call to async function will return Promise\n// which will be fullfiled only on next scheduler queue processing step and this is exactly what we need.\nconst nextTick = async () => { };\nexports.nextTick = nextTick;\n// Returns control to thread each 'tick' ms to avoid blocking\nasync function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await (0, exports.nextTick)();\n ts += diff;\n }\n}\nexports.asyncLoop = asyncLoop;\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string') {\n throw new TypeError(`utf8ToBytes expected string, got ${typeof str}`);\n }\n return new TextEncoder().encode(str);\n}\nexports.utf8ToBytes = utf8ToBytes;\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!(data instanceof Uint8Array))\n throw new TypeError(`Expected input type is Uint8Array (got ${typeof data})`);\n return data;\n}\nexports.toBytes = toBytes;\n/**\n * Concats Uint8Array-s into one; like `Buffer.concat([buf1, buf2])`\n * @example concatBytes(buf1, buf2)\n */\nfunction concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Uint8Array list expected');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nexports.concatBytes = concatBytes;\n// For runtime check if class implements interface\nclass Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nexports.Hash = Hash;\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nfunction checkOpts(defaults, opts) {\n if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n throw new TypeError('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexports.checkOpts = checkOpts;\nfunction wrapConstructor(hashConstructor) {\n const hashC = (message) => hashConstructor().update(toBytes(message)).digest();\n const tmp = hashConstructor();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashConstructor();\n return hashC;\n}\nexports.wrapConstructor = wrapConstructor;\nfunction wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexports.wrapConstructorWithOpts = wrapConstructorWithOpts;\n/**\n * Secure PRNG\n */\nfunction randomBytes(bytesLength = 32) {\n if (crypto_1.crypto.web) {\n return crypto_1.crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto_1.crypto.node) {\n return new Uint8Array(crypto_1.crypto.node.randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n}\nexports.randomBytes = randomBytes;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shake256 = exports.shake128 = exports.keccak_512 = exports.keccak_384 = exports.keccak_256 = exports.keccak_224 = exports.sha3_512 = exports.sha3_384 = exports.sha3_256 = exports.sha3_224 = exports.Keccak = exports.keccakP = void 0;\nconst _assert_js_1 = require(\"./_assert.js\");\nconst _u64_js_1 = require(\"./_u64.js\");\nconst utils_js_1 = require(\"./utils.js\");\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = _u64_js_1.default.split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => s > 32 ? _u64_js_1.default.rotlBH(h, l, s) : _u64_js_1.default.rotlSH(h, l, s);\nconst rotlL = (h, l, s) => s > 32 ? _u64_js_1.default.rotlBL(h, l, s) : _u64_js_1.default.rotlSL(h, l, s);\n// Same as keccakf1600, but allows to skip some rounds\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexports.keccakP = keccakP;\nclass Keccak extends utils_js_1.Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n _assert_js_1.default.number(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = (0, utils_js_1.u32)(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n _assert_js_1.default.exists(this);\n const { blockLen, state } = this;\n data = (0, utils_js_1.toBytes)(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n _assert_js_1.default.exists(this, false);\n _assert_js_1.default.bytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n _assert_js_1.default.number(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n _assert_js_1.default.output(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nexports.Keccak = Keccak;\nconst gen = (suffix, blockLen, outputLen) => (0, utils_js_1.wrapConstructor)(() => new Keccak(blockLen, suffix, outputLen));\nexports.sha3_224 = gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexports.sha3_256 = gen(0x06, 136, 256 / 8);\nexports.sha3_384 = gen(0x06, 104, 384 / 8);\nexports.sha3_512 = gen(0x06, 72, 512 / 8);\nexports.keccak_224 = gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexports.keccak_256 = gen(0x01, 136, 256 / 8);\nexports.keccak_384 = gen(0x01, 104, 384 / 8);\nexports.keccak_512 = gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => (0, utils_js_1.wrapConstructorWithOpts)((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexports.shake128 = genShake(0x1f, 168, 128 / 8);\nexports.shake256 = genShake(0x1f, 136, 256 / 8);\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.crypto = exports.wrapHash = exports.equalsBytes = exports.hexToBytes = exports.bytesToUtf8 = exports.utf8ToBytes = exports.createView = exports.concatBytes = exports.toHex = exports.bytesToHex = exports.assertBytes = exports.assertBool = void 0;\n// buf.toString('hex') -> toHex(buf)\nconst _assert_1 = __importDefault(require(\"@noble/hashes/_assert\"));\nconst utils_1 = require(\"@noble/hashes/utils\");\nconst assertBool = _assert_1.default.bool;\nexports.assertBool = assertBool;\nconst assertBytes = _assert_1.default.bytes;\nexports.assertBytes = assertBytes;\nvar utils_2 = require(\"@noble/hashes/utils\");\nObject.defineProperty(exports, \"bytesToHex\", { enumerable: true, get: function () { return utils_2.bytesToHex; } });\nObject.defineProperty(exports, \"toHex\", { enumerable: true, get: function () { return utils_2.bytesToHex; } });\nObject.defineProperty(exports, \"concatBytes\", { enumerable: true, get: function () { return utils_2.concatBytes; } });\nObject.defineProperty(exports, \"createView\", { enumerable: true, get: function () { return utils_2.createView; } });\nObject.defineProperty(exports, \"utf8ToBytes\", { enumerable: true, get: function () { return utils_2.utf8ToBytes; } });\n// buf.toString('utf8') -> bytesToUtf8(buf)\nfunction bytesToUtf8(data) {\n if (!(data instanceof Uint8Array)) {\n throw new TypeError(`bytesToUtf8 expected Uint8Array, got ${typeof data}`);\n }\n return new TextDecoder().decode(data);\n}\nexports.bytesToUtf8 = bytesToUtf8;\nfunction hexToBytes(data) {\n const sliced = data.startsWith(\"0x\") ? data.substring(2) : data;\n return (0, utils_1.hexToBytes)(sliced);\n}\nexports.hexToBytes = hexToBytes;\n// buf.equals(buf2) -> equalsBytes(buf, buf2)\nfunction equalsBytes(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\nexports.equalsBytes = equalsBytes;\n// Internal utils\nfunction wrapHash(hash) {\n return (msg) => {\n _assert_1.default.bytes(msg);\n return hash(msg);\n };\n}\nexports.wrapHash = wrapHash;\nexports.crypto = (() => {\n const webCrypto = typeof self === \"object\" && \"crypto\" in self ? self.crypto : undefined;\n const nodeRequire = typeof module !== \"undefined\" &&\n typeof module.require === \"function\" &&\n module.require.bind(module);\n return {\n node: nodeRequire && !webCrypto ? nodeRequire(\"crypto\") : undefined,\n web: webCrypto\n };\n})();\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.keccak512 = exports.keccak384 = exports.keccak256 = exports.keccak224 = void 0;\nconst sha3_1 = require(\"@noble/hashes/sha3\");\nconst utils_1 = require(\"./utils\");\nexports.keccak224 = (0, utils_1.wrapHash)(sha3_1.keccak_224);\nexports.keccak256 = (() => {\n const k = (0, utils_1.wrapHash)(sha3_1.keccak_256);\n k.create = sha3_1.keccak_256.create;\n return k;\n})();\nexports.keccak384 = (0, utils_1.wrapHash)(sha3_1.keccak_384);\nexports.keccak512 = (0, utils_1.wrapHash)(sha3_1.keccak_512);\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n",";(function (globalObject) {\r\n 'use strict';\r\n\r\n/*\r\n * bignumber.js v9.0.2\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2021 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\n var BigNumber,\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n /*\r\n * Create and return a BigNumber constructor.\r\n */\r\n function clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz',\r\n alphabetHasNormalDecimalDigits = true;\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10 && alphabetHasNormalDecimalDigits) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n alphabetHasNormalDecimalDigits = v.slice(0, 10) == '0123456789';\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, P.lt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, P.gt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n function maxOrMin(args, method) {\r\n var n,\r\n i = 1,\r\n m = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n n = new BigNumber(args[i]);\r\n\r\n // If any number is NaN, return NaN.\r\n if (!n.s) {\r\n m = n;\r\n break;\r\n } else if (method.call(m, n)) {\r\n m = n;\r\n }\r\n }\r\n\r\n return m;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = n / pows10[d - j - 1] % 10 | 0;\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10 && alphabetHasNormalDecimalDigits) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n }\r\n\r\n\r\n // PRIVATE HELPER FUNCTIONS\r\n\r\n // These functions don't need access to variables,\r\n // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\n function bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n }\r\n\r\n\r\n // Return a coefficient array as a string of base 10 digits.\r\n function coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n }\r\n\r\n\r\n // Compare the value of BigNumbers x and y.\r\n function compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n }\r\n\r\n\r\n /*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\n function intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n }\r\n\r\n\r\n // Assumes finite n.\r\n function isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n }\r\n\r\n\r\n function toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n }\r\n\r\n\r\n function toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n\r\n // EXPORT\r\n\r\n\r\n BigNumber = clone();\r\n BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () { return BigNumber; });\r\n\r\n // Node.js and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = BigNumber;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalObject) {\r\n globalObject = typeof self != 'undefined' && self ? self : window;\r\n }\r\n\r\n globalObject.BigNumber = BigNumber;\r\n }\r\n})(this);\r\n","var BigNumber = require('bignumber.js');\n\n/*\n json2.js\n 2013-05-26\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n See http://www.JSON.org/js.html\n\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n\n\n This file creates a global JSON object containing two methods: stringify\n and parse.\n\n JSON.stringify(value, replacer, space)\n value any JavaScript value, usually an object or array.\n\n replacer an optional parameter that determines how object\n values are stringified for objects. It can be a\n function or an array of strings.\n\n space an optional parameter that specifies the indentation\n of nested structures. If it is omitted, the text will\n be packed without extra whitespace. If it is a number,\n it will specify the number of spaces to indent at each\n level. If it is a string (such as '\\t' or '&nbsp;'),\n it contains the characters used to indent at each level.\n\n This method produces a JSON text from a JavaScript value.\n\n When an object value is found, if the object contains a toJSON\n method, its toJSON method will be called and the result will be\n stringified. A toJSON method does not serialize: it returns the\n value represented by the name/value pair that should be serialized,\n or undefined if nothing should be serialized. The toJSON method\n will be passed the key associated with the value, and this will be\n bound to the value\n\n For example, this would serialize Dates as ISO strings.\n\n Date.prototype.toJSON = function (key) {\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10 ? '0' + n : n;\n }\n\n return this.getUTCFullYear() + '-' +\n f(this.getUTCMonth() + 1) + '-' +\n f(this.getUTCDate()) + 'T' +\n f(this.getUTCHours()) + ':' +\n f(this.getUTCMinutes()) + ':' +\n f(this.getUTCSeconds()) + 'Z';\n };\n\n You can provide an optional replacer method. It will be passed the\n key and value of each member, with this bound to the containing\n object. The value that is returned from your method will be\n serialized. If your method returns undefined, then the member will\n be excluded from the serialization.\n\n If the replacer parameter is an array of strings, then it will be\n used to select the members to be serialized. It filters the results\n such that only members with keys listed in the replacer array are\n stringified.\n\n Values that do not have JSON representations, such as undefined or\n functions, will not be serialized. Such values in objects will be\n dropped; in arrays they will be replaced with null. You can use\n a replacer function to replace those with JSON values.\n JSON.stringify(undefined) returns undefined.\n\n The optional space parameter produces a stringification of the\n value that is filled with line breaks and indentation to make it\n easier to read.\n\n If the space parameter is a non-empty string, then that string will\n be used for indentation. If the space parameter is a number, then\n the indentation will be that many spaces.\n\n Example:\n\n text = JSON.stringify(['e', {pluribus: 'unum'}]);\n // text is '[\"e\",{\"pluribus\":\"unum\"}]'\n\n\n text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\\t');\n // text is '[\\n\\t\"e\",\\n\\t{\\n\\t\\t\"pluribus\": \"unum\"\\n\\t}\\n]'\n\n text = JSON.stringify([new Date()], function (key, value) {\n return this[key] instanceof Date ?\n 'Date(' + this[key] + ')' : value;\n });\n // text is '[\"Date(---current time---)\"]'\n\n\n JSON.parse(text, reviver)\n This method parses a JSON text to produce an object or array.\n It can throw a SyntaxError exception.\n\n The optional reviver parameter is a function that can filter and\n transform the results. It receives each of the keys and values,\n and its return value is used instead of the original value.\n If it returns what it received, then the structure is not modified.\n If it returns undefined then the member is deleted.\n\n Example:\n\n // Parse the text. Values that look like ISO date strings will\n // be converted to Date objects.\n\n myData = JSON.parse(text, function (key, value) {\n var a;\n if (typeof value === 'string') {\n a =\n/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n if (a) {\n return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n +a[5], +a[6]));\n }\n }\n return value;\n });\n\n myData = JSON.parse('[\"Date(09/09/2001)\"]', function (key, value) {\n var d;\n if (typeof value === 'string' &&\n value.slice(0, 5) === 'Date(' &&\n value.slice(-1) === ')') {\n d = new Date(value.slice(5, -1));\n if (d) {\n return d;\n }\n }\n return value;\n });\n\n\n This is a reference implementation. You are free to copy, modify, or\n redistribute.\n*/\n\n/*jslint evil: true, regexp: true */\n\n/*members \"\", \"\\b\", \"\\t\", \"\\n\", \"\\f\", \"\\r\", \"\\\"\", JSON, \"\\\\\", apply,\n call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,\n getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,\n lastIndex, length, parse, prototype, push, replace, slice, stringify,\n test, toJSON, toString, valueOf\n*/\n\n\n// Create a JSON object only if one does not already exist. We create the\n// methods in a closure to avoid creating global variables.\n\nvar JSON = module.exports;\n\n(function () {\n 'use strict';\n\n function f(n) {\n // Format integers to have at least two digits.\n return n < 10 ? '0' + n : n;\n }\n\n var cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g,\n gap,\n indent,\n meta = { // table of character substitutions\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"' : '\\\\\"',\n '\\\\': '\\\\\\\\'\n },\n rep;\n\n\n function quote(string) {\n\n// If the string contains no control characters, no quote characters, and no\n// backslash characters, then we can safely slap some quotes around it.\n// Otherwise we must also replace the offending characters with safe escape\n// sequences.\n\n escapable.lastIndex = 0;\n return escapable.test(string) ? '\"' + string.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string'\n ? c\n : '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' : '\"' + string + '\"';\n }\n\n\n function str(key, holder) {\n\n// Produce a string from holder[key].\n\n var i, // The loop counter.\n k, // The member key.\n v, // The member value.\n length,\n mind = gap,\n partial,\n value = holder[key],\n isBigNumber = value != null && (value instanceof BigNumber || BigNumber.isBigNumber(value));\n\n// If the value has a toJSON method, call it to obtain a replacement value.\n\n if (value && typeof value === 'object' &&\n typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n// If we were called with a replacer function, then call the replacer to\n// obtain a replacement value.\n\n if (typeof rep === 'function') {\n value = rep.call(holder, key, value);\n }\n\n// What happens next depends on the value's type.\n\n switch (typeof value) {\n case 'string':\n if (isBigNumber) {\n return value;\n } else {\n return quote(value);\n }\n\n case 'number':\n\n// JSON numbers must be finite. Encode non-finite numbers as null.\n\n return isFinite(value) ? String(value) : 'null';\n\n case 'boolean':\n case 'null':\n case 'bigint':\n\n// If the value is a boolean or null, convert it to a string. Note:\n// typeof null does not produce 'null'. The case is included here in\n// the remote chance that this gets fixed someday.\n\n return String(value);\n\n// If the type is 'object', we might be dealing with an object or an array or\n// null.\n\n case 'object':\n\n// Due to a specification blunder in ECMAScript, typeof null is 'object',\n// so watch out for that case.\n\n if (!value) {\n return 'null';\n }\n\n// Make an array to hold the partial results of stringifying this object value.\n\n gap += indent;\n partial = [];\n\n// Is the value an array?\n\n if (Object.prototype.toString.apply(value) === '[object Array]') {\n\n// The value is an array. Stringify every element. Use null as a placeholder\n// for non-JSON values.\n\n length = value.length;\n for (i = 0; i < length; i += 1) {\n partial[i] = str(i, value) || 'null';\n }\n\n// Join all of the elements together, separated with commas, and wrap them in\n// brackets.\n\n v = partial.length === 0\n ? '[]'\n : gap\n ? '[\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + ']'\n : '[' + partial.join(',') + ']';\n gap = mind;\n return v;\n }\n\n// If the replacer is an array, use it to select the members to be stringified.\n\n if (rep && typeof rep === 'object') {\n length = rep.length;\n for (i = 0; i < length; i += 1) {\n if (typeof rep[i] === 'string') {\n k = rep[i];\n v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n }\n }\n } else {\n\n// Otherwise, iterate through all of the keys in the object.\n\n Object.keys(value).forEach(function(k) {\n var v = str(k, value);\n if (v) {\n partial.push(quote(k) + (gap ? ': ' : ':') + v);\n }\n });\n }\n\n// Join all of the member texts together, separated with commas,\n// and wrap them in braces.\n\n v = partial.length === 0\n ? '{}'\n : gap\n ? '{\\n' + gap + partial.join(',\\n' + gap) + '\\n' + mind + '}'\n : '{' + partial.join(',') + '}';\n gap = mind;\n return v;\n }\n }\n\n// If the JSON object does not yet have a stringify method, give it one.\n\n if (typeof JSON.stringify !== 'function') {\n JSON.stringify = function (value, replacer, space) {\n\n// The stringify method takes a value and an optional replacer, and an optional\n// space parameter, and returns a JSON text. The replacer can be a function\n// that can replace values, or an array of strings that will select the keys.\n// A default replacer method can be provided. Use of the space parameter can\n// produce text that is more easily readable.\n\n var i;\n gap = '';\n indent = '';\n\n// If the space parameter is a number, make an indent string containing that\n// many spaces.\n\n if (typeof space === 'number') {\n for (i = 0; i < space; i += 1) {\n indent += ' ';\n }\n\n// If the space parameter is a string, it will be used as the indent string.\n\n } else if (typeof space === 'string') {\n indent = space;\n }\n\n// If there is a replacer, it must be a function or an array.\n// Otherwise, throw an error.\n\n rep = replacer;\n if (replacer && typeof replacer !== 'function' &&\n (typeof replacer !== 'object' ||\n typeof replacer.length !== 'number')) {\n throw new Error('JSON.stringify');\n }\n\n// Make a fake root object containing our value under the key of ''.\n// Return the result of stringifying the value.\n\n return str('', {'': value});\n };\n }\n}());\n","var BigNumber = null;\n\n// regexpxs extracted from\n// (c) BSD-3-Clause\n// https://github.com/fastify/secure-json-parse/graphs/contributors and https://github.com/hapijs/bourne/graphs/contributors\n\nconst suspectProtoRx = /(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])/;\nconst suspectConstructorRx = /(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)/;\n\n/*\n json_parse.js\n 2012-06-20\n\n Public Domain.\n\n NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.\n\n This file creates a json_parse function.\n During create you can (optionally) specify some behavioural switches\n\n require('json-bigint')(options)\n\n The optional options parameter holds switches that drive certain\n aspects of the parsing process:\n * options.strict = true will warn about duplicate-key usage in the json.\n The default (strict = false) will silently ignore those and overwrite\n values for keys that are in duplicate use.\n\n The resulting function follows this signature:\n json_parse(text, reviver)\n This method parses a JSON text to produce an object or array.\n It can throw a SyntaxError exception.\n\n The optional reviver parameter is a function that can filter and\n transform the results. It receives each of the keys and values,\n and its return value is used instead of the original value.\n If it returns what it received, then the structure is not modified.\n If it returns undefined then the member is deleted.\n\n Example:\n\n // Parse the text. Values that look like ISO date strings will\n // be converted to Date objects.\n\n myData = json_parse(text, function (key, value) {\n var a;\n if (typeof value === 'string') {\n a =\n/^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)Z$/.exec(value);\n if (a) {\n return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],\n +a[5], +a[6]));\n }\n }\n return value;\n });\n\n This is a reference implementation. You are free to copy, modify, or\n redistribute.\n\n This code should be minified before deployment.\n See http://javascript.crockford.com/jsmin.html\n\n USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO\n NOT CONTROL.\n*/\n\n/*members \"\", \"\\\"\", \"\\/\", \"\\\\\", at, b, call, charAt, f, fromCharCode,\n hasOwnProperty, message, n, name, prototype, push, r, t, text\n*/\n\nvar json_parse = function (options) {\n 'use strict';\n\n // This is a function that can parse a JSON text, producing a JavaScript\n // data structure. It is a simple, recursive descent parser. It does not use\n // eval or regular expressions, so it can be used as a model for implementing\n // a JSON parser in other languages.\n\n // We are defining the function inside of another function to avoid creating\n // global variables.\n\n // Default options one can override by passing options to the parse()\n var _options = {\n strict: false, // not being strict means do not generate syntax errors for \"duplicate key\"\n storeAsString: false, // toggles whether the values should be stored as BigNumber (default) or a string\n alwaysParseAsBig: false, // toggles whether all numbers should be Big\n useNativeBigInt: false, // toggles whether to use native BigInt instead of bignumber.js\n protoAction: 'error',\n constructorAction: 'error',\n };\n\n // If there are options, then use them to override the default _options\n if (options !== undefined && options !== null) {\n if (options.strict === true) {\n _options.strict = true;\n }\n if (options.storeAsString === true) {\n _options.storeAsString = true;\n }\n _options.alwaysParseAsBig =\n options.alwaysParseAsBig === true ? options.alwaysParseAsBig : false;\n _options.useNativeBigInt =\n options.useNativeBigInt === true ? options.useNativeBigInt : false;\n\n if (typeof options.constructorAction !== 'undefined') {\n if (\n options.constructorAction === 'error' ||\n options.constructorAction === 'ignore' ||\n options.constructorAction === 'preserve'\n ) {\n _options.constructorAction = options.constructorAction;\n } else {\n throw new Error(\n `Incorrect value for constructorAction option, must be \"error\", \"ignore\" or undefined but passed ${options.constructorAction}`\n );\n }\n }\n\n if (typeof options.protoAction !== 'undefined') {\n if (\n options.protoAction === 'error' ||\n options.protoAction === 'ignore' ||\n options.protoAction === 'preserve'\n ) {\n _options.protoAction = options.protoAction;\n } else {\n throw new Error(\n `Incorrect value for protoAction option, must be \"error\", \"ignore\" or undefined but passed ${options.protoAction}`\n );\n }\n }\n }\n\n var at, // The index of the current character\n ch, // The current character\n escapee = {\n '\"': '\"',\n '\\\\': '\\\\',\n '/': '/',\n b: '\\b',\n f: '\\f',\n n: '\\n',\n r: '\\r',\n t: '\\t',\n },\n text,\n error = function (m) {\n // Call error when something is wrong.\n\n throw {\n name: 'SyntaxError',\n message: m,\n at: at,\n text: text,\n };\n },\n next = function (c) {\n // If a c parameter is provided, verify that it matches the current character.\n\n if (c && c !== ch) {\n error(\"Expected '\" + c + \"' instead of '\" + ch + \"'\");\n }\n\n // Get the next character. When there are no more characters,\n // return the empty string.\n\n ch = text.charAt(at);\n at += 1;\n return ch;\n },\n number = function () {\n // Parse a number value.\n\n var number,\n string = '';\n\n if (ch === '-') {\n string = '-';\n next('-');\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n if (ch === '.') {\n string += '.';\n while (next() && ch >= '0' && ch <= '9') {\n string += ch;\n }\n }\n if (ch === 'e' || ch === 'E') {\n string += ch;\n next();\n if (ch === '-' || ch === '+') {\n string += ch;\n next();\n }\n while (ch >= '0' && ch <= '9') {\n string += ch;\n next();\n }\n }\n number = +string;\n if (!isFinite(number)) {\n error('Bad number');\n } else {\n if (BigNumber == null) BigNumber = require('bignumber.js');\n //if (number > 9007199254740992 || number < -9007199254740992)\n // Bignumber has stricter check: everything with length > 15 digits disallowed\n if (string.length > 15)\n return _options.storeAsString\n ? string\n : _options.useNativeBigInt\n ? BigInt(string)\n : new BigNumber(string);\n else\n return !_options.alwaysParseAsBig\n ? number\n : _options.useNativeBigInt\n ? BigInt(number)\n : new BigNumber(number);\n }\n },\n string = function () {\n // Parse a string value.\n\n var hex,\n i,\n string = '',\n uffff;\n\n // When parsing for string values, we must look for \" and \\ characters.\n\n if (ch === '\"') {\n var startAt = at;\n while (next()) {\n if (ch === '\"') {\n if (at - 1 > startAt) string += text.substring(startAt, at - 1);\n next();\n return string;\n }\n if (ch === '\\\\') {\n if (at - 1 > startAt) string += text.substring(startAt, at - 1);\n next();\n if (ch === 'u') {\n uffff = 0;\n for (i = 0; i < 4; i += 1) {\n hex = parseInt(next(), 16);\n if (!isFinite(hex)) {\n break;\n }\n uffff = uffff * 16 + hex;\n }\n string += String.fromCharCode(uffff);\n } else if (typeof escapee[ch] === 'string') {\n string += escapee[ch];\n } else {\n break;\n }\n startAt = at;\n }\n }\n }\n error('Bad string');\n },\n white = function () {\n // Skip whitespace.\n\n while (ch && ch <= ' ') {\n next();\n }\n },\n word = function () {\n // true, false, or null.\n\n switch (ch) {\n case 't':\n next('t');\n next('r');\n next('u');\n next('e');\n return true;\n case 'f':\n next('f');\n next('a');\n next('l');\n next('s');\n next('e');\n return false;\n case 'n':\n next('n');\n next('u');\n next('l');\n next('l');\n return null;\n }\n error(\"Unexpected '\" + ch + \"'\");\n },\n value, // Place holder for the value function.\n array = function () {\n // Parse an array value.\n\n var array = [];\n\n if (ch === '[') {\n next('[');\n white();\n if (ch === ']') {\n next(']');\n return array; // empty array\n }\n while (ch) {\n array.push(value());\n white();\n if (ch === ']') {\n next(']');\n return array;\n }\n next(',');\n white();\n }\n }\n error('Bad array');\n },\n object = function () {\n // Parse an object value.\n\n var key,\n object = Object.create(null);\n\n if (ch === '{') {\n next('{');\n white();\n if (ch === '}') {\n next('}');\n return object; // empty object\n }\n while (ch) {\n key = string();\n white();\n next(':');\n if (\n _options.strict === true &&\n Object.hasOwnProperty.call(object, key)\n ) {\n error('Duplicate key \"' + key + '\"');\n }\n\n if (suspectProtoRx.test(key) === true) {\n if (_options.protoAction === 'error') {\n error('Object contains forbidden prototype property');\n } else if (_options.protoAction === 'ignore') {\n value();\n } else {\n object[key] = value();\n }\n } else if (suspectConstructorRx.test(key) === true) {\n if (_options.constructorAction === 'error') {\n error('Object contains forbidden constructor property');\n } else if (_options.constructorAction === 'ignore') {\n value();\n } else {\n object[key] = value();\n }\n } else {\n object[key] = value();\n }\n\n white();\n if (ch === '}') {\n next('}');\n return object;\n }\n next(',');\n white();\n }\n }\n error('Bad object');\n };\n\n value = function () {\n // Parse a JSON value. It could be an object, an array, a string, a number,\n // or a word.\n\n white();\n switch (ch) {\n case '{':\n return object();\n case '[':\n return array();\n case '\"':\n return string();\n case '-':\n return number();\n default:\n return ch >= '0' && ch <= '9' ? number() : word();\n }\n };\n\n // Return the json_parse function. It will have access to all of the above\n // functions and variables.\n\n return function (source, reviver) {\n var result;\n\n text = source + '';\n at = 0;\n ch = ' ';\n result = value();\n white();\n if (ch) {\n error('Syntax error');\n }\n\n // If there is a reviver function, we recursively walk the new structure,\n // passing each name/value pair to the reviver function for possible\n // transformation, starting with a temporary root object that holds the result\n // in an empty key. If there is not a reviver function, we simply return the\n // result.\n\n return typeof reviver === 'function'\n ? (function walk(holder, key) {\n var k,\n v,\n value = holder[key];\n if (value && typeof value === 'object') {\n Object.keys(value).forEach(function (k) {\n v = walk(value, k);\n if (v !== undefined) {\n value[k] = v;\n } else {\n delete value[k];\n }\n });\n }\n return reviver.call(holder, key, value);\n })({ '': result }, '')\n : result;\n };\n};\n\nmodule.exports = json_parse;\n","var json_stringify = require('./lib/stringify.js').stringify;\nvar json_parse = require('./lib/parse.js');\n\nmodule.exports = function(options) {\n return {\n parse: json_parse(options),\n stringify: json_stringify\n }\n};\n//create the default method members with no options applied for backwards compatibility\nmodule.exports.parse = json_parse();\nmodule.exports.stringify = json_stringify;\n","(function (name, context, definition) {\n if (typeof module !== 'undefined' && module.exports) module.exports = definition();\n else if (typeof define === 'function' && define.amd) define(definition);\n else context[name] = definition();\n})('urljoin', this, function () {\n\n function normalize (strArray) {\n var resultArray = [];\n if (strArray.length === 0) { return ''; }\n\n if (typeof strArray[0] !== 'string') {\n throw new TypeError('Url must be a string. Received ' + strArray[0]);\n }\n\n // If the first part is a plain protocol, we combine it with the next part.\n if (strArray[0].match(/^[^/:]+:\\/*$/) && strArray.length > 1) {\n var first = strArray.shift();\n strArray[0] = first + strArray[0];\n }\n\n // There must be two or three slashes in the file protocol, two slashes in anything else.\n if (strArray[0].match(/^file:\\/\\/\\//)) {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1:///');\n } else {\n strArray[0] = strArray[0].replace(/^([^/:]+):\\/*/, '$1://');\n }\n\n for (var i = 0; i < strArray.length; i++) {\n var component = strArray[i];\n\n if (typeof component !== 'string') {\n throw new TypeError('Url must be a string. Received ' + component);\n }\n\n if (component === '') { continue; }\n\n if (i > 0) {\n // Removing the starting slashes for each component but the first.\n component = component.replace(/^[\\/]+/, '');\n }\n if (i < strArray.length - 1) {\n // Removing the ending slashes for each component but the last.\n component = component.replace(/[\\/]+$/, '');\n } else {\n // For the last component we will combine multiple slashes to a single one.\n component = component.replace(/[\\/]+$/, '/');\n }\n\n resultArray.push(component);\n\n }\n\n var str = resultArray.join('/');\n // Each input component is now separated by a single slash except the possible first plain protocol part.\n\n // remove trailing slash before parameters or hash\n str = str.replace(/\\/(\\?|&|#[^!])/g, '$1');\n\n // replace ? in parameters with &\n var parts = str.split('?');\n str = parts.shift() + (parts.length > 0 ? '?': '') + parts.join('&');\n\n return str;\n }\n\n return function () {\n var input;\n\n if (typeof arguments[0] === 'object') {\n input = arguments[0];\n } else {\n input = [].slice.call(arguments);\n }\n\n return normalize(input);\n };\n\n});\n","/**\n * Main\n */\nexport * from './contract';\nexport * from './types';\nexport * from './provider';\nexport * from './account';\nexport * from './signer';\n\n/**\n * Utils\n */\nexport * as constants from './constants';\nexport * as encode from './utils/encode';\nexport * as hash from './utils/hash';\nexport * as json from './utils/json';\nexport * as number from './utils/number';\nexport * as transaction from './utils/transaction';\nexport * as stark from './utils/stark';\nexport * as merkle from './utils/merkle';\nexport * as ec from './utils/ellipticCurve';\nexport * as uint256 from './utils/uint256';\nexport * as shortString from './utils/shortString';\nexport * as typedData from './utils/typedData';\nexport * from './utils/address';\nexport * from './utils/url';\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AbiEntry,\n Args,\n AsyncContractFunction,\n Call,\n Calldata,\n ContractFunction,\n FunctionAbi,\n InvokeFunctionResponse,\n Overrides,\n ParsedStruct,\n Result,\n StructAbi,\n} from '../types';\nimport { BigNumberish, toBN, toFelt } from '../utils/number';\nimport { ContractInterface } from './interface';\n\nfunction parseFelt(candidate: string): BN {\n try {\n return toBN(candidate);\n } catch (e) {\n throw Error('Couldnt parse felt');\n }\n}\n\n/**\n * Adds call methods to the contract\n *\n */\nfunction buildCall(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n return contract.call(functionAbi.name, args);\n };\n}\n\n/**\n * Adds invoke methods to the contract\n *\n */\nfunction buildInvoke(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n return async function (...args: Array<any>): Promise<any> {\n const { inputs } = functionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n const options = {};\n if (inputsLength + 1 === args.length && typeof args[args.length - 1] === 'object') {\n Object.assign(options, args.pop());\n }\n return contract.invoke(functionAbi.name, args, options);\n };\n}\n\n/**\n * Adds call/invoke methods to the contract\n *\n */\nfunction buildDefault(contract: Contract, functionAbi: FunctionAbi): AsyncContractFunction {\n if (functionAbi.stateMutability === 'view') {\n return buildCall(contract, functionAbi);\n }\n return buildInvoke(contract, functionAbi);\n}\n\n/**\n * Adds populate for methods to the contract\n *\n */\nfunction buildPopulate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.populate(functionAbi.name, args);\n };\n}\n\n/**\n * Adds estimateFee for methods to the contract\n *\n */\nfunction buildEstimate(contract: Contract, functionAbi: FunctionAbi): ContractFunction {\n return function (...args: Array<any>): any {\n return contract.estimate(functionAbi.name, args);\n };\n}\n\nexport class Contract implements ContractInterface {\n abi: Abi;\n\n address: string;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n deployTransactionHash?: string;\n\n protected readonly structs: { [name: string]: StructAbi };\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Contract class to handle contract methods\n *\n * @param abi - Abi of the contract object\n * @param address (optional) - address to connect to\n * @param providerOrAccount (optional) - Provider or Account to attach to\n */\n constructor(\n abi: Abi,\n address: string,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider\n ) {\n this.address = address && address.toLowerCase();\n this.providerOrAccount = providerOrAccount;\n this.abi = abi;\n this.structs = abi\n .filter((abiEntry) => abiEntry.type === 'struct')\n .reduce(\n (acc, abiEntry) => ({\n ...acc,\n [abiEntry.name]: abiEntry,\n }),\n {}\n );\n\n Object.defineProperty(this, 'functions', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'callStatic', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'populateTransaction', {\n enumerable: true,\n value: {},\n writable: false,\n });\n Object.defineProperty(this, 'estimateFee', {\n enumerable: true,\n value: {},\n writable: false,\n });\n this.abi.forEach((abiElement) => {\n if (abiElement.type !== 'function') {\n return;\n }\n const signature = abiElement.name;\n if (!this[signature]) {\n Object.defineProperty(this, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n if (!this.functions[signature]) {\n Object.defineProperty(this.functions, signature, {\n enumerable: true,\n value: buildDefault(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.callStatic[signature]) {\n Object.defineProperty(this.callStatic, signature, {\n enumerable: true,\n value: buildCall(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.populateTransaction[signature]) {\n Object.defineProperty(this.populateTransaction, signature, {\n enumerable: true,\n value: buildPopulate(this, abiElement),\n writable: false,\n });\n }\n\n if (!this.estimateFee[signature]) {\n Object.defineProperty(this.estimateFee, signature, {\n enumerable: true,\n value: buildEstimate(this, abiElement),\n writable: false,\n });\n }\n });\n }\n\n public attach(address: string): void {\n this.address = address;\n }\n\n public connect(providerOrAccount: ProviderInterface | AccountInterface) {\n this.providerOrAccount = providerOrAccount;\n }\n\n public async deployed(): Promise<Contract> {\n if (this.deployTransactionHash) {\n await this.providerOrAccount.waitForTransaction(this.deployTransactionHash);\n this.deployTransactionHash = undefined;\n }\n return this;\n }\n\n public async call(\n method: string,\n args: Array<any> = [],\n {\n blockIdentifier = 'pending',\n }: {\n blockIdentifier?: BlockIdentifier;\n } = {}\n ): Promise<Result> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.validateMethodAndArgs('CALL', method, args);\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n\n // compile calldata\n const calldata = this.compileCalldata(args, inputs);\n return this.providerOrAccount\n .callContract(\n {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n },\n blockIdentifier\n )\n .then((x) => this.parseResponse(method, x.result));\n }\n\n public invoke(\n method: string,\n args: Array<any> = [],\n options: Overrides = {}\n ): Promise<InvokeFunctionResponse> {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n // validate method and args\n this.validateMethodAndArgs('INVOKE', method, args);\n\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const inputsLength = inputs.reduce((acc, input) => {\n if (!/_len$/.test(input.name)) {\n return acc + 1;\n }\n return acc;\n }, 0);\n\n if (args.length !== inputsLength) {\n throw Error(\n `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`\n );\n }\n // compile calldata\n const calldata = this.compileCalldata(args, inputs);\n\n const invocation = {\n contractAddress: this.address,\n calldata,\n entrypoint: method,\n };\n if ('execute' in this.providerOrAccount) {\n return this.providerOrAccount.execute(invocation, undefined, {\n maxFee: options.maxFee,\n nonce: options.nonce,\n });\n }\n\n if (!options.nonce) {\n throw new Error(`Nonce is required when invoking a function without an account`);\n }\n\n // eslint-disable-next-line no-console\n console.warn(`Invoking ${method} without an account. This will not work on a public node.`);\n\n return this.providerOrAccount.invokeFunction(\n {\n ...invocation,\n signature: options.signature || [],\n },\n {\n nonce: options.nonce,\n }\n );\n }\n\n public async estimate(method: string, args: Array<any> = []) {\n // ensure contract is connected\n assert(this.address !== null, 'contract is not connected to an address');\n\n // validate method and args\n this.validateMethodAndArgs('INVOKE', method, args);\n const invocation = this.populateTransaction[method](...args);\n if ('estimateInvokeFee' in this.providerOrAccount) {\n return this.providerOrAccount.estimateInvokeFee(invocation);\n }\n throw Error('Contract must be connected to the account contract to estimate');\n }\n\n public populate(method: string, args: Array<any> = []): Call {\n const { inputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n return {\n contractAddress: this.address,\n entrypoint: method,\n calldata: this.compileCalldata(args, inputs),\n };\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param struct - struct that needs to be calculated\n * @return {number} - number of members for the given struct\n */\n private calculateStructMembers(struct: string): number {\n return this.structs[struct].members.reduce((acc, member) => {\n if (member.type === 'felt') {\n return acc + 1;\n }\n return acc + this.calculateStructMembers(member.type);\n }, 0);\n }\n\n /**\n * Validates if all arguments that are passed to the method are corresponding to the ones in the abi\n *\n * @param type - type of the method\n * @param method - name of the method\n * @param args - arguments that are passed to the method\n */\n protected validateMethodAndArgs(type: 'INVOKE' | 'CALL', method: string, args: Array<any> = []) {\n // ensure provided method exists\n const invokeableFunctionNames = this.abi\n .filter((abi) => {\n if (abi.type !== 'function') return false;\n const isView = abi.stateMutability === 'view';\n return type === 'INVOKE' ? !isView : isView;\n })\n .map((abi) => abi.name);\n assert(\n invokeableFunctionNames.includes(method),\n `${type === 'INVOKE' ? 'invokeable' : 'viewable'} method not found in abi`\n );\n\n // ensure args match abi type\n const methodAbi = this.abi.find(\n (abi) => abi.name === method && abi.type === 'function'\n ) as FunctionAbi;\n let argPosition = 0;\n methodAbi.inputs.forEach((input) => {\n if (/_len$/.test(input.name)) {\n return;\n }\n if (input.type === 'felt') {\n assert(\n typeof args[argPosition] === 'string' ||\n typeof args[argPosition] === 'number' ||\n args[argPosition] instanceof BN,\n `arg ${input.name} should be a felt (string, number, BigNumber)`\n );\n argPosition += 1;\n } else if (input.type in this.structs && typeof args[argPosition] === 'object') {\n if (Array.isArray(args[argPosition])) {\n const structMembersLength = this.calculateStructMembers(input.type);\n assert(\n args[argPosition].length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n this.structs[input.type].members.forEach(({ name }) => {\n assert(\n Object.keys(args[argPosition]).includes(name),\n `arg should have a property ${name}`\n );\n });\n }\n argPosition += 1;\n } else {\n assert(Array.isArray(args[argPosition]), `arg ${input.name} should be an Array`);\n if (input.type === 'felt*') {\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else if (/\\(felt/.test(input.type)) {\n const tupleLength = input.type.split(',').length;\n assert(\n args[argPosition].length === tupleLength,\n `arg ${input.name} should have ${tupleLength} elements in tuple`\n );\n args[argPosition].forEach((felt: BigNumberish) => {\n assert(\n typeof felt === 'string' || typeof felt === 'number' || felt instanceof BN,\n `arg ${input.name} should be an array of string, number or BigNumber`\n );\n });\n argPosition += 1;\n } else {\n const arrayType = input.type.replace('*', '');\n args[argPosition].forEach((struct: any) => {\n this.structs[arrayType].members.forEach(({ name }) => {\n if (Array.isArray(struct)) {\n const structMembersLength = this.calculateStructMembers(arrayType);\n assert(\n struct.length === structMembersLength,\n `arg should be of length ${structMembersLength}`\n );\n } else {\n assert(\n Object.keys(struct).includes(name),\n `arg ${input.name} should be an array of ${arrayType}`\n );\n }\n });\n });\n argPosition += 1;\n }\n }\n });\n }\n\n /**\n * Deep parse of the object that has been passed to the method\n *\n * @param element - element that needs to be parsed\n * @param type - name of the method\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n\n protected parseCalldataValue(\n element: ParsedStruct | BigNumberish | BigNumberish[],\n type: string\n ): string | string[] {\n if (element === undefined) {\n throw Error('Missing element in calldata');\n }\n if (Array.isArray(element)) {\n const structMemberNum = this.calculateStructMembers(type);\n if (element.length !== structMemberNum) {\n throw Error('Missing element in calldata');\n }\n return element.map((el) => toFelt(el));\n }\n // checking if the passed element is struct or element in struct\n if (this.structs[type] && this.structs[type].members.length) {\n // going through all the members of the struct and parsing the value\n return this.structs[type].members.reduce((acc, member: AbiEntry) => {\n // if the member of the struct is another struct this will return array of the felts if not it will be single felt\n // TODO: refactor types so member name can be used as keyof ParsedStruct\n /* @ts-ignore */\n const parsedData = this.parseCalldataValue(element[member.name], member.type);\n if (typeof parsedData === 'string') {\n acc.push(parsedData);\n } else {\n acc.push(...parsedData);\n }\n return acc;\n }, [] as string[]);\n }\n return toFelt(element as BigNumberish);\n }\n\n /**\n * Parse of the response elements that are converted to Object (Struct) by using the abi\n *\n * @param responseIterator - iterator of the response\n * @param type - type of the struct\n * @return {BigNumberish | ParsedStruct} - parsed arguments in format that contract is expecting\n */\n protected parseResponseStruct(\n responseIterator: Iterator<string>,\n type: string\n ): BigNumberish | ParsedStruct {\n // check the type of current element\n if (type in this.structs && this.structs[type]) {\n return this.structs[type].members.reduce((acc, el) => {\n // parse each member of the struct (member can felt or nested struct)\n acc[el.name] = this.parseResponseStruct(responseIterator, el.type);\n return acc;\n }, {} as any);\n }\n return parseFelt(responseIterator.next().value);\n }\n\n /**\n * Parse one field of the calldata by using input field from the abi for that method\n *\n * @param args - value of the field\n * @param input - input(field) information from the abi that will be used to parse the data\n * @return {string | string[]} - parsed arguments in format that contract is expecting\n */\n protected parseCalldataField(argsIterator: Iterator<any>, input: AbiEntry): string | string[] {\n const { name, type } = input;\n const { value } = argsIterator.next();\n\n const parsedCalldata: string[] = [];\n switch (true) {\n case /\\*/.test(type):\n if (Array.isArray(value)) {\n parsedCalldata.push(toFelt(value.length));\n return (value as (BigNumberish | ParsedStruct)[]).reduce((acc, el) => {\n if (/felt/.test(type)) {\n acc.push(toFelt(el as BigNumberish));\n } else {\n acc.push(...this.parseCalldataValue(el, type.replace('*', '')));\n }\n return acc;\n }, parsedCalldata);\n }\n throw Error(`Expected ${name} to be array`);\n case type in this.structs:\n return this.parseCalldataValue(value as ParsedStruct | BigNumberish[], type);\n case /\\(felt/.test(type):\n if (Array.isArray(value)) {\n return value.map((el) => toFelt(el as BigNumberish));\n }\n throw Error(`Expected ${name} to be array`);\n default:\n return toFelt(value as BigNumberish);\n }\n }\n\n /**\n * Parse the calldata by using input fields from the abi for that method\n *\n * @param args - arguments passed the the method\n * @param inputs - list of inputs(fields) that are in the abi\n * @return {Calldata} - parsed arguments in format that contract is expecting\n */\n protected compileCalldata(args: Array<any>, inputs: AbiEntry[]): Calldata {\n const argsIterator = args[Symbol.iterator]();\n return inputs.reduce((acc, input) => {\n if (/_len$/.test(input.name)) {\n return acc;\n }\n const parsedData = this.parseCalldataField(argsIterator, input);\n if (Array.isArray(parsedData)) {\n acc.push(...parsedData);\n } else {\n acc.push(parsedData);\n }\n return acc;\n }, [] as Calldata);\n }\n\n /**\n * Parse elements of the response and structuring them into one field by using output property from the abi for that method\n *\n * @param responseIterator - iterator of the response\n * @param output - output(field) information from the abi that will be used to parse the data\n * @return - parsed response corresponding to the abi structure of the field\n */\n protected parseResponseField(\n responseIterator: Iterator<string>,\n output: AbiEntry,\n parsedResult?: Args\n ): any {\n const { name, type } = output;\n const parsedDataArr: (BigNumberish | ParsedStruct)[] = [];\n switch (true) {\n case /_len$/.test(name):\n return parseFelt(responseIterator.next().value).toNumber();\n case /\\(felt/.test(type):\n return type.split(',').reduce((acc) => {\n acc.push(parseFelt(responseIterator.next().value));\n return acc;\n }, [] as BigNumberish[]);\n case /\\*/.test(type):\n if (parsedResult && parsedResult[`${name}_len`]) {\n const arrLen = parsedResult[`${name}_len`] as number;\n while (parsedDataArr.length < arrLen) {\n parsedDataArr.push(\n this.parseResponseStruct(responseIterator, output.type.replace('*', ''))\n );\n }\n }\n return parsedDataArr;\n case type in this.structs:\n return this.parseResponseStruct(responseIterator, type);\n default:\n return parseFelt(responseIterator.next().value);\n }\n }\n\n /**\n * Parse elements of the response array and structuring them into response object\n *\n * @param method - method name\n * @param response - response from the method\n * @return - parsed response corresponding to the abi\n */\n protected parseResponse(method: string, response: string[]): Result {\n const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;\n const responseIterator = response.flat()[Symbol.iterator]();\n const resultObject = outputs.flat().reduce((acc, output) => {\n acc[output.name] = this.parseResponseField(responseIterator, output, acc);\n if (acc[output.name] && acc[`${output.name}_len`]) {\n delete acc[`${output.name}_len`];\n }\n return acc;\n }, {} as Args);\n return Object.entries(resultObject).reduce((acc, [key, value]) => {\n acc.push(value);\n acc[key] = value;\n return acc;\n }, [] as Result);\n }\n}\n","import isomorphicFetch from 'isomorphic-fetch';\n\nexport default (typeof window !== 'undefined' && window.fetch) || // use buildin fetch in browser if available\n (typeof global !== 'undefined' && global.fetch) || // use buildin fetch in node, react-native and service worker if available\n isomorphicFetch; // ponyfill fetch in node and browsers that don't have it\n","/* eslint-disable import/extensions */\nimport BN from 'bn.js';\nimport { keccak256 } from 'ethereum-cryptography/keccak.js';\nimport { hexToBytes } from 'ethereum-cryptography/utils.js';\nimport assert from 'minimalistic-assert';\n\nimport {\n CONSTANT_POINTS,\n FIELD_PRIME,\n MASK_250,\n ONE,\n StarknetChainId,\n TransactionHashPrefix,\n ZERO,\n} from '../constants';\nimport { RawCalldata } from '../types/lib';\nimport { ec } from './ellipticCurve';\nimport { addHexPrefix, buf2hex, removeHexPrefix, utf8ToArray } from './encode';\nimport {\n BigNumberish,\n isHex,\n isStringWholeNumber,\n toBN,\n toFelt,\n toHex,\n toHexString,\n} from './number';\n\nexport const transactionVersion = 1;\nexport const feeTransactionVersion = toBN(2).pow(toBN(128)).add(toBN(transactionVersion));\n\nexport function keccakBn(value: BigNumberish): string {\n const hexWithoutPrefix = removeHexPrefix(toHex(toBN(value)));\n const evenHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;\n return addHexPrefix(buf2hex(keccak256(hexToBytes(evenHex))));\n}\n\nfunction keccakHex(value: string): string {\n return addHexPrefix(buf2hex(keccak256(utf8ToArray(value))));\n}\n\n/**\n * Function to get the starknet keccak hash from a string\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L17-L22)\n * @param value - string you want to get the starknetKeccak hash from\n * @returns starknet keccak hash as BigNumber\n */\nexport function starknetKeccak(value: string): BN {\n return toBN(keccakHex(value)).and(MASK_250);\n}\n\n/**\n * Function to get the hex selector from a given function name\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/public/abi.py#L25-L26)\n * @param funcName - selectors abi function name\n * @returns hex selector of given abi function name\n */\nexport function getSelectorFromName(funcName: string) {\n // sometimes BigInteger pads the hex string with zeros, which is not allowed in the starknet api\n return toHex(starknetKeccak(funcName));\n}\n\n/**\n * Function to get hex selector from function name, decimal string or hex string\n * @param value hex string | decimal string | string\n * @returns Hex selector\n */\nexport function getSelector(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n return getSelectorFromName(value);\n}\n\nconst constantPoints = CONSTANT_POINTS.map((coords: string[]) =>\n ec.curve.point(coords[0], coords[1])\n);\n\nexport function pedersen(input: [BigNumberish, BigNumberish]) {\n let point = constantPoints[0];\n for (let i = 0; i < input.length; i += 1) {\n let x = toBN(input[i]);\n assert(x.gte(ZERO) && x.lt(toBN(addHexPrefix(FIELD_PRIME))), `Invalid input: ${input[i]}`);\n if (!x.isZero()) {\n for (let j = 0; j < 252; j += 1) {\n const pt = constantPoints[2 + i * 252 + j];\n assert(!point.getX().eq(pt.getX()));\n if (x.and(ONE).toNumber() !== 0) {\n point = point.add(pt);\n }\n x = x.shrn(1);\n }\n }\n }\n return addHexPrefix(point.getX().toString(16));\n}\n\nexport function computeHashOnElements(data: BigNumberish[]) {\n return [...data, data.length].reduce((x, y) => pedersen([x, y]), 0).toString();\n}\n\n// following implementation is based on this python implementation:\n// https://github.com/starkware-libs/cairo-lang/blob/b614d1867c64f3fb2cf4a4879348cfcf87c3a5a7/src/starkware/starknet/core/os/transaction_hash/transaction_hash.py\n\nexport function calculateTransactionHashCommon(\n txHashPrefix: TransactionHashPrefix,\n version: BigNumberish,\n contractAddress: BigNumberish,\n entryPointSelector: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n additionalData: BigNumberish[] = []\n): string {\n const calldataHash = computeHashOnElements(calldata);\n const dataToHash = [\n txHashPrefix,\n version,\n contractAddress,\n entryPointSelector,\n calldataHash,\n maxFee,\n chainId,\n ...additionalData,\n ];\n return computeHashOnElements(dataToHash);\n}\n\nexport function calculateDeployTransactionHash(\n contractAddress: BigNumberish,\n constructorCalldata: BigNumberish[],\n version: BigNumberish,\n chainId: StarknetChainId\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY,\n version,\n contractAddress,\n getSelectorFromName('constructor'),\n constructorCalldata,\n ZERO,\n chainId\n );\n}\n\nexport function calculateDeclareTransactionHash(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n classHash: BigNumberish,\n senderAddress: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DECLARE,\n version,\n senderAddress,\n 0,\n [classHash],\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateDeployAccountTransactionHash(\n contractAddress: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: BigNumberish[],\n salt: BigNumberish,\n version: BigNumberish,\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n) {\n const calldata = [classHash, salt, ...constructorCalldata];\n\n return calculateTransactionHashCommon(\n TransactionHashPrefix.DEPLOY_ACCOUNT,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateTransactionHash(\n contractAddress: BigNumberish,\n version: BigNumberish,\n calldata: BigNumberish[],\n maxFee: BigNumberish,\n chainId: StarknetChainId,\n nonce: BigNumberish\n): string {\n return calculateTransactionHashCommon(\n TransactionHashPrefix.INVOKE,\n version,\n contractAddress,\n 0,\n calldata,\n maxFee,\n chainId,\n [nonce]\n );\n}\n\nexport function calculateContractAddressFromHash(\n salt: BigNumberish,\n classHash: BigNumberish,\n constructorCalldata: RawCalldata,\n deployerAddress: BigNumberish\n) {\n const constructorCalldataHash = computeHashOnElements(constructorCalldata);\n\n const CONTRACT_ADDRESS_PREFIX = toFelt('0x535441524b4e45545f434f4e54524143545f41444452455353'); // Equivalent to 'STARKNET_CONTRACT_ADDRESS'\n\n const dataToHash = [\n CONTRACT_ADDRESS_PREFIX,\n deployerAddress,\n salt,\n classHash,\n constructorCalldataHash,\n ];\n\n return computeHashOnElements(dataToHash);\n}\n","import { toBN } from './utils/number';\n\nexport { IS_BROWSER } from './utils/encode';\n\nexport const ZERO = toBN(0);\nexport const ONE = toBN(1);\nexport const TWO = toBN(2);\nexport const MASK_250 = TWO.pow(toBN(250)).sub(ONE); // 2 ** 250 - 1\nexport const MASK_251 = TWO.pow(toBN(251));\n\nexport enum StarknetChainId {\n MAINNET = '0x534e5f4d41494e', // encodeShortString('SN_MAIN'),\n TESTNET = '0x534e5f474f45524c49', // encodeShortString('SN_GOERLI'),\n TESTNET2 = '0x534e5f474f45524c4932',\n}\nexport enum TransactionHashPrefix {\n DECLARE = '0x6465636c617265', // encodeShortString('declare'),\n DEPLOY = '0x6465706c6f79', // encodeShortString('deploy'),\n DEPLOY_ACCOUNT = '0x6465706c6f795f6163636f756e74', // encodeShortString('deploy_account'),\n INVOKE = '0x696e766f6b65', // encodeShortString('invoke'),\n L1_HANDLER = '0x6c315f68616e646c6572', // encodeShortString('l1_handler'),\n}\n\nexport const UDC = {\n ADDRESS: '0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf',\n ENTRYPOINT: 'deployContract',\n};\n\n/**\n * The following is taken from https://github.com/starkware-libs/starkex-resources/blob/master/crypto/starkware/crypto/signature/pedersen_params.json but converted to hex, because JS is very bad handling big integers by default\n * Please do not edit until the JSON changes.\n */\nexport const FIELD_PRIME = '800000000000011000000000000000000000000000000000000000000000001';\nexport const FIELD_GEN = '3';\nexport const FIELD_SIZE = 251;\nexport const EC_ORDER = '800000000000010FFFFFFFFFFFFFFFFB781126DCAE7B2321E66A241ADC64D2F';\nexport const ALPHA = '1';\nexport const BETA = '6F21413EFBE40DE150E596D72F7A8C5609AD26C15C915C1F4CDFCB99CEE9E89';\nexport const MAX_ECDSA_VAL = '800000000000000000000000000000000000000000000000000000000000000';\nexport const CONSTANT_POINTS = [\n [\n '49ee3eba8c1600700ee1b87eb599f16716b0b1022947733551fde4050ca6804',\n '3ca0cfe4b3bc6ddf346d49d06ea0ed34e621062c0e056c1d0405d266e10268a',\n ],\n [\n '1ef15c18599971b7beced415a40f0c7deacfd9b0d1819e03d723d8bc943cfca',\n '5668060aa49730b7be4801df46ec62de53ecd11abe43a32873000c36e8dc1f',\n ],\n [\n '234287dcbaffe7f969c748655fca9e58fa8120b6d56eb0c1080d17957ebe47b',\n '3b056f100f96fb21e889527d41f4e39940135dd7a6c94cc6ed0268ee89e5615',\n ],\n [\n '3909690e1123c80678a7ba0fde0e8447f6f02b3f6b960034d1e93524f8b476',\n '7122e9063d239d89d4e336753845b76f2b33ca0d7f0c1acd4b9fe974994cc19',\n ],\n [\n '40fd002e38ea01a01b2702eb7c643e9decc2894cbf31765922e281939ab542c',\n '109f720a79e2a41471f054ca885efd90c8cfbbec37991d1b6343991e0a3e740',\n ],\n [\n '2f52066635c139fc2f64eb0bd5e3fd7a705f576854ec4f00aa60361fddb981b',\n '6d78a24d8a5f97fc600318ce16b3c840315979c3273078ec1a285f217ee6a26',\n ],\n [\n '6a0767a1fd60d5b9027a35af1b68e57a1c366ebcde2006cdd07af27043ef674',\n '606b72c0ca0498b8c1817ed7922d550894c324f5efdfc85a19a1ae382411ca2',\n ],\n [\n '7fa463ee2a2d6a585d5c3358918270f6c28c66df1f86803374d1edf3819cc62',\n 'a996edf01598832e644e1cae9a37288865ad80e2787f9bf958aceccc99afae',\n ],\n [\n '3d4da70d1540da597dbae1651d28487604a4e66a4a1823b97e8e9639393dbec',\n '45cdef70c35d3b6f0a2273a9886ccb6306d813e8204bdfd30b4efee63c8a3f9',\n ],\n [\n '1e448fdbcd9896c6fbf5f36cb7e7fcb77a751ff2d942593cae023363cc7750e',\n '30c81da0f3a8cb64468eaa491c7ae7b4842b62cb4148820da211afc4caffb3a',\n ],\n [\n '6531acf1a7cb90a4eb27de0b7f915e387a3b0fd063ba6e1289b91f48411be26',\n '31330f5daa091889981a3ea782ae997f5f171336ed0487a03f051551a2cafa2',\n ],\n [\n '54be016394d5662d67d7e82f5e889ed2f97ccf95d911f57dd2362c4040ed4f4',\n 'c6cb184053f054d6a59c1bf0986d17090d25089b3fdcdaf185edc87ef113e5',\n ],\n [\n '35b9ecd0499ca1d5d42dcbb0c6b4042b3733c64b607ca711e706e786ef2afc6',\n '5624b476a5b21c3a544f0712d4817b06ad380a5a6529d323bf64da8ef862d8d',\n ],\n [\n '4ce0378e3ee8f77ed58f2ddbd8bb7676c8a38bfb1d3694c275254bd8ca38e23',\n '5a16fcbff0769c9cf2b02c31621878ec819fff4b8231bff82c6183db2746820',\n ],\n [\n '648d5c6f98680a1b926bfeb01c00224c56fdcf751b251c4449c8a94f425cfcf',\n '72c05ac793cd1620a833fbe2214d36900ebe446e095c62fcb740937f98cca8c',\n ],\n [\n 'bd09be3e4e1af8a14189977e334f097c18e4a8bf42577ef5aafa0f807bd89b',\n '6e0e72ed7eb65c86cee29c411fb4761122558ee81013344ba8509c49de9f9b6',\n ],\n [\n '35ea4e339b44ae7724419bdfbe07022253137a4afb7cbaffad341ea61249357',\n '3665d676a026a174f367bb4417780e53a7803cb02d0db32eb4545c267c42f14',\n ],\n [\n '36457bc744f42e697b825c2d1afd8f4029d696a4514710f81da52d88e178643',\n '7c93715896735492a68c7969a024b3a8fd538bffc1521538107de1a5f13ce9c',\n ],\n [\n '5b3a08ebcf9c109cc9082f70d9df2b9c11b5428ee23917b4e790c4c10f6e661',\n '9d7b42ab0c20f5510df7ea5e196eec99342739077e9a168198c89da859753',\n ],\n [\n '21883ef8580fc06e59481955d52ece3aca6e82c8c9fc58e216dcf46f96990c6',\n '51a6423543e6e8a43e71da34cd90f5b520b8d33b67c4bf857573ab9e301aa4c',\n ],\n [\n '19e86b77f9b581e81092b305c852faf53940a8f15f0a6990c414f04c0fa7ef9',\n '515630e35d4398c9c79fc4ee08e1023fa47d8e03c6e7819c6d2ccef45398fa',\n ],\n [\n '888ab8eb4c31bb2ac5b54aa320dbe1a69c96b864e8a5f54d89c1d1a6b86c24',\n '730e148467f6a55ce22c5296f5380df88f38de76ef0b2de844cd3094aaaf3ea',\n ],\n [\n '75e79ff13a894e7120dac17b7429c0c32ce7828f726c9973728c0977a5f5977',\n '4960526e59c1c736561a201bc56f7d762641b39f609d273cc996f5d9197cfb8',\n ],\n [\n '640fe009249115d7254f72ecafb3006139e4bed7e9041af51458c737282d1d5',\n '3cc6c978a575246e2ce4f7ef1fcc7f63085db9ff98a1b1f3fe374087c0332c',\n ],\n [\n '6d6fd09ccab7c26de9b3906191235deb5c34685580c488275356a05e209ca96',\n '7157f81a34213dd8f91dea4f6df1bcfabc4ee091a3049eeeb3b7923d39b8645',\n ],\n [\n '5531ca1d00f151d71da820918f74caf2985b24dca20e124721fff507b5a5876',\n '518529643d3f25e47f72c322223ba60a63d6bfe78cf3f612215d9c19bf29200',\n ],\n [\n '6192d454e4f8fe212bdfccd5b15dd5056d7622ffe456c6c67e5a7265aea49c4',\n '2377a45dc630017ae863cb968ddb38333a70c7946d8684e6d7a6213f634b7bc',\n ],\n [\n '542fb44b4ef3640a64fdb22a2560fb26668065c069cf31d1df424819a39ff18',\n '5dbae9b0948e0361aea443503840341c322aa1a1366ce5390e71bf161f78f8c',\n ],\n [\n '299ff3e3412a7eb4cb4a3051b07b1be2e7b1c4b789f39ffb52cba3d048b71de',\n '1951d3175c02761b291d86b6c0a08387ad5e2a2130ccc33c852530572cb3958',\n ],\n [\n '628ce3f5367dadc1411133e55eb25e2e3c2880d6e28754a5cb1c5d109627e73',\n 'ae3e9b7d50964e28bd15380400b7659b87affdef5d2586cbefcd9be7d67c0d',\n ],\n [\n '6ea54aff064895eccf9db2283225d62044ae67621192b3346338948382f5933',\n '6431507e51aadacfaf39f102a8ff387756e9b5e1bc8323d44acae55130d93db',\n ],\n [\n '28097d50d175a6235320fe8cfe138dd9e46895d189582e472c38ad7a67d923a',\n '7f9eab4133d7d09a7ff63368d6135c26262b62336eca1b5ca33f2096ce388ba',\n ],\n [\n '619fd09cdd6ff4323973f256c2cbdcb224f7f25b8aef623af2d4a0105e62e02',\n '2c95f0ae11d47eeae1bc7f1350f75f9185c5bc840382ceb38a797cae9c40308',\n ],\n [\n '641c18982ced304512a3f2395942a38add0d6a7156229c2a7c8b8dfbe9beb96',\n '6f6288c9c659b6af5ac975f4180deffe53d516399b2cc62f31732e9d4ba9837',\n ],\n [\n '58ab546e51fe49fc5a382e4064a2bd6cfc268904412f86c26de14f28a71d0f2',\n '124b7217943e7e328408e8afdfa7da00dcbc94a2bb85fd8e01fb162d2c2c0a9',\n ],\n [\n 'a82c2fdedbb26c3c762a12f7e86b0e01e65320e0a25a8399d665f6e266bf74',\n '1a1de28e253f3e10f44d0111e8074f882d7f42e5900780ccbdc31da372d3fd8',\n ],\n [\n '744c725a7455a992e3cf5bd007bc234dd4668dba285f553f38350ad94c1615b',\n '7f721a87f48798bdc4a9c0eb88559e2ad7a74112fd901e70ea159e67a9c33f',\n ],\n [\n '434df142ddaa60f7881b6348d91687de40457de7ccfb07f0304b9e820705d0c',\n '7fae425e3b53f97dd1f5b20e49ed9fe24ff1efc341ba5e017ac89cf8df0cc39',\n ],\n [\n '7a1e2b809dff46277021cbc376f79c37e1b683bbd6bca5317014f0dc0e1ae73',\n '56790278a231912c334eff05281e08af1558e85516b4411ef64647c13bea431',\n ],\n [\n '4931b7990348d41cf8907be79f45bb7991fd18f8a57868351c92fa7a34cbcd7',\n 'ca35091815cdf0837d396e25aad6052ad32d497a33b123256cffdc008bc50e',\n ],\n [\n '250b815d352fd89f8210b624b147ea7d0a4f47bcac49f3ac9b777840da93ebe',\n '1173f10e9691948b7da7632f328520455aadcba46e017f891e0a1d7da2bef04',\n ],\n [\n '2223b85032fa67292f6e1f822628e6756e5c3cc08fc252ab88d63d624e4dfb2',\n '55619ba96a7dcec77832fcb22cd5c21c7dcebc0280d730cba0002b67e0a8c63',\n ],\n [\n '249b131e04de73af9820d3e22492d9ec51bdc0c4c4f34d95352fa44dd61f245',\n '7576d3b5d136368ff01170a77d8286d0d1c7c40688862fb40813b4af3c6065e',\n ],\n [\n '6777915d9b4769027eb7e04733f8a2d669c84fe06080f55e8a55674dfbf9efb',\n '640d0ff384c9635e1af364760f104e058e3c86209fa9d2320aeac887b2e02d8',\n ],\n [\n '2abe3f237681052f002414399111cf07f8421535af41251edc427a36b5b19c9',\n '636ce4deaf468a503ab20ccb2f7e5bdc98551656ebf53e9c7786b11dd9090be',\n ],\n [\n '4d5cc5414758ea1be55be779bd7da296c7e11f1564d9e8797ceea347c16f8ea',\n '1a680c4c410cf5ddc74e95ff2897c193edaaecce5b2cde4e96bbae5c0054eff',\n ],\n [\n '46c375c684b30adf4d51de81e92afee52b1a3847e177403372c82109373edca',\n '1eaadc5783c90a0261306423d52009e991126b3f620e9cb6cffca41ca096f4f',\n ],\n [\n '2ddfb71f51205888118cbabba8fd07d460a810289bfdeeb7118707e310cb152',\n '1fd905d07b3933be886f2518246bdafa6f33259a174668808223cd7c28183c7',\n ],\n [\n '386f3879960713d41fdb3b1e41bbebf26b1c0e27a9a75bb1adcc1a0d3e8547b',\n '2b21498c0f34ec6f17c720334dc0f36021c2f87afbbbc8847d0bd536eb265e5',\n ],\n [\n '407eae62c6c4de3b942195afec3f45efec71ddb5e6edee3d427631bcdbf9b90',\n '436e7f2d78268ef62c4172d2ff1469028bad1f1d0f97ab007064418e61caa8f',\n ],\n [\n '1b881175e21201d17e095e9b3966b354f47de8c1acee5177f5909e0fd72328f',\n '69954b1a9b8bfccf8ec384d32924518a935758f3d3662ef754bcc88f1f6f3ec',\n ],\n [\n '7d545a82bff003b8115be32a0c437f7c0a98f776bcf7fddb0392822844f3c5e',\n '34b6e53a9565a7daa010711f5bf72254a4e61da3e6a562210a9abc9e8b66d69',\n ],\n [\n '299b9fcd4fadfc4b6141457a3036aaa68501c23df579de26df69d4def89b913',\n 'b95bf2c2bb303c38bb396382edc798ca6a4847e573ce19b7b08533d1912675',\n ],\n [\n '551f5a4dae4a341a3e20336a7d2f365ddd45849351ec6dd4fcbedfe4806d5d5',\n '5865c977a0ecf13ce85ae14c5c316872080bd36f0f614f56b6dfc7ece83792e',\n ],\n [\n '7a1d69c08e68c80ad8b310736e6247a53bcba0183b9b8798833bc696a0fb6e2',\n '3ce803a20ebb3b120d5eaf0ad64bed0522fad1a0f2ce39a5c5cbae98c4438f6',\n ],\n [\n '28acacc0bc41d84e83663f02b36981a2c8272ecd72d3901164be2affb09c504',\n '7a5aee0b160eaff5b5968ab1a0304ce58c3d5ae0148d9191c39e87668229e5b',\n ],\n [\n '1f78cfdbcc767b68e69a224a077468cdfcb0afd6952b85bccbdb96d1fb8500b',\n '4772ba173c6b583284eb001cfc2a124104833f464ff9df096443e10ef3e9dd4',\n ],\n [\n '2774108962ca9897e7f22c064d2ccedac4fef5fc9569331c27cdc336c95774b',\n '9e13d79b68e8dc8091c019618f5b07283a710ddf1733dc674a99fc32c12911',\n ],\n [\n '770d116415cd2c4ace0d8b721dd77e4a2ef766591f9ec9fa0b61304548994ed',\n '42165d93c82f687635aa2b68492b3adffd516beb4baa94520efa11467a209fd',\n ],\n [\n '5e6e4ece6621e2275415e1fda1e7c4f496de498b77c0b913073c6a6099394b9',\n '3d92ce044fc77fa227adc31f6fc17ef8b4ec1c5aafc44630c0d9195075bf56d',\n ],\n [\n '6e69c717b5d98807ff1e404a5187a9ceaf0110b83aa15a84f930928b1171825',\n '1ee7cfc3a9744d7fa380ba28604af9df33ac077724374c04588bd71fa16b177',\n ],\n [\n '404318f2d2ceb44f549c80f9d7de9879d8f7da4b81e7350c00e974ebf2daef1',\n '3934831b5af70d17a3f1da9d2931bd757e6acf2893236264fc7e0d92ff1a1cb',\n ],\n [\n '20dcb6f394fea6d549b2e75748f61b7ec03b6e52319cb14163373a9c22bb9dc',\n '106a8c96cfb95a331618b7416d1498554730499e194a58fbf63019890480fc7',\n ],\n [\n '119000f277ccee013e6bb121194ec1ab5460fb6a96eb702a14079865f4170aa',\n '1737a32f5415e8720a5606ec1dd4756f02e7c6817e3723b453d091f2d192773',\n ],\n [\n '45d0fb5cd95db76d05dec3faa12e467a308eabaad363a062353db3cd2d9b749',\n 'ae08691b5b0cdd19ec499132421638f470f493320e4003d123ab1da761b965',\n ],\n [\n '1257b3e65cdfb6367c6d0942327e799bc66eb221e70c6573a9862889eb51c38',\n '593309fd45755dd2cc4afd2b9316bc4638b0c5ddb3009694fcb7b250d0c8a2f',\n ],\n [\n '186dcf9950f72e868014a8accf14aa36e82a7a2a29f86ba37f6632da4189db3',\n '55684c9f7a043fc523ed78f756f834b4db823d5e4161bd79602c17d55a5cd8c',\n ],\n [\n '58791d5569f282f5c3b01ecdc9388df7ba3ca223a2dc1eed5edaf2a1d302fb9',\n '6298d7dd51561a045bb4089deda9f40b2865589ed433e56d54554f8b45e79f0',\n ],\n [\n '13fd87144aa5aa4b24d5a7bf907d8280d15937fed262d41084898cb688fc28b',\n '3fa54367770cc4479a857411ddcabe86627b405ce1cd14ad3b2863bde13abe4',\n ],\n [\n '48118139445415f0c1879224e2dee744ed35280ff00537260402a1741ec3676',\n '4dfa39dadaabecfc54ecb7a25319444f8e952782d863790e42a9887064fc0c1',\n ],\n [\n '4ad031bb9eda84f2fe5d354c7948d41558ca657a04508654721810ee72ef158',\n '620ebd5d0086b92c6009a42777b946a351c2c7ba852b57d3c9905fc337459ef',\n ],\n [\n '4a34abb016ad8cb4575ea5bd28385d2348e5bcc0cbba90059f90f9c71f86e8b',\n '4f781829ad83f9ed1e1b6de0e5f4ac60dfdfe7f23cb4411e815817e705e52c8',\n ],\n [\n '7fc632d7512aab5356b7915dca854c8b12b369ab54f524fbce352f00eb9b9f9',\n '2ce80b944fc9158005f630b34385d50c3ad84450a9e1e529925b3211dd2a1de',\n ],\n [\n '65ed10347503cbc0216ca03f7536cca16b6abd18d332a9258685907f2e5c23f',\n '3be1a18c6bfa6f2f4898ebefad5a8e844c74626d5baa04a820d407fe28bbca6',\n ],\n [\n '1a8abba1be2e276cdd1f28c912280833a5ede1ec121738fcca47dc070dcc71d',\n '21b724378bc029a5199799df005922590d4e59cae52976f8e437bf6693eec4a',\n ],\n [\n '3a99c22dafcfe9004ebb674805736a26aeed7ed5d465ae37226dcbe270a972b',\n '5bf67552af08e1e6e2a24bf562c23225e89869cab9bef8becb3669175a3c94f',\n ],\n [\n '4a6a5e4b3501f2b7bbdd8da73ea81ffca347170bdfb6776a037cdd74c560fb4',\n '5af167ebb259c2da88740ec559ee04052bb66480b836cadd0e2590c32d7111b',\n ],\n [\n '6890d95308525f0bac9dc25cc1189eb92d29d4b3fe61bc8aee1c716ac17b1e8',\n 'e6f23f78e882026b53ea4fac6950e56e3da461e52339eb43d2fdb2dade7ca9',\n ],\n [\n '748f4cf4f027efdeaed7c7f91ef3730ff2f2bb0bfc2db8f27aadde947f7d4d5',\n '3a1cbc550699411052c76293b8c41a3a8a1ecf12cbbc029a1b2b6ea986fca93',\n ],\n [\n '7321f3f581690922cd0dec40c9c352aae412ec2ccdf718f137f7786ab452cd3',\n '5be5130c9277cdb76d7409452438ec15d246b211dd1e276ee58e82a81c98fd4',\n ],\n [\n '6c4d6cb7e7ae70955224b8a912ff57ca218635a2436b36cee25dce8a5cdf51f',\n '32f8c03c6db3246946e432e4148e69f5628b200c6d7d72449df6eeac0998039',\n ],\n [\n '1dad5f2e795ea6fa5177f110989516eacf8fb37bd6a091c7c93f1d73a2fe309',\n '56b2298c538180e99dea3e171dbb5c6fba0bd0a9ed40537277c0c2373a8e2c4',\n ],\n [\n '1610605baacc9bc62c4cc923dc943347cfece7ae241e746fbe6c2c878221dbd',\n '431a82d657e0d109d00dea88cf3fa9b999845221b7b5590a20c40fc71368c1c',\n ],\n [\n '6a4f5c787fb09a5be2b04d2eafa1e6f3d3c863ee22960eb0b64f6eaf6659162',\n '14dbc3eaea6146ee7eaace5a91ed9430dad3a47e9ca2f68b455171f8fe6a7b3',\n ],\n [\n '738415b73e55412b0e582e45ff0d7bf4b1bf2922db581783fdcc75559f40e',\n '33825aeb3fd8459999eb418d15102ba5864b069c6ea517f0c6e9eab8d9aca47',\n ],\n [\n '2603e72ce53985c70782774057a17944f7b4ce224a809be4e2b5af3606aa1d8',\n '92822921809c42318f42dac4d773325f41c43069e990adac7818a45e2554dc',\n ],\n [\n '181cd967ab4615357cc96c82eae9152ce7598c1a1dfdd91a458bddb016ae9fe',\n '5d562fdaeb0e12647e230e50eaf216bed52fa73c6b7378821a3bfc4cd66d4ff',\n ],\n [\n '1121726069b9ef5954ba6490100b226e0be53fef3e071b7c58a1286174b789a',\n '4b25594cf4e9eb2d14b3f52f2661a9992234fc222c0a0d44517cb77deb9c16f',\n ],\n [\n 'e543663969b915337f105f80995a77b356f1a51d8b4a4fb12d44364130e873',\n '34b2e3c009fdab4cb7349a580df2e64c0098a123280078e5da6623a9ec6b44f',\n ],\n [\n '4e2f8909bb62de5ef65600e61bbf969293815296b6e23702875e049b3ce5c45',\n '3cb81f2c21f22a7add26fa38a9ce5d9cce1bb251bd2698f90c34ff0a84f7af',\n ],\n [\n '37b546e403a1ba970c17b67c2f1361ab9c803f8d2b5cd93803014faa08861ed',\n '37079184ea46272f5809b523d060686633f7995167897a153be1772fd6566f6',\n ],\n [\n '27bddca77f7bd7f66b3693567a4238f2e6751d95b0bcb409f6b24d08f84798c',\n '6417a85cbfd6fc02df560d3963a241a986baacdfa423f65d7227ce49a96c57d',\n ],\n [\n '2de71a39aa043057d1bc66e45f804542acddf18f7a6d88c0d7fb0ca240debdf',\n '306c1ce39ab46300f7cca0f3a2fbfa77296a27e24bc66b0b8044968ec0ee413',\n ],\n [\n '307c877154364c0c03534e7327d5a88e1380ceef6481567ade37a14ee7c1a72',\n '3404bc7dbfb33b95d922d0693aaf9358f77888d7d95e773c38d83dbe2e5f995',\n ],\n [\n '79f09ff7c60850e5f5ea020722659a1ed27db4c95dca131f99552f785c8afbc',\n '40429528c099349b426ddbf129497176951a64a53db5f9d8bd2be0252cb22b2',\n ],\n [\n '4027dc6b56d446e5972f35464eeac85c5254ef377c902d9fe37aea841bb5292',\n '7c3ea37689ef679fa2f5c7e031a78e23d484a8317990fd34d44d95cc1db3717',\n ],\n [\n '645dbf78a3c228c4b7151450b5e65edb58e71f37e1e4bc5f471e0f1abd6d9c2',\n '15cfe7850f327b256e23b00627451560c5c6ab60db78d45b7ab286afb6f13ab',\n ],\n [\n '1503ca373757677ad1d911a2b599d01c46eb879d1ce21ae171c7e439846a85f',\n '583eb269b7030da6a0c324026919de3f9489d2ff6ae0e6320c36f05469ad66c',\n ],\n [\n '66e1819ba3ec4ad4ae9f7d7588d23baa004e29d3aad2393d52af204a81626ca',\n '505249980cbe6273b82ad5038fe04a981896f4117345ac1abcc67e2525c0ee4',\n ],\n [\n '5ec20dbb290254545f9292c0a8e4fbbfb80ad9aab0a0e0e9e9923f784d70ed1',\n 'bdb1ca3a859227cf5d00eaae1f22584e826ed83b7ccdb65483ed5213dc4323',\n ],\n [\n 'a5c1a5011f4b81c5c01ef0b07c0fbf0a166de77280f0ae241f2db6cba15194',\n '4444521fb9b33d7dfeb1247d0ee1a2b854ad166cb663d9dd2e686909362a689',\n ],\n [\n '1f35335de40e00c62642dac2fda8b30f071986ce4f11db849df11bc45ad4e0c',\n '7801a2c761b90fd4477ba0be9a775003d5dfcd959b1ed198b4681f15e7acbf',\n ],\n [\n '48db4798cf6821c1ffb8178b1d3bb6020e04186c96aaf4670972d367f4ed5f',\n '781019494df95b888f1578f1b4a3f8e125ea60eca47ef9207a10630671217a3',\n ],\n [\n '17f653d904210148a8e74d8e719a3061683c164aa6d79c902a19f185ab437bd',\n '6780e97985932c3860d810af1e065d454b1cb4be0e7ffe2d8cea7d52526e223',\n ],\n [\n '5c4d0c7432f9b0070436240f9855adae1467cdc9826952ae01b68cd52a3ad89',\n '1c5747f968ed91261b7ae9bf1023c999da9816e37de602d6a1a50d397752bff',\n ],\n [\n '6fedd7639fdaa2f7bad4ca0b391710f6f8a7e890250ae8ae4252bb8b39a1e58',\n '436a215f655a3fd3778b2335ffdc9aca6b98474e43d764c1f8362830b084f0e',\n ],\n [\n '7fbd45a889c5e9d127bb4f8474d6be7cb9796bbfff923b75e42a1ad4cae37d6',\n '484bd12622a6ba81cd53049c550d9ed682a8e765b656b1cbff9bbea637bd1f4',\n ],\n [\n '17d984d47937263f7966a3e7b1eea04071e678494bd749c9e02b48b3234f06d',\n '7b341ff08722c4e161005d0037204a7a2001fdda7af2cc1a0b04a027f115a0f',\n ],\n [\n '7f1822045db45ea07e1519c3ee1f7705915f35fe4dd8db1e8921b5d1c740edf',\n '33d41e06b93320ad1b3d9580380ec797a05dac3f1cc8008899110ebefde2f78',\n ],\n [\n '7b19453ecb74b7d0e2a66b9890ff73bfbbcd61a266abd6d82dbe665bf32f34d',\n '6dba2355420dac582b1f349609ea1c89b89bba2d1a68a0642f1dd12d86e73cb',\n ],\n [\n '273e82a15f395ddf2489a95685bec8bac62c4b459d1b28987d3cb27e4bc9128',\n '653375b48a4cf5d5b101c9ef533039bedce5dbeef3f59e8f168bdc99b06ca5f',\n ],\n [\n '3006c9e7fc6a553d8eb4e8a47ce9f10d1a39576ac255ae9e0a4ce3869e76212',\n '65fe9e2ef2aae608be309332d464f57e28f1df5de1a6a519751b056971f932e',\n ],\n [\n '5e8f384c8a4607fbe9789fcc52d54249d304d698562597d114c1d81452d3dee',\n '3c8bc78066b5d947dc1e405e326ee55ea606c7988f666748d259850fa259a22',\n ],\n [\n '7841b2102e9aa103fb53a642b3e167b21113ea44751ab38e0b5ef8312654db9',\n '71bf5c8308fcf9c4a7847494cd9bdd946fddf7d3a37e8bb0b201ff2343deb8e',\n ],\n [\n '40f68027420c11e3ade9aae041978dc18081c4f94943463aac92d887f922a62',\n '499c6062594a6c7e21a3cb91ea451813393bff365a27a08f1a515439b83cf42',\n ],\n [\n '6ce77a50d038b222634e87948df0590b79d66087b01e42b9b6d8fa30ebb1465',\n '35f5c46bb1be8555a93f155a174d54ec048c2ac8676e7c743054ddc52709d37',\n ],\n [\n '604f8b9f2dacb13d569262864063c2d4bb2b2cd716db6eeb2b1eeabc57746f6',\n '68c6799e24f3b44eec3049973445174727a66970f1614a782efa2b91ab1e457',\n ],\n [\n '73d620f3bfe77f672943d448d7dc05327adf64b8e7af50039c469d7f7c994c4',\n '4859deb36eaf0c802f0d1514602368143a33ec6ce8fd55248b59025debc6afb',\n ],\n [\n '3fd2bcd1c89d706a3647fbd354097f09c76636e93ae504973f944d8fc3bcc1',\n '677ef842cf5eb2444941f527abec567725e469469192354ad509a26ebb3d0e0',\n ],\n [\n '39222ea924ac17b533c72ffb2c47ffdc11d6a7f7c70fbde3a10fb0b8f35eb2f',\n '20dc4bd1089019bc1d7379b4feb3eae6eb5af59e9f253845da9fd633057e952',\n ],\n [\n '326f58994e1347f62e4102183215b5db956378d2f61f14aba4dec94577f53c',\n '7a03284c296003bbe05178a1d82efdb7b8125511d63e20e50aed789c2e52e1',\n ],\n [\n '53aa8939c74d4ee58f03bc88bace5a45c7bfcf27466201da05dc6723a5f5632',\n '2e32535ca7732904a048183247b04b426ecf9b39fc393a9cebe92fb1dc7a7f1',\n ],\n [\n '6cee1a03145e93b3e826e6067005f09c06099c98198c91c222407ba5c8c132e',\n 'beaecad1274e7c6e5476a100c271aa1a6f86ee5a9fa5c2f26124d5886fa63',\n ],\n [\n '3ec659b8175e1be1bd5a252108714776b813e330393f587814f5f1f32a73332',\n '529a5cf9f8c237ae69a94217d173c8d19c156952041f5c980da557990863fa7',\n ],\n [\n '3d66ec5963d0c534d4139c8cef2e1ac48b3e7965fafabf58be26f903318af4e',\n '3d3f2de7a95f59b683725ee6283cbaf31f97c4b600df9a4621413223a468740',\n ],\n [\n '7fb38ace8e0932fac2ea0d3eb676db8d684db1817e2e4d59da7996ce398b4a',\n '68f92bd5768cdd4710249f9d49ef1d5654e497b9a4ba10bd2971366d83fb400',\n ],\n [\n '1c4a49314d6b4969cdd142c76ceb7682bfb868ace7f7568b0fc8635bda5a9fb',\n '5fc0519f1f4cc10b5771312458748c036313b87707ed0540026ac64a5955aa9',\n ],\n [\n '3073c95d08d3b97caea5f0be16b2789bee766f76b7e5499f8ce8f96abb0f344',\n '52a8974b4eb9a1f6a0ae2c83cb4715bf18d73f057255fcb3f63b74f7e78f590',\n ],\n [\n '44485b16d597a5de3604df6f7ed7e00b8aeef9e7e8dea8688255153b8bb16aa',\n '6cccb0ba170123266f24b5d93a744397dc2c44820edc4f8f5b9a0f5c9b3b940',\n ],\n [\n '7618f77b7b32d512688dd62e0b48231d9574c6361e8be353a7dc04f7c3a115e',\n '78ffcd16d80636381ca231aae70d99c9e20298b4f5388fd823ea9fa2b8ddfd9',\n ],\n [\n '7dc82fee1ef95cf5b3720fcc07f63246654bfe39762627839da40e51c75654d',\n '4c0ccdd70955da74558de20c88352df8a02aa97e4d5971c500e884740a8cb62',\n ],\n [\n '7fa5d460dc10cbb418b444d9bde97e92c70a99a222b99f244dccee7e62cc04c',\n '636163901baa5b7576c38c43407af578b8c4607e01e86011ae2dde587a89f84',\n ],\n [\n '758930d46006623a756c89bd0cc378f6a3c1f43c9a0edbb42274c35e75c16d2',\n '1d74dd9f81c2fec811b8cbd6168a745b0a111932b2a345265ef2853b50b6245',\n ],\n [\n '7332ee0626b044d664ef228f8cb84df7c643e52f6a2591ae1c9007ad61ec16e',\n '229bd8e630572cbdee54283234cf3e9f060e6382f99943bf234119d47b54470',\n ],\n [\n '78a16ef803aa20a075bb2f66c61bb2dae5698bebb94a0995fa74c3d53de1614',\n '246d588b68edb6fed96c128349908c42dcd64c46341b205e79f4aed9b5d3675',\n ],\n [\n '6e1933939bd03b67bba753cc0cbe7d2f25bad68c993887ef8c9e2fcd59b0647',\n '599413f7c204a11a5ce315eab11299ab7326603412bb00bc1c59ff75a37d6b4',\n ],\n [\n '4a79957a5a1888ad063b51c69565a2b48e8eb917183e220a1c8d3374526d30e',\n '1f092de0e069bba7fc5386e2e9a114c1618f88c4b95e220cd35ffe96f99fcad',\n ],\n [\n '3148aa3df9ece39aca84f59489f2710522216f14be6055ee0027529d1d55e2d',\n '617e9a52a92975db0ba1977f71116f7058a0d31b869ac7f3ee2fd80b0c5100c',\n ],\n [\n '5c1188e72384160ae39d07328346cda4f6c12d227448e6236f04dc971625287',\n '1643006eb3a3bc6aafd5f685cf054f2a572e6ca58c0118bcec0b833741f116d',\n ],\n [\n '3f72efc93c9b71adc4c51d8fc69d3940b20d08733af2b7d05140fdb1d1c1004',\n '7399259987c8f4ebfab46e522380707e58427d3962ee0c2a91760813f76d232',\n ],\n [\n '3129b34c03c51aa8f611e91d5cfcc9bd3ef108ee66e6d3ee35a0e0e50055bb',\n '563b18b5650085efb4cf179a029e6afff27b1d3091cd28eaa68d24fa1f801c6',\n ],\n [\n '16eac0f9fb4c67cf89a7fa4ee615bbe731d8edcb709a1b9b50c7d873a530f52',\n '7ff8288b6e199ca8f316192881424a37fb080c29daa76b1f0edaccaf580a80e',\n ],\n [\n '75f6b6028c43ce832f65d7e8e620d43b16cba215b4b94df5b60fc24e9655ee4',\n '35e9ccfaed2293a8b94b28de03bcb13eb64a26c831e26cc61a39b97969a2ff0',\n ],\n [\n '3c6152fe093bd6316897917ec56a218640ec1b2148f21db9b14fc7a5ff362e8',\n '6eef2df27ae7d63a28856b07b73e7aad7ca94f317201a1e675ffc6f9a1710dd',\n ],\n [\n '54e01b5fe4fd96052aad55b3f26b1d254dfc7e2525fffb9ae0a77eb8cc5579',\n '7c3d39232ab333675b219abc766ed9b4782c840e6b046614dedb8a619696eb0',\n ],\n [\n 'd1e63f8ea8a76429cf254a6d3b668761f0dc572d4bfac4fd56d9eaf58fb6c0',\n '2bd0a84d3908a63085824c9329a0983913006ba155b56a58eb3f9becab29c45',\n ],\n [\n '2d6122f2a702edd4da7385b1580796a71d13bd72be94cfb3fec01149c006c2d',\n '70eb282fae992efa6f5915e578b640653549f23385ef3a29ab29b1b9b8ad63b',\n ],\n [\n '752fec14beaadb5ddbba6b3a17fcb86579fa588ef407fad0ea07dbb22a640d3',\n '3feb6728eca21a1e84e8f9f23010387a53a96a1cb62d86fb37996150a1299ef',\n ],\n [\n '63f94a92f27acde8f5ed949b459506f51d70c85bcc61a34d647264ecc53c65e',\n '37e5dce0646ee66f4fdb93b82d54d83a054948fa7d7fa74ab6b36246fc7383e',\n ],\n [\n 'd6aa909287a2f05b9528690c741702c4c5f4d486c19a46c38215f52ef79c7b',\n '5ebe1128dd81093df4aca0df365d58adab848d1be1a94b95eeb649afd66a018',\n ],\n [\n '12866812b3053e2f7a9572bdaf5ef2b48c6fb62a0eed9ff0356df50e7d05557',\n '6785f7eb2cd1c120e4c7167b46861d10117040a2e9f2ca86a71e9d67df90613',\n ],\n [\n '46a730d05330b1b13673cb8a1b8f45460035e4a9f1a1751cfba099c4355c1c',\n '76fb0ec6cd16a8141cdcd875c8b2de9fce42d296072643d148ac7e7fa7472df',\n ],\n [\n '4bd4380a22900bd34835e0a908eacf4b6edb61eda0cf483f9212453b37e7516',\n '5e9551cd20d8d7ddbf4366880b7d5267385afa1966ff30da4baaf273b009d29',\n ],\n [\n '71f1994ad40baa2922424ae222663a64f93d8b67929e9a10f9e4c1ab19f3833',\n '85320fe68ec0d37cc19fdfd03589d66906ffa4046c80e1b094a85f27676346',\n ],\n [\n '5a63b1bf5232f28f808765c6be7ce1f81c52145b39f01c879fae0f4303bee61',\n '3bc5d6df68bb6d0577bf9ae2ae59ec0e9b2dc7dd56ea179fb38a41e853db950',\n ],\n [\n '161ded55ff1087032381e6c1449704f63ad2d88df82dfc44a71890fa09b3941',\n '78a52e0013842037274ea75daaf8eb4afc04ccc4b07bfaf3f5ee47d165e01b',\n ],\n [\n '1bfce5229c5fbff5c0f452a22317fcfcd9262f23df41840f84fe7d44cfba1a1',\n '66b387872c00e63c73006a955d42cf49c46c5708fc9d1579b9ae38341b24a3d',\n ],\n [\n '56d47dadc9cbd1dcb2ee3efcd5d4af5e6aea71df10815c68b54a14e81d11b44',\n '47e966ba54df48e9b612a903685e0060a67e4725402e8cb4cf654e54e813a3e',\n ],\n [\n '4b1c44438afd4ddf20a2cf612df2ee494ce84c7274c5529e857693e73018491',\n '430403bd31d8f0677e06abff7159384560f27b9622943fea1a3192f14bf40d4',\n ],\n [\n '7f7281728fc2214aa1dbf13176a4624b53814734abd570eb6ef7c7e32379606',\n '312da47be347fb3fa2c9089b38df372560dcace2effeeacab4d96ab11567295',\n ],\n [\n '16a28884a1be8183e0d3fc0db84a9afbf47126fd3be548c2a584aaafbfa7dfe',\n '7c3f57b3b895564ba562c1cd80b71fda6d2e611665c6ab87744f5390858fe24',\n ],\n [\n '323339f37b327a731232a9580e79952063c7c232bd1380146d8a83c285f4b8b',\n '4f16be1d983c7232f92cce6b9690695978d42cecc8eeb8c206e125d1098a265',\n ],\n [\n '624d26cbaa197e104eb83cebf2adeed09a5cdad359993fe5e3529d4d0def21d',\n '261b7da3cfb55c788977e0d8d640e3e93ae5a325d962ce85c816d7d32cfc430',\n ],\n [\n 'f24ecb7ee83a3e28dab54a330dc93d0429a7aea36412e922dce8fbff40d60d',\n 'b043e36a258d1df1d21b0cc7be9c4dcae1bd4ed326c110e668ac23d86805a6',\n ],\n [\n '686cea46b710bde1231483bfdbc700cfa3da6ecd5841c0e0c782f9ea24328ec',\n '7eb7407aa58edd6911c7c7e8d1e03bb52ead4a2415a0c33325872ff3a521dd6',\n ],\n [\n '3866ee1186264549df3dfcdf8705c0380c9372eef6d4081c2454d3aded1720e',\n '634c6d3e8eb8af652a4be73e3b613452c2213104ca875b66b4b15ee5b1716af',\n ],\n [\n '484c687cd2969a1d20a58cdfb9a60f280a473284503b1ecff5de514aaf8206b',\n '34d44d26b7427e51a646d1b924084762f5b461685450f21d6a472de565bebd8',\n ],\n [\n '203561333771fa0fe22c4033349f7b877d15b0542a5598e81e067968768247a',\n '2b6a533aff6e2163a36a2a89cb7415848bef48db40f952ffd380f47676707c2',\n ],\n [\n '2ffa6cca6233695760251206fc5e34c8d3692498589478cdd3d5b09f0b7c05d',\n '6c57d605478fa9626c4ed769554d075daa53e1a1d0bd4d94174d3bfeeb11ad6',\n ],\n [\n '5dccf0fa46a5571f204d0b033b45f299cbb3d9f80fded57253ea4f1c64faaef',\n '30a38e131ee8756ee5ea2a3e16618a5dbc28b5b9311308bf037ecc2039dfc7d',\n ],\n [\n '57b0a2eaebeafd950221facdd24790d7d1ab8883e5c5d55635f0d14a1ee4741',\n '7b41cc478fa6be38417271db8ed12efc0da6982552c1496025d2df0576bf4ad',\n ],\n [\n '611b5725101f611c387ccaa13889ecf3bb5595071a179ce350029bfca4ad7f1',\n '3129755977abc8995fec7eec1123a1561e429fde37ff36af002d3211831ecf4',\n ],\n [\n '1c06bbd0c52fdab9fcaf680c7a93fb821e538a2ed79f00f3c34d5afb9ea6b31',\n '3873d3bdfe0be0157bbc141198dc95497823cc222986d24c594b87bd48dc527',\n ],\n [\n '275cdbabc989c615130d36dabfa55ca9d539ed5f67c187444b0a9a12e5b7234',\n '2b7f723e68e579e551115d56f0ae71a3b787b843cc04a35b9f11084b006521',\n ],\n [\n '6cc702eb20f8b5940c7da71f8b1801f55c8c2d8e2e4a3c6c983f00bc1ffdd95',\n '5d15b3727bc66f3aba6d589acdd139fae115232eb845abe61fbdfc51341352e',\n ],\n [\n '44defb418700cee8c9bd696b872adb005490512d8bba081f8f99a9f15cc981c',\n '3b2072cdb1d919b2b65b5cb3557f0a3381d7ca293c267ca4a38f83e77bcc96e',\n ],\n [\n 'fd83ce77b1578b3a9b8c3cbeaddb1504d2fd4a19c901c21ac65961224e4966',\n '110cbe64fc10c6b9c66f15ca406a35f50b723b35d83c5eb9797a57f8395f4f9',\n ],\n [\n '9dc6ff90e341875e113bbfb507724dc7095a280d2f32cb6ba61a1e0c2d2aef',\n '4aeb622896c852c2747454e8f172c9482955a42ecbe522d6ce07ecde79d0a51',\n ],\n [\n '71c58b0e47b9dd9107ebd8a8c8fa9f0534e78231bac612c1ddc7a94edf33eb7',\n '7f90edaf4792bf8334adbaa0f4ee7c654312725af188682d75f34874c4eccb9',\n ],\n [\n '1f6de1f14988778ceb2dfe844f92394f1f1e72fd1581ceb3bf336c95ce50345',\n '4f6007ed4e022d2ee9fe4ca8207c5f6c766c4f3b85260e941fb24ad0dcbf0bc',\n ],\n [\n '3ddc3ac25ede4a67a97547ed27dc920239b585fb3624177e2e8d59eba678115',\n 'a9afd8f8bb759cbd1dff2addc63f47da4ba1291ea34229c09c0637dc5c8d24',\n ],\n [\n 'c56b0269d8431556e471cab9d70edda3a37b391696f107b2dc370631de51d',\n '729c52f6b134f733eb750c14bd9f95c077f0f6f6ff4005701e5bedc6544599d',\n ],\n [\n '44d32ce19ac6807cb22e4f25fe1486a36a13926f147fbfa054b63ff0446177d',\n '212a21e8c124c9cd37c80d2dd66913ceaa6b6f666522f115c39382b2d5925e8',\n ],\n [\n '35dfc16f3ae6ccc06a267bf6d931601e52f3e45359ffc513570b65b96adc4f',\n '74311d10f4bece01b5ae65a6affe5c931463aa1b73a3320eeb41bbb7bb1ff62',\n ],\n [\n 'e0acd9d2d907031b319b80121dc90699d003d220ea785d50e5033cdb3b1a03',\n '3911ba78d6e507485d6374b0f7d2e6198f6462a7d6d3cf046404a07af690357',\n ],\n [\n '3c57918ca254c0cb7dac251ef4e10c7d82327969552eae15d26c4c52660922a',\n '5fd5f5ff3f14e671548074114c72c48409df8a2e71fc8aa3c8acb506e2a88df',\n ],\n [\n '222ad8b61e219ba2b581f606b7c996516850a46a3db72fe1f72b5a9be6c324c',\n '72015a5e2db648112abd284fd867b59fc5606645177d26cf6e9a655c9912d42',\n ],\n [\n '3c86d5d774bc614469768ad38f7be9a53e9a233942c5c553b82e49aae684764',\n '480febea8229e130dedffff89c11f3c43e11724e6bd89d5566d78752859d41c',\n ],\n [\n 'adb73bb8352d0c10175df371f7868ef2c9e0c79ac788430c480c0f7d85c187',\n '60b564785248111502e6f39c4994d6293fac22bc25f4d764b2fb1957d3c9bd8',\n ],\n [\n '3836ab8b46cf4f453a22532c886940b982029b29c42adca90ded5bf77e6bcb9',\n '7b15e91d6355f147b171a90b064a9d8b2d7bf3699bbf4987664c61c950d8996',\n ],\n [\n '12ed96af1a97c45ec31f1531e96f6fb28a03ba52ab8484545fbe0dddc97bb32',\n '6d1f522b6c6cad0940cff8e23decc72bb8d4164696af031415508b025aa8be1',\n ],\n [\n '27382994ae5878223ef802e9b4882f481a1b4008f1eec8484483471f7aa742b',\n 'c31750d242b3975b0026a0e86ccdd17d0f680a8c6f53f197fc25eb1f777917',\n ],\n [\n '431677eba3715455bc235557518a74f3b111a88844ef13e159ad44bc16de3e6',\n '30000e1eb6a17d9df776981e65c6e500fded1ac12003adc9446b269812c9197',\n ],\n [\n '4b563e6f42589671579eabfa2cda5502b361c46a5ac8d45c8ed44741a925b33',\n '627bdb41678443fdd1aa607709e9699b652308615f4bea760a3b79ee0d9ab5c',\n ],\n [\n '2932fd3f81fc973ca9def6b7f1bb50f980fe589187cfe9e9f52ba4d356cf2c8',\n '1e6bfd00fa976c4770263a227048214c38850fe0f059e7b3d2c7871ef07d68f',\n ],\n [\n 'e44e4f3d96d9dec775b996be57e57fdc28e7c68023109b221c414a244a0dbc',\n '58b1e52fa274812e5184e00e9ad812bec2463140adfb4bea3b2d665867dcc9',\n ],\n [\n '7fcb89be1f4bec745887bb891e53fefd665c53d00a9e74de16b8a7e1f7adfb5',\n '74af0b06633f779897e199609c71cc5649bbb65bc2c0abd4c678f0480c198d1',\n ],\n [\n '62a381ffb904ea3ff4d451d4c8459457cdbc3dc2fd2da646a95d8c1e90c0b7b',\n '1ba058658e09db9e319fa73de8ab4a992b71e4efc22c273725bdcab84e2a315',\n ],\n [\n '1b0fbb7a84c67e668450a54449c7a46261a2d355589f8b84ebfbaf9a77ee938',\n '44f8fffa33dd33a6146c35d196595e22cc4a215f61ee9197cd751400970a1b',\n ],\n [\n '78fe920bd96a356d4d95ee34adafe8fecf071d3107c36f047b4024ddc4b3eea',\n '6162f29607fdbec10181fbac6e57d5cb41b922c5791fb24bd28bcdd75d16c41',\n ],\n [\n '5629b849e026e65d119ac11821d7ab7efd9c52226f75c7427505d6818bb0c8d',\n '1539c0f90970ee8b490e45bbe5568170e5708521a0e59f976be680595906feb',\n ],\n [\n '62bc853f349bac8c6e5921d27ba85dbd9ba20a375d70a7bc008928f3e123b04',\n '6acfeb1de05ba43c3ef1a9110a983a320e77b3ca294abbc04aeca19b194f26f',\n ],\n [\n '4cf4bed663464418285cbae359b5d84ec76b5997d24f3640984c7663421190f',\n '941f818e3e3e8fb1568da85217d17f9250ebc948379014d900a7b1a848494',\n ],\n [\n '52ff3d9ffe9a302f6dfaaf74bab57c08027d5cb699a69b30830540c0a2d47a1',\n '987dd8876873778d933fbfed37aab2f7d6f669c37024f926b1edcb2ca55782',\n ],\n [\n '1109ee32f0bc53de6bfa457060b366e909d7c18061ec9845f46ac715496897f',\n '38f36f172bdfd454b9285f86e6bdece8fdffc95182c7d801b03c671cc55139b',\n ],\n [\n '4b4482f1d84efe23dadf3bb10df3dcaa251312dcdd604f616f1eb540e1f3232',\n '7c9c149dcae9135f940fb54482f9c3cd8193721643a6e23157b8020410d439c',\n ],\n [\n '69cb459b9e415b7581ca163611c470d875971d5d7949de732d1f0f200544a73',\n 'a7136fa9dd00c0469863b7def3f83a5611ed628810d7e807e7a873da5a9897',\n ],\n [\n 'b66a4e32ac9a4baa8f64780acd94ed3628b2b0ea874ba4dece629af65f9e62',\n '24328ba9996a24389658e3467b8b90dc3927ef8419fe28b3f55b1c1aaa51915',\n ],\n [\n '5ecc3080062dd451236de0e4eb91c5c75100733364bc5469f5fa76f79021ecb',\n '6da4abb9031a27b5be94529324fad8026e7d871570780081b0f424d4fe543c9',\n ],\n [\n '1e3146f00880bb22486d5bc73e54367d54251f4002bcf342d0393b05a4b9ce0',\n '23b6fb8e945d3205f633ba724202db5a99305f807137edf942cd60eef867699',\n ],\n [\n '2e1da8013285598b899f026c6974185db12c97b4c63509769d3d4ad1d18a4e5',\n '1e7e7b668674d1593c39d58bc7bccbf568208732b3519bc2cdf93db34366862',\n ],\n [\n 'd26c3f389d81709506f184b53871497c8d36c5c9eee8e3737358204c1acba3',\n '34649c3d39f3b825947fedbca215ae30c5a5995e93b1c8efca4944cf85a082a',\n ],\n [\n '91300478a83595d548f32f259033291fc7d083953b0b8bde88c7559660c563',\n 'e5d2bff57fc6551e9b80c06ac7314a71907cdcc66ce82f2cce721a670df10a',\n ],\n [\n '1f7abcb9d462c63ffe92aa56619ae8590089cca4d93ee3e5f34a63882452cc7',\n '7e9f85c7b7ca6e9a4f3a026d1048adbeef69ea9d876c6f647c257b879a81bdd',\n ],\n [\n '4d2caa1323012e4c83b0ad387308b8aef5637bc35ddd882e7f5e41cf2ca410f',\n '47150e808c81a540b6f8864e9d6636589cacaa516f82caaa96506edfbd6f0e',\n ],\n [\n '3c10a6083c38351deb3e6d1b386827d0acf48979b66b95249eb8700ec26b069',\n '47e34bfe561d903cffdd1d849b85aa3cbd31cb4a9bbd8cc2e5fd2f95016cabc',\n ],\n [\n '758bd54868eec045d0b4d3d2bc415d24bce13fee47cefdfda46425c109b657',\n '3392a7c66ea3bd7b044680bbe9f78ae86752097404c067e9d2572f55330df83',\n ],\n [\n '19e718e0ca1d2d6fadbc6006ee7dda7a385430e29f5e239cdd4bb7c3fdcb2f8',\n '5c68249b7fe03ea2e13481a63b6cd4bf74ce42009a89fee0b3f8f968b3ec709',\n ],\n [\n '28077f57ea62401806367e6d54fe45d02de5b072db787ffdcc3854e12a3e855',\n '14f3762689072f5fb41d03e94b01808c739f6d42b7b785b0e464100b150efd2',\n ],\n [\n '3b8a8cefd017363ce867265af3293cec081fa589fe561830f0078778cbd338f',\n '69ccf2383cb7b4f9c806d72535812483e7c5e9a1a5928529d64ca7e085e758d',\n ],\n [\n '77878f388d22161a2953e5aca6bac1ea480e102f329574b4b201640d44a296b',\n '7eb35706a90a03aff7c2fecca72659136547cee98038746db5aba16fd7178df',\n ],\n [\n '97332e6da70961f2ef31b7b628f1018d21db8db015922a301fca7d6fc6a8e6',\n '2e37b06f639fc7a82601b744570a2619e543cbfaf60e474107fcaf4686d3223',\n ],\n [\n 'a81518d452d3aac48bf0386c3ff170ef4e684a4def242c964e129c64f4d647',\n '37506e44c85908ec7b7adda9547fbdcc2e3605151fefa77fbf127ce3bc938f2',\n ],\n [\n 'e80336b2220b1d666074f6b0dac85353d0e4c2e8bd0f37055a2236a6a9fadc',\n '1cae76d73eda7a5964c5d9d3ad6748aff51f5543c56441d2fdb7b444a39846a',\n ],\n [\n '2c01fd8430ecb44e066f352c4f697fc9fda177dbe162f82862d7b9ea8c918de',\n '6e1dfa99640fdf5b30603d34c7c97c1aa6e6b7f3a2c52a21fc64b0fcac7d591',\n ],\n [\n '744e37b511cd0ddcfe15f3581947014c159de81ed055d15a13c7a2d1fa39f0f',\n '685caa8ff6979a6c63640ac638a3f9c75737f2031bd55322a47384357af164d',\n ],\n [\n '40e627ff84e1a7a9068b4368770f5956128a4d9e9e33e9cf5e24d9a242149fd',\n '2465bd6cb20bbdf810e2bc5c3c458cecf4f3aa163a7ac99c2579e5f33417f2e',\n ],\n [\n '5f635af7f554a17bceb6ccb6e637abf89ab6dadd399189b0a0390e87b1896bc',\n '2aa6238a69f89665646c0e3ca2ba5f709cc6e14351cf71e1b00ec45201417a2',\n ],\n [\n '5edad3063c9fa8305978d7e6a4e037c9fa519b8023c7608dfc3b66e5c1e8985',\n '49f405d07d7d01919da51159ecdad1031a5ac208c026fdfc14d38f633d92183',\n ],\n [\n '2fdf2e8a45858c12926a1f25a62255fb2d02d0149a15ef669f859806683e649',\n '61cfb686bb31e2524470d4ad2ae09e3cc91b16305a21d748098feb1d8ce3b3d',\n ],\n [\n 'ecdbd7c37f1dffa3943977278da3bb429afdf948b4ea6cdebace3d3be82381',\n '190b67fb34f7f3ad6afd3d6b6427aa327547d8ac0fb4deeb0feeba1f63d6c60',\n ],\n [\n '233021b483f578dfa5222f8cccba5766ceee0ac65f6d4a3b1673b302a21fb3c',\n '7d4b6d44d175d4b593f06f5a6dcba2cdbc4eaa2097abaf613123546866cf4ef',\n ],\n [\n '42db4e953c2a7a743de9fe20c5798f2247f51db4eabc6f40e86c13909a310ce',\n '12c1a0764a0b9f3666e431923ce15e7fcd0ded5ab153f0b48d362cca1604e65',\n ],\n [\n '30d539e2b545fb957e40e2255f6463b52d227c9808472cee6a3d521aa283a44',\n '5f9eccf747fe6313570f99e845db32b40070acee9ce9e34da7f3c29ca53a07a',\n ],\n [\n '4bd64e5ade3e2733580a6116b4af328751198e7128f9acfe3a3496b545efb5a',\n '4d584768900dabfc0dbaa086632b8051bb3905ef79b84d96c01514441d0cc93',\n ],\n [\n '62d6e771f02e591557197d13c3e77dfa2d1794ac1808407bd8227c4be31b466',\n '5c6f5607c1808e899ba36a425911fa8566b7ea9cc80de8a80538c0fceb837c0',\n ],\n [\n '5ce406218cb2852b1d2fe1836b19462f664631785216e87ffbce26030e2101f',\n '5225f107743c255ab50e7be4a090fe39478d1ef4ff558468559d8cfa87bb94',\n ],\n [\n '670286486e8dda3dc66b0ed3149be7697d3e06c8279844079daa7e42d5af728',\n '26becabe7430380c56e320f5ae3329569cae7b0af06fd5327ee23979d200eb0',\n ],\n [\n '3ef448df33a4394c43e93e5850cd0c5a6dcb18ae1cd865d00fe8ede9336a9f5',\n '56711f6ab7e0e4f7365ac34e284ac2879f40208c46f6febcc1dcf7146ecf015',\n ],\n [\n '4b63fc130288e92f2d6ba238caa7a6364804e29829ac037c57df32fbf762bc3',\n '1eb8c80af55278b4113286c038fff2bfad2da62763bb03426506b869139da0e',\n ],\n [\n '4e7e998557b29a95f805a6e2e26efc1e970108272d4755738c04f28572295c0',\n '97cfcc2f447bde61bde71049d8200a74a3028b21703bc139143d81a3623f09',\n ],\n [\n '574b67898f02964c408f68e9470e7b615be037e40b824e6617f89cb56c21219',\n '49392d5f8e6740a1b0b7444f56d7a17363f8656c6e4c628678c86223f2e46c8',\n ],\n [\n '7e8cb50ea5d5c1b09e219e7305bcb601d99b6d7185b1c388aa8e36fe1e56554',\n '47fefa308645455c12ccb5817da338f0c4f423b341aff4a9d158891a4fd69ba',\n ],\n [\n '67266dea9e71b4ed2bf24a597a823dd048cf31e725db511edceac72998c9ef6',\n '39babd65850befde1f7c28e41dbdbb4caf82bbcf3bcb5b33161f1c2960b2d8',\n ],\n [\n '63e99c2cb9c74eb9227d48065e27abb8f606df8fc83b2c44e4ea38b046bad2b',\n '60494a53dd13ecf34e08079d343c88fb655d6d810785af81f08d5aa9bcdcf9',\n ],\n [\n '3cf0600b0f5a2a4eb78c487cd385350e8c7848e3f6983231881d7f1bbe28543',\n '56dee4288528de609976ef6b903b652127c37b0590e91a2fdbebc3f11df2628',\n ],\n [\n '758f09245fa4b8b23d290ee2b3bfcede199b4fdb11f3cf2502a8ceedd61b129',\n '622d9baadfde781e985d9722e0a04715666769a4cc7a9bea0b96d6386be1746',\n ],\n [\n '38e1a45b81492aa95d7abea2b08b8c14dc0b8a41108b036871fb737910ae18c',\n '145c611262656385e5ed6243568cd3f9f59dbfed7a01ba11e22bb8bb272e08e',\n ],\n [\n '206e54ca53a2f155bd4fc45bf2edb77798ae6623defd4cf22f2dd4a7d119dad',\n '6c94e7f0825ad81680e4cdbcaaaf4df806d57a0d1fb2331926c3fe2b79d22e8',\n ],\n [\n '56e98d2862893caebf66180e84badf19ffc8b53041eaaa313ae7286a8fac3d',\n '526306f9c01afd6e0c1198ea5de17630f5a39c4ecd02d8e6f0d613c355995c6',\n ],\n [\n '4fa56f376c83db33f9dab2656558f3399099ec1de5e3018b7a6932dba8aa378',\n '3fa0984c931c9e38113e0c0e47e4401562761f92a7a23b45168f4e80ff5b54d',\n ],\n [\n '450cfaadfecdb8a2fbd4b95c44cb1db723ee5ac9677c9c188b3d7c8eff4ca58',\n '1a552bdfc0c81be734f1f6ca9a6dd3ab4daa61c11fb53ebb7046eee25d617c7',\n ],\n [\n '6fe20e5c8a8004e33eafc84d16ef770f2f0b7bace19adaaa150f987d295a34d',\n '28a35040a2ebe9a14a162d3208d5eabc6e2f3a8310f926bd80be65aa71775e2',\n ],\n [\n '1bd65f45a35bf62ae8f9ffcbd7de2976b90518b6820c219f039c50043bb1edf',\n 'fb5f0f8659f9b6ed7cb0ddd7999506d0c20b26bbe69d1915a31842cfac41eb',\n ],\n [\n '4ba4cc166be8dec764910f75b45f74b40c690c74709e90f3aa372f0bd2d6997',\n '40301cf5c1751f4b971e46c4ede85fcac5c59a5ce5ae7c48151f27b24b219c',\n ],\n [\n '21cfbc678f5a279ebb6ed124273c8df37eaf12a2d04180403ae6b5ec0b1e1ef',\n '4478ed6a346d899ad7b0b10350270aad39ddd5b68529297e4c91a54357f0a7f',\n ],\n [\n '350bfefbe3d864eaadac9cc1195c14159bb736be743aed7380d2384cadd2046',\n '5e2a4b3ad0e1d7b9b8ef72b10d68a80e5ee691d7db591fcfbaad6240d41da8b',\n ],\n [\n '529acd569127f73c8d34345f87e96cebfb48ee12a00a3861cda209337ed94e6',\n '3120671a89b705e5bfd99b0e7fd2118b4914a3ac309b3d74527cacb5ad7491',\n ],\n [\n '55d3d7956a97d10e65a4d8ffeba40deaf0db0b57f8e022cdb3df6df613f5c6d',\n '159e59a6f92f48fcf85aa96c1a03749a4c4e2cf9e2bc94dd36796daebd9b8b9',\n ],\n [\n '405f019ee8f2e972a005c549b0884b5051f63d1e78480b73208dc07d8c65a1f',\n '4301a3d0c285ad309ff24a12c100ead7f48ba1368143712f32ac141ab4d9e8d',\n ],\n [\n '376d59b298d982f02dccad0edd5bbd4e5e8fad7898750675ed0856850a7babe',\n '5233b12bbc50564eb61cc098a17d3d97f06ec7a230380e4c5d3b725cc318eba',\n ],\n [\n '2f55624af6109ef04b2ed035a44a904ace8627f55889f011f768aabf4de9a38',\n '7f64209ce7dfb63337ccf3d8c14f4093295f86996cabfee23b1655549aca089',\n ],\n [\n '3b8965e942bed2714bc2e685fb103496e1e3595ac6a343d6df45fb5ef6979ed',\n '5b7cac7a165cb69ae103dd9052fb39c00ed0aad47989005aee53972d82d45b5',\n ],\n [\n '7abfe3accdec1eae1a50049efdd9a8eb7c2921a08e8bf1fe606e9d5a4039ec4',\n '3af178e7e831f8148244d2d2b284a32991852db6212ad0a9d77540ef648a5fe',\n ],\n [\n '4983196df6ad7d6f0a8d76f86af3863ad8611374a03fc0fd00793181dbde9d',\n '204c1f91b70f975a21d24a8face664e496f00f602daaafa69a3b56098a4cf89',\n ],\n [\n '79e2b91c1531a3b16dbd53e72d94e16bf265cbec261658151acfaea3718ea72',\n '3d9bdb47e8b148c1c5e9e694ffbc2cf71aac74ae1a85e8d8c3f77e580f962eb',\n ],\n [\n '297efceec61b3be17565843cae465c52524b4ecd9331a4170f54f7de8c4556c',\n '6ccef1733624cc8b973ac63dd54e7a53604929affe81c3439525ae5ed6af993',\n ],\n [\n '44f04b1966264a23ccdc870c8563ad2efcd4c8087b5469b90e792287a5581c7',\n '1c417f0e9829fa3d3cbb7c3cf4dc7aac04c5bf66ff3f86b833a42c533aed1fc',\n ],\n [\n '6ff83f5d8b51db3be0bda80eed2e2adb7037f2f58f705e88f0f98197431ac26',\n '64f59b8428894c2b7afd740866065ded42e716c7d48accd3f117f22768ed9fd',\n ],\n [\n '14aa8187c9559f77cd1cf96b2dfc949182529936f2b0b4050ea56e134073b24',\n '5f36508c68b1dc586f3fd3f4e2bd29c6d8258491b8a6aa19ede811ce0d3d0a1',\n ],\n [\n '95e8882a68c5000d1c2be7c0b43e7f2a6f8de906485241f0285a5c73a27a83',\n '1e4cb67207ab73bc1e5d19fa2146fde6d03021393b77a55df4ddda1fd28f5b1',\n ],\n [\n '2ae0704dacb3da47d564514b4c3543505b403ba09a248c6e74593cba1867ff5',\n '5a4b5818088dc9ef4066b90a8893ae80fc89584f987ec1928ef9d72cea2bd67',\n ],\n [\n '61a10898a76fb99989e51c0e823cb60b95ec7ccccb917c42b2b28014f5fd94d',\n '23d8ec1de45366d3b86c64c2da05a2ce3d171adf52ca5522e652ffd0eeee795',\n ],\n [\n '79884133c879cf07734976fd64de220c5a972e04c2a3afb74c362d6c3beecbf',\n '2aaa0e6d4891b792b5643fdf09873343cd0e3fbba3cbd0601b481a4083f32b6',\n ],\n [\n '45f73d2fa82be6c5ccd0f62d2237efe8727c479967d27cce28e42b9a44bad5b',\n '2fa4932215f72d56d8be5205c5851c9b3e5f2a14468e4a7acace5437c6b27dd',\n ],\n [\n '37f53f771850f52f9c8f87b53c6bf0c93c2bed76f5fd1d5697356d0b2325007',\n '50f1a052b79b446fbc7b93ffa1a4515f6c3be3a76a2b0bc5eb8ff327549960c',\n ],\n [\n '71bd6d23e0d2f312d47582efa609101f15b9ccc571fca8ac4fe3457c67fbc9b',\n '3b3fdf86bd4c7fc26d60540a6439b4d179dcbf7b91efb0ddc60dfbff9a148c6',\n ],\n [\n '78219ba049438385b829c13a4993874a4a326c4143de0dd581c7b9956f99b06',\n '5505f1268dcdd4ee01b77abac3bfdcbf3f0513ab097c69ff777b4a631aaf256',\n ],\n [\n 'b81e924a86536dcf68bc5a2ca2065a61103ba6c9eb0ae4cf8cce9dbe286f15',\n '653a6dfb51acfe8a844fb8362795e5549d424aed88d3a090366a44f840b5b83',\n ],\n [\n '441c0d7b7aa705046dc0e07ba5f33a7d9df23f694a05192ff8c2d7be2aa3fdc',\n '4c06568c0902bb99d428bfa0a946ed0f0ca0a51fbf07cad88e06e9c78e38a59',\n ],\n [\n '2569c8c78b6d6b92533f29f767c95720d377fa63ad5a3b9827ee0a74b0488aa',\n '4b59c81d3cfe08834f946d9d57614f5366e0bcd9349475aaaebe01341196fe0',\n ],\n [\n '3f2fa285a0471647b214eac652bbad9d58a9f2dd2e812aff0210d0d8a6eb32f',\n '4cdb18e1c2848c2b52c1a6557165bd1a8f55c2f7562f5cc0b326f73c25b696c',\n ],\n [\n '5bb5141ab4fcc5290ae9151b8045a2cd8391547ce7b3b33cbbb10f8fb538092',\n '5a36bfd52acc6a83a9913b937ec086cc27fed030b5fa70dbc5d3c12c9515f56',\n ],\n [\n '3f3fed272edf91aa7f8ca5d70005d390fbc67830ffc69c5fa3ae17582d2771',\n '459057e0883c44d8776fa217405f443e5954f08c4a5db68e437becaa664a999',\n ],\n [\n '5237ca6656237a717a739a4509f70db1b9dedbb6cd232f60c9bd8c4563a6b1f',\n '56c7799dd02896dbe7d69dd8bb9718270549592099569d107b7b49c34bf5a49',\n ],\n [\n '1cf6b8499ac881e0b2fc7def9bc1a28937033b2fc52de99e75909a620c7a281',\n '5769cf4f735366fa386b6858043dc99a100f86fbc77b16d57d77766197ba27a',\n ],\n [\n '1b74b8a6b86dbf9638cdb0601e1a332b8d880753423d38c3394902c57f15e40',\n '6bb2dc10d2ecbb913219d0ebdc8d3337d644ed8b6c4e70637ef4c7e50887488',\n ],\n [\n '61e4da415661bba52a4737e2bcde1a837787c4796b2e1854778534f1582c29b',\n '27c43e632cb7652e8508c9c38e3b4ad0d3dd6ba748d42dc84ec2685e64b9aad',\n ],\n [\n '7c460a204d23f20ce86596dae6ac9b36734e4a9f7c5b43262c97a36c6a41c6e',\n '481a11f9300ab4c4bf6924c5ca884728cc361247377065920966785d043fbbf',\n ],\n [\n '124ff5e55e4effa40daa5b9618d75c49c8b6fad95cbe8c0bfdd83cb9bed8316',\n '33a2ea15d0f71f58a00de71acd7f22ccf9002115e49dd1f7631faa0d32f9987',\n ],\n [\n '61c9f8fc86715e95ff43583a865c5a6515f93381839d557ef884a68637eaf4c',\n '5877daaa42bbab9083b571e12648a9d62ced4470d71653092b6546f4a5acceb',\n ],\n [\n '70a6b9a9e5d1fcc07dd9ebef6d8f5fcf04c6cb34932d0fe2335330ac6dc8d3d',\n '3f0cbd332ac56922e886656bee74f6e9bb4bb88f7af7bba9098678af1f38fc',\n ],\n [\n '41db8a0f1ea78443a39e08a54323743c8897eed1ddc28f41aec6f2655040d9f',\n '7d4bf32f8f4719c2e4af8b7889f3b65cfdd033dc2f971798a12170f2b26efce',\n ],\n [\n '62f035e01acdfe841104942d6c8c07f0fbd618cb85998ea24bcc24cfac1f8',\n '1caa886104b7d753fda93645a746989794cd825c62473b526ea34b3d51b5771',\n ],\n [\n '441c6f016d270e86c19843727b83b864cec060cafc813b23d7e41e5abb1a60a',\n '29fece4e40400f3acae0586f4fc8ed535e805e472123ec38d662d8a0b01c086',\n ],\n [\n '2c791ba0fb0b66177815c98191fa6188dba9c795e34a7c3c8a19086215e3cee',\n '11123151389d4b330db6a665a560407e7cd8c3807c749e2b0cffd9c3074ba77',\n ],\n [\n '5292da4ca71ae75ed0554c267747e39c7a129b3b863e1af3ebb3e368439c4ea',\n '63af6a5016deea8cc674c44f16c63c1db31f09af4fb4d2ea7917c28116661fc',\n ],\n [\n '3367388d5d1b7758dc3d92e244f227bb8a54e3d9909e7b7dd62ab5965e3efc7',\n '7ffb4833071e4b03ea755ccb9938487a478248fe9b1158a08f1ac298801c092',\n ],\n [\n '95c863314b7f18090f8eee602403be823a367a1b416d54c32e5f914e67d922',\n '159c2824f899171deee23e0ed520d4825bd667983df0a8d45d3a1f7156d91f9',\n ],\n [\n '621c6e08b3c57404644ad49ac7629832c141273fa1f323781b3395393fe985c',\n '65d1eb0140652958c4371ebec791e03317d6b2e689d90e304666f1b610783dd',\n ],\n [\n '54313129bf13993952cd2b31ed06013aba85e74c1b8a00e062031f32188a84e',\n '680129efc9eb8ec07fc180e8f6877e5f0f9f44e3000a2c586ed4ce49d12a313',\n ],\n [\n '21ea57a1c8286bb45872e78617853c47b89091670ba51c124afa3362e7260d',\n '7087e5c1536df233ec9bfe2f983e8d7622892b9bf64c450c9823898e2cc2fc8',\n ],\n [\n '3793b05b99e7a57d88db4ed0dbc3b771285abcd9052da50f88595354409f3f3',\n '12164105041c056f127e737c7cd63981e05f246bd2b6b65d1f427019c7c3801',\n ],\n [\n 'befd345cef5fcae22ac37dacd6b9128cc58cbba3e3fd774e11b421c2ba392',\n '6209d25f24f88f7876ca604db23d05f78e6b3b67fb033f2f1bee221f352b8c8',\n ],\n [\n '15fa536045fda4c65ff74f10b4e669ce88b9996c6772288289d3ad725987fa6',\n '30e0c2124a35e265e931ccc66ce5ac3697d982814beb407144ff6762cb691df',\n ],\n [\n '38b795bd77ac573576dc204857a488cac2cce19809882631ca2069598c577c8',\n '786ba555d55ebef688b068bb9186a34a08cb00bdfef51619bbf911890ae9a13',\n ],\n [\n '6c66853592196c3eb8d9526dc155205e2c64097adf8684bb0e15eb460ce1c72',\n '1bb4ebf654f4250c8dd1061a4e1b464b31a8a9999ac9960446ef8108a66871a',\n ],\n [\n '5b08dfbc87ad9c00b88e78816973ad2f9c10c70f2156908892cc7b7a2a1fd30',\n '1151f407a77e2556073173d8f5c9ff561d8a23742121ca15f7d0ac391af50ea',\n ],\n [\n '309190eba106aa6ead54b5ca5817969aa68b4b4c627700799a49fc6bdd32ba1',\n '505b6a2bc7b0d78ca6ce2abe7dfb7312369918a4599cccf8a615f6701cfd851',\n ],\n [\n '89cc205966af08acc8910d563af7443d5dfbb5d88dae79c013c678c65dcecc',\n '1f8cf955694b246a423ac725791231257b88936e00347ecaa1e17045c0ab540',\n ],\n [\n '480086b61a80c36cf1e1a350baf554e58ee8d9333186b70c9c512fb9e9d5a84',\n '511edfe58f8d36a6170df743731da1ff525cfd5108be20e30ac4183d1281570',\n ],\n [\n '3caf14fb1d2e90a13ad4eb091250fe37133aabf6029633e905e5a93ead41dbb',\n '49122aff6059dfda19e4b973aba5ebe3804c91728936c6381c1ed1ea9380920',\n ],\n [\n '66d1b8fb2cabc46cd79741ce1cb7326077ad8ea3227a6427244bdd3806bdadd',\n '4a52eb74f4d5371ba3265dffd61c844f9e68d4ff0b44dc4936182f9280bb66b',\n ],\n [\n '373330c5afd53c31257fcc9050fef873e15ea9f81d9810f30744309b04e02b3',\n '5889806607b3dc97a9c5b0c8a2f16d1792099a22866b879ca480cb89a11ef5c',\n ],\n [\n '26840d0ec69a22c6818ff64b8b14633b531508c866e21d1dc9239778ae9e8c7',\n '157971f9a6e3a24d3b307be0e7c8cd352e2eb5cad33cf276270c0f309ee63fc',\n ],\n [\n 'ebb84848f1c38c19a754d1b5d9460e39624dadbb30800987c9419c0f933b9f',\n '517b297cf32f4064e6d6c8e761ba8db89809604a701c7b3aa1a9c6beb370ea7',\n ],\n [\n '25780380bc0795ed0dca727c55240f1d63593e552d224adb40df2d3721c0f66',\n '10215fb5a893e0275e9f1f66b217dde35addee91ed0e8f7d79531a2ff57b8c8',\n ],\n [\n '243e1581cd1abfbf18c31c19a4c3d1cedfe69a40bb57b607c9af2717eefc742',\n '1296c27929f14535718c3a4ebe045f00afdc60afc74c7d398d8ce1b6609dc0f',\n ],\n [\n '48babb8649e054bc8e0b902c89e6940c265f48464520649502ef1064eb94562',\n '3235be7852b0526d1a16f6969ec0e5b0e09cedaadc65863dea4e47f4f398264',\n ],\n [\n '592db7c27e63489ef4bcef2eafce89f40067cd9a1ba48bc3dc76b5fc62ad9ca',\n '48b7711b570cd9ac65910e75e752f4b751fdbfb4091a28f59b8c046d3d9f8bc',\n ],\n [\n '31d133456222586ae42a9ec7ce8539ee04afbe0b2ed00a2564dab0798d9b55d',\n 'a77c52fa1fd718db5c83e7fda6d7d4d9aafef9ad95cad621470f2b753729e5',\n ],\n [\n '4651668379883521e7983aafcb93811b4a72ef2975b3277773746708ef3e3fc',\n '512507f3f544d80ba5d47f73b571881e8d70d7b1d305b9704bdad036b7abc47',\n ],\n [\n '26069e359b2e847affaef604f772f36224608b7642245d0e643889ed231bddc',\n '75ae1ec379f074ebc91270077c74b4d34347ce183b676b4dbe100bfff143b9e',\n ],\n [\n '3196d01d1fa11dc3803b4813c4bbc6326869f61410f2bd14bc0f570d875aebe',\n '20313217cac79875bd2a503db1e86d1e5559911667a02524759344468d9561d',\n ],\n [\n '483256607f75f06fb126addc60cadddd602154cc4782bcc08351a48745d0b97',\n '2950a7e500ebbe9775f08be37cc2e62ccf9030de18948d1bab07a4a9173f75d',\n ],\n [\n '65f07b6050a2fc6eebe2c29ffa62f764060f7f9d3c82d2cb5e4e368aaa442c9',\n '562c9654b646cb84a213b41de203c871b3eae0a05c9c105a66a53c319c06373',\n ],\n [\n '284870f6181c43f3b01d94baa9c5b6ada0deb861145523ad9169580eb7bed35',\n '5e03e6c40c1cfa3cafb01fd0622349871832a9d35499d06408a83edc1b76d02',\n ],\n [\n '32229810a52137f0e6c3d37595c46f6132822d4b05f42674b48d7a7ac3ad85',\n '7babde959a0cf2c53ee59fc52c77c3adf899453f077f441965629f9aead30cd',\n ],\n [\n '1ea8b98a6b85e74e0a2fbc18b206e290f3ed94ce99ca665e8e2351dfade990a',\n '478e93c4724115fb1648c8d5347422adbc1a0bbf962b2312e14aec80e1be742',\n ],\n [\n '270cbaa08c79140c85b864475a0bf569cc03ac785e57f543dc444f37ce746cf',\n '3a9b8d894016680ae9d1bf3deb931d8987d4d8d8bfed45b81ccc595ec79046b',\n ],\n [\n '6943922708b8ae5b40dd7031ef2e487abc4ac39a3591368285e83d6c9c51f4d',\n '5f157c37d09634e8cbfbef90ea50af59815d011e419a691c67ca3402b5efc33',\n ],\n [\n '48ac6a80979fab4912cf0cb557d917a0bd68825d8658ec100496eaae6ff62e1',\n '2b6931350ab183402e39476340eb1177b7006f7a552915581e29a79bd7203a0',\n ],\n [\n 'e3adf9517d92ef22d1e2a787740a292ba32d5ca69faa9e8675f63ed816dce5',\n '36bccf69bb12dadd610145a3399213248d193660d8dc90a2e206f23bf2c7997',\n ],\n [\n '5e6c8ae5afb2fa470f767581f3d578cf6a49547e4b78665edfd45776948bef8',\n '6cbfc11953dd7e195d2ce74e52a60df524767b44c4608bdd755be4bc85eb74c',\n ],\n [\n '15a576a1242d39300f0db3ad770983825988da0457718ecd596c63a0a0eb4a6',\n '69a42e5f6f5a63349b57683a4609bba90f556a1680fa1ec3b02ee7d3211f903',\n ],\n [\n '274cd14e4fbf2ed07402e8ad8075b320c5f76b7ea45ea36af523e95ed63ab50',\n '6ca640f9557c5f2d8b27f6ce95b108880ff4e4816b26b70b6506114389ce656',\n ],\n [\n '4d8284e132e2fe81c5f71be1e3c79ab51b229e2c56c323e207cda179999d123',\n '116cfc00e9fbee1cf16af6282123cdf20eed13021c2037ef4c86f94eb6e6cba',\n ],\n [\n '4056194fb5643e97991942ef5b63cadd89080bf57a01489c4398aca03f0980a',\n '2e2cddb434fa6f6da7859c3d518f0ced8795eea043a6c9613fb3e020103339f',\n ],\n [\n '5d119d5c5ce532afc0875e0ee9b026d878c8773d34237f90a0d0670da6f01b3',\n '4a79fc025ce076b6a4742fbcc8cad313d0a8220c58024a41a5a674c0947e64b',\n ],\n [\n '11800ce4061d99b9d53fd4138802335258f7798c5a935c9979f5a949ce1d483',\n '36745a4741a5c7290eaa8f2a3f9ec955ccb7ca323272e5d35d35c2a724ffac8',\n ],\n [\n '4302525bceb97fa642fd5560a4a39fba3d2c06f68e6aff3332ff1854439ebb3',\n 'e31edfd081ce82f8177b2d7d96e69851d09e908c2517114ffb37ee12c0ac64',\n ],\n [\n '2f5fcbb96f0a66fd3bdfbcc78bda361cb812570f50e7c476533d56eee01c0e3',\n '527428a34855b5695c479d8fb7e831a299f7897f36682a74169cc60d160df2d',\n ],\n [\n '52167df045ad0dc999b98de3d035aced9da4434211149b8cf4bf20e774580cf',\n '19051d2a1ad3fab190c5dfaf45188b49b4e90cca22aae54f0a785562d3d3f41',\n ],\n [\n '541b5332491dbdb2b6f6bccceb7634970c046963891fae936dd950f4432b961',\n '78fa54da996a51e3a9c06091d58c2405a806649da2bb1f323807c4eec50eda2',\n ],\n [\n '5f11e973da659b7738f87ca5bd4f3bd02207dd3c8d978f0d3e83fe81030febd',\n '137aba7027069f62d25caed416e13537687bb1428e71e5f0a0c52d52f2e65bc',\n ],\n [\n '15ec941ee6c2110b819b5541be52981c09d83484c9dc735c43f39f5778718b4',\n '4561826142dc5b56acfcf605a78a4090472bb61235bcd605a765e05d0a7e549',\n ],\n [\n '68ba398736d659522f484406110b43c68158bf4992094acf797a38979c587a4',\n '7c1d9e1702e28afddf22fed7a7a79df4315c174d0c6c4f4c75bc77d9b56777f',\n ],\n [\n '67889cea31c81a429fbae643a4fce0ecd690a5c32b99397e39ed6d7a08702df',\n '7ea277c80b671146c9e455b98f42f45b941ac95ca2d15c8fa9ea82ee9b45e01',\n ],\n [\n '596f2c68390ac26505d3c2eca5c77d46f8f3acbed192a2649d8c525a58d2334',\n '49f3bd8c62c610d5c19c52d970bde24b270c4ff7ae900453b909e72483974a0',\n ],\n [\n '567779fb8b0afe592cea284629e3621ccfae3c4d7d3dc559c9fed750591a395',\n '6010bdc33f1cdb374facefff537e7910b72a1120502f312a7ce41df0d552ddd',\n ],\n [\n 'cebed0233e810aa6a29a8b0829d28f1c92f303d14dd73d6b12da98117dfc7',\n '4bdd51e1192a00df23aa8d0673e4915877ca41ddb8c9eaf21d39dd167fde7b7',\n ],\n [\n '4c7085f066adeb6781596771972b188177e63f2e2b3788d03e033cdd5af1f06',\n '2929ee89f525862b0cedb3ab9b5166e1680cb77fb4668f10a6a3d76b5434566',\n ],\n [\n '760e341bd836899c226176f47685f69438270c150c6fe7744cd723cd1e72359',\n '1bf09f2f1aac1a10ce8bdf20d5d178db747f01a4aa0aa8a5e4bfeef562cd94e',\n ],\n [\n '6016b94c00b54920027ef64902c61478244b1936337d2ad41d9a8d43dd6a4b2',\n '3bf3dd9bce7f6d6f120de87fcbce6219340b59c2c1d75ee0d45105d33aab1cd',\n ],\n [\n '4929e44ff692eb944d1045bee96e750219cda3bda0500029f0df49a1db30b5b',\n '2e138dcbd092242699004b4ce98764ffe4e892841f56830af298581cd1e523f',\n ],\n [\n '5972d0e526311bacb70a04e88969b6c63c7399b578f0dc28bbd00d65ef01da7',\n '76b22bca9ac12d26530e7b0757e646beb3bbc5680d0f3f82fb8ee57ed4b5e39',\n ],\n [\n '2ca0a42a26e26934ca2d48db960b4719113d87c5e57fb437d557c5eb4e03ac7',\n '62778c02561d4ec5d83a132afd7763a8349207c6b5d01fba70b56ba660cba2e',\n ],\n [\n '5137ee53f076e21a2c23da09f63c0d275408c31e4634a6b6373be5cf13e6c00',\n '14fb446c077beb78e04de3282a63bfde12f9af85caaca4ddfab506cee31c0c1',\n ],\n [\n '7d944853d1627b63f560aeda33acf640d35a4ee4d23a744957a2dae9d5b7c6c',\n 'bcb411a210710acbcb9ea12680d89e3e4e652228b6786d3886e95f4d9e6970',\n ],\n [\n '37d412c2ffb173a728477446b60b2b702d07a5243cb5fc8963e623a5ee75843',\n '672c79968908f92cd0cb0b4c65ba86e8f359b015623a89441e1bf859bba84cb',\n ],\n [\n '5b37f472aa80398bff12cc74c8ee784c4fc89757292580d3a498bff17e9f114',\n '7d79da1aab9cfef58a5f3d1c9ec466956a45f8d2af0c1da6dd4c93f720fae6e',\n ],\n [\n '25c09b3f1188c562571536202eb0f5fc4b9a7590417b8ea58b4343685d88a63',\n '3d5b817c73b37e9a1d24ca923351359b42ced2f3cafbcac8c2d6322dc767bb',\n ],\n [\n '32e60904e73f9756f71e0a918d302aeca17cad4acacc81bab15702ab5ff78f0',\n 'bcf4c0204f8275072f98a65b09ac58b87cdc9c70c4edfe99fe18870a3a5459',\n ],\n [\n '49c35575996c1517d2daed90d2fe4a58e674d6b4aaa7288d0642c8bf59e562f',\n '57eeee00adea4ca80eeabab57852cbf03f1a57e21872cd44221e0550b9193b8',\n ],\n [\n '10e1776b4c2a867bf1b028c6edec224cc6616c747e272f49e69b67b02a893dd',\n '8d45d62ec8e627b56950f2f7622a0438647f9e9f28e723e4a37cebc039a1b0',\n ],\n [\n '79a93a75ecbe943acc964fd39ecfc971dc6555b2bc335e7b53f52f4eb16cd36',\n '146132a68ce2ca8b48363612226771ac547eb3cf52b6eb7981718faac08aa3c',\n ],\n [\n '6b22d32e0590e169504e7f19864fd646d0994e7ed3e578a5b88f6e095913439',\n '68c3b22d859fb85e5c8fa0a8aea932285945b230957e603394333e9ad5acd82',\n ],\n [\n '71ce5ec8286eb8c93b8481c6d19cf0a288ef4da4397e9c80f65023e516bc097',\n '54470babc742780cd8a05499026e738ccbf81d4170d1731734de68a8e5b402c',\n ],\n [\n '27beb13a43bc6a1f6ce046da438b0beac5899ff4d57962dcfb6476b563f74b',\n '14074e9e93ee45394dfbe833998b9d1691961f8ba3166224b36404448c61bb3',\n ],\n [\n '6b1de6c8f161aa6509a1dcacf2c0aa1bcf6ee9d9b40e032a9d72f77a6fa298c',\n '5e9312eb5b59d6cbadd7d3dcbc39f1b5bd9a8346fdcfdf1107bada6f9cc048',\n ],\n [\n '32670fc3fa43bf39974ba72ea51f0d045d92d084a81fe5282dfc8309aa900b9',\n '518fee521bf1af62356aac3b7e53fdbf57121e030c6e9572b3de69912ca4eb4',\n ],\n [\n '4b9ca363eabed9c66091a347375f7065cd28f49f914447de7cc1461f1375f1e',\n '3a1a3a2e5e7e72476befe2571ece708052d740d02cbe6fed58740968ae609c4',\n ],\n [\n '4cc6da42863a3deca62fa218b7a3b50e034eb4bafd393eccba3f4cbe192ef10',\n '20bfa683c884f203713953b26d2821287ecd305fa2cb70570474533fc07f918',\n ],\n [\n '87705353c44a5ccec8de65cf5433be6b3d9bd21eea49b60e6c907cf1a67a6a',\n '112804b13eee56e3b01aff75fa08fa8374c44fc461aed8a30ad54acd09c24eb',\n ],\n [\n '6cf6eeeb9d339c0a05f72fd5af73fc7588e6d957100ee8999109437bc126cae',\n '54fa257cea22032eac272fcd034dadf2e00d602ef9e519cf7072023c130aad1',\n ],\n [\n '19b32925048c5519d929650c833661b452ef7be7963fab0b6b328ab7dd7a28a',\n '1bd0c14a10bf9b88ea61011c0b2e64d07da151c6203800d5a5d12063838a510',\n ],\n [\n '12a5fc5559428bc3b4eff97b21b63668b866e0722807f1db1f19696bacd9b0d',\n '4c2eb07f0c24047a3d73b560144f3fd32c99d6dbd9fc7cd2fd2a72a6e4b24c7',\n ],\n [\n '13662b7a7d390aa76eb86a7c3bff6d9913eb28db6bd1a7c42de5cdad2e35ce2',\n '40626aded7f56f82cc431ae30527b096f57fbfbc04d3e12a5abae3edf301cf1',\n ],\n [\n '255825bd49b8a2cce114360bd9c8fe8c641af64c8e7710107213cfcb006f43d',\n '3619cce4482335232f9e76a1460be9d296f2d468d26e4f95a78c71524fe59cc',\n ],\n [\n '7f83009eeed4f12f54d341bbf06066480cfcdf51dda103ac54d4bcecf6b3b31',\n '4269519d28faafd7fd68bebfd8404d71ba05d62c4bb6d65d24aa6802fb84ab6',\n ],\n [\n '2f325650eb316646b4eec903fe44828fcb11054f1bd42ca3a77f7e734110b35',\n '44f976082271016f9048e22c507d97d628722bb431f8d5cc1890524e6c386bf',\n ],\n [\n '750b166bb6edc0ee80fae39c7c106879036738df2d79fb2294e1c21e9a24d6b',\n '54f8aa297a1afafe2a17a3254f45861167414327e918d17003c6aad01d0b24c',\n ],\n [\n '3aedb10db9cf3285cdeee375879396fac1fb50dd259e1716f8c01e66f67ca72',\n '7feb9400f621f58c21601f23b7ec7c94a9b6b193c1cd74a8a60846aedadd359',\n ],\n [\n '4ab7151702de76faa493e7a0b1ac20ee4d10c33b83fec9477547cb1236973eb',\n '63f1f122e3ef3acc46b0915ac69c3f5772879799cad889a817f55f5853d1235',\n ],\n [\n '1675ead0d20e5bc3a7a7331999a87ac4c916ae29669e54197bb02aa6364520f',\n '4d1122da90d49e491922d9b533a6a668e2f65a2737ebb391ebb29fb7c1f8a9d',\n ],\n [\n '2f7148111ef53c613157aeec12e16a20f13481da4390b6ce18a85d1d8547087',\n '2eeda779ab395597651d2a0b833ccf53b10280750139916ae2baf4ec57c633d',\n ],\n [\n '4439c7810e7b2ba772b701ec3acdca0b80c9df23047710b87f7dc3f13b337d3',\n '5029cfe704c602a8a4662af0a5860ec03fb88f046d0e3400f2ce7638014c621',\n ],\n [\n '2248eec40b5732a6a488b681f093643af7937071bc73118acae295a32b51b05',\n '1577e4aec30a97b648de4d0b19cf8891151b4eb11f8de9c6d7312f091552e19',\n ],\n [\n '4738424e558d4e0d87a3124ca02ea24f0adc6b7a9768b0d3945ed2a6104857c',\n '33576f92aca3f0c8ae689c3c274c2de6b918940d86a6852e02fc99e35d1614',\n ],\n [\n '7829edd8b866ebf7baaf604ed13d19a9797578f44bbc51b1cd67ca53803e96b',\n '5559040a6083f2af1f9133ccaf5bc2ce06e56ddfc7dd410e9635c0116b62722',\n ],\n [\n '7f927b881f2cdc05e1a69e40bb714af47b630d1425f08ab5d574ee698f33d51',\n '26a465288e96572de303203bd38f4a03031e8158da0591cb037c0a5111d1056',\n ],\n [\n '36a65598552f8753580d1655417d645a140966e10a1e1663015f9fdfae44881',\n '33d5bbfaebf59eae72b89b1aea12ab2ba3c9617f8c3baed1ec16bdf668381b5',\n ],\n [\n '403becfa545c826782026ff409cc16c9d4fe428f1b5b6e630c92439d2fa5fd',\n '47bd6f2bf5d74f710ecb479c79b01fb774fbdad590e683a415cdedf33f71dc5',\n ],\n [\n '3a747826d241b877d3d56b16e0b810cf088eda4fd6048da174c9991a942a5eb',\n '2c7ba19b0a3486a2cdb84d4a388d34beb077a0e467ba44590166f93f6a09d2e',\n ],\n [\n '3d60cd375842714b37bda89dd1f13a7e0f3ff133b522209617d031bce05a537',\n 'f77f216451ab01ad5226844d2162a7f32744688bcb4325445539e2ce5cec4',\n ],\n [\n '235bf66f67c9100e7f0e22bb299cdfaa603644b240e0770aec7e7fd163e2a65',\n '37110b3fa83ece3990afca2bea8d5ebb3c7aace60a0147f8e6ab733e2f2b4d5',\n ],\n [\n '3b796d4eb69a55471fa86108f787b3604874e92b6887a7667a6c2bfbbd9a42b',\n '4912d6dc0419732ef82cb3278415851d4e2d7ca89e0f4d7128cc9de51b810fe',\n ],\n [\n '48d53516dd51e49faa7ab46c8c10db1befd10f23c6a9d9bc3640a2f0da44518',\n '73a2fb3d064adadf21aa1362c04affc660598f38a9e069b3afb74d0a99ae9ee',\n ],\n [\n '48c32cff161ed145da0d5b73084897647abb777adf65738559ceab6939cf3e0',\n '3d99308978e828f857c382df32b472bda81e8ec8e30c8844077ba6d6d2ba903',\n ],\n [\n '2947ff091a8ec9684affbc9a62e09e598841c4a6dc638088492aa47dea57097',\n '19a2cc97975e547f97a4d02e42f89e6ced6f5a953cfccdec347867d26926541',\n ],\n [\n '1960d85f30475615f82484eba0bdafb7ea7cac3809f0518a757d66f02b01676',\n '36c8f77baabf0cc8805d993bbe62041fcf4e3239cf9d53278a4fbd91e75eeb7',\n ],\n [\n '2765f28074d21d5a055340b6d40092d2bbef807e02009fabfa08ec0b9bdf38b',\n '7fb189e0553d5df52b6843661814824b3f3cbebbd54988f042fb256c6bf30b',\n ],\n [\n '348836cb2aaa00212f4b1a4e2d7fc5417f246bf2fe5c9a16ebabda449e2e08a',\n '3f7276fd7d69e0d55ce5ee1d2d830534a27227fe0b6d8a36c93f9a78b872969',\n ],\n [\n '7afb9d34b6a42ea8c6d870e4b8191c274201dc1f93a1a2219a2392b7e345a31',\n '42bbc20dc7115e0758b364a110227b16b64ec58fc535ce5ff1a9ad8b8a09fdd',\n ],\n [\n '2cae0c2afee1767fd4c66f52e1f176d217e92e89cc19eb36d5a6c1715f641a',\n '5335efe2d9bc3667d25ea88bf76438a4d6ab9ba5c512f9da7d0529b79b62d83',\n ],\n [\n '1cc5fde334707723c3a06f00c106db88664284a2df47bb6b144d9f960aea3e2',\n 'dbbf610d100316938bcd8bcd078513512ecb50d4579690dbefaa419c05980d',\n ],\n [\n '54e90cb8f3a2998d2675c5780679e06c0556b1e618f8fdf07f9a4b2466fbf1e',\n '16248676b6f06ec5e34994bc3115f85c8147b54f34d8500928f2fdc051e2089',\n ],\n [\n '525c70a2ba0dbdd68d75640f47f13d0d415ea595f7030f533f4625c2a46523b',\n '58292c8675e5e1a438f49e0c05648d9a7aa997f2f1fd77d5de1944afe5d7eea',\n ],\n [\n '54726d78d099007393348787a03107ab492e59690a46c87fb02ec554f2353bd',\n '53b54b77184ba75a3391e0ebfa6d6974db028f3f8e34bbd5460759a5848dd76',\n ],\n [\n '4ac81a66903537769d3aac6c483ccc08535cb767b6b5e1ec8017a7393ab70ae',\n '2cb22b77a8a05d26f11a4dec80eff292633aa05553a889c5ab16b6ac6e2ab17',\n ],\n [\n '21d0175349e21114988a2930b9a607d43245783cb4a0c984ce27f4c4206708',\n '59f1f49342cc5496213d3329bf4ca7fb0044337449c579bf53147a1dac9e67c',\n ],\n [\n '167f821b381f4c8adcc39789475fb55ba639e5124fe75f26dd61be396dd5e66',\n '22002c87d4cafb47ac9d27286d5cf5ff7a6715d69814118269b0729be9e4b3a',\n ],\n [\n '31010666c6db83a9f9e4db4c48173afd405783ac53852a6e38a8ff925528843',\n '1f466dc9b5d9094107c741dbf380f9fd98d8549cd50f67169901516f8cce74c',\n ],\n [\n '1ad3875769a5053388a86edc85dd80fdffbbda6a456aea497ff81a0f1f6707b',\n '2de7cdec5e2bad56a71bd2f33a4ae4c874e1ad4210a6ac32b443cfa34e85b1b',\n ],\n [\n 'c489650fb7f459ce09cd05a456fc5a46b849b38a671298ed645bcdaab168b0',\n '45610d092b8af1c43ceed474cd17f7bbee65120aa6fa4d37f949e7e41f25327',\n ],\n [\n '394256a5ef4d7af5459587a0bd2edb8acaf5ecfef2563c9a04daf34a4abe4c6',\n '1ebee390dae1403c0c53994e1d064fa64e20fcb45392e209b2b99486a559ffd',\n ],\n [\n '410a1511fead6151e9bedb089b9832d0fe01fab76d3f8459929f767525aeb27',\n '361f0a5ffe09fcc3ad4eff3f5e89508ac247af80267100b69de3c59df561cfa',\n ],\n [\n '38cd437c9f659e110a869605c182ee9fdc26de36baf559d9229e258267bb734',\n '624b1128ea7739bf1cbd0e423af92a4884323c868d2ba0ee9d362946edee2d1',\n ],\n [\n '78b126e50b7042d2a019f95cb87a3213c664ca1bafe345999b1e9e2dac1e608',\n '19e398196b22f4488cbe854c614ad8c353839abc5ab3a4f3f5c03c16ba8a198',\n ],\n [\n '6d3a5ce91132f385a91823c5c8046c4b638f5fe63357424410d901457cdb867',\n '7b80bae16d2d487e122495174f7a70992bc5dafbed72bf84127ead7c57302bb',\n ],\n [\n '32d053a904dc4d88fbe7d0b96e0cbeca22a00aa5c79c753d52b0b60abf31602',\n '3af6a02e5cae6d6490354ae51185149e3fdb6d0d9caab90e95ff58aa0c40377',\n ],\n [\n '49b1fbff5bdb0aa6938b066dde0ed772c0d81f9eff52e7fe038b0ccbd78adb5',\n '1c6e57834eb14d507eed8b36c81ddf92fa91c242467061927a742fafa82b43d',\n ],\n [\n '2f28b8994ca6f234d9293d26196b43b9d1d5306844348c4a638102c05de85f5',\n '759cfb172eab065d477248b3569f4ff5791055f01e95fe71b94b8e615d73c96',\n ],\n [\n '3c2ee954ff534f856f59188fa0f29ed8a022aee0cac52d634f6dc58cd514d70',\n '22bd162e74925f0a876bd8a206b8767dfdd7c898576a73a490f138d9a7f99c6',\n ],\n [\n '5763a7cab001e1aaeabf9ab5b9b2fffe6cc2b299ab04ec4933da74d960e1ab',\n '715ee4f8ee93ab5a1dba00f0a6abc4eec47d49b61254cc27fc36a031e32f0f8',\n ],\n [\n '19976ad8d7b7f47c785408243a227401996b36e47c7a78a7bc7d4256233ba9a',\n '896b713c5d7777b0703821a73c1d9a4c3755501042120534ff13990975e1f5',\n ],\n [\n '61674b992c29827186cab5ff454758dbbed8e89bc23d0bd33193afccc3a04bc',\n '38e1020744c13903809ea30a0662fdb5226ae760cdcf10800faabec452e00f8',\n ],\n [\n '2ea2d48bcb83c0c9cda4efe11f07165cfcbc9ccd26526e5fb12556316d4b1df',\n '1d2d68b74ad384c5c4a9c85453104216357bfcdf635680b40215f0f800974cb',\n ],\n [\n '7881212050264c40c336ed3a15dd2cd868ec9a558f5b728869eab66e8b8ed54',\n '21aaefcc8ad8a161b8971d6880321781dbd939570c540da4c330922b8c81e9b',\n ],\n [\n 'b6be88ce0461d20f59c5199573cda0170b61decf6e8e69a6d32f1695adc4ed',\n '5536e4808370716f2bb3423a9a49a38ddbfe91faf3b7a35eb53d3519238b6cf',\n ],\n [\n 'e5972af1655eb6dde2e8c77cc58044299922441b5ee41ceaf5cafedc765bcc',\n '550282f37a4783dd60801c237045992d6fbe82a5902e7d837ea25f6f98c7b3a',\n ],\n [\n '7efc1aad1f580d8f50274f1c114c40056be19a8c96fa8c4cb5bf85e1e7f3e4',\n '2689f1c3898b114d668be6413643ee9f879913d40c262541fd0316264c60a4f',\n ],\n [\n '7939db98037f59b0113e9d60051f75ac9c3cfd1a3eb535c73e2d945068c6c5c',\n '410914ca8bbf3c65cdf3e9772ca790c19131c50068d34b7346c10260a578a8e',\n ],\n [\n '225b77ad00a2b83d26690190b74867326eca4f55bfbc3a13be036225ca3b1b5',\n '411faafef89042ce6beb64309fdaff70fa53e9d32d79a21e7f82f80e79ff05e',\n ],\n [\n '1501e64c99c8b6658b0479f2c05c9142d246eaabfccf2fcec8dc4399539d8e1',\n '3bab1e3339e42c9ee66c65b0b20236fdd9362d3ce786ad3a9779ab578af50a8',\n ],\n [\n '59b907b941f24fb8ea2458153e55f07534b388e835af7b69f3c9f54392a335',\n '1d5438c4f2f68a417f3d56f916d899a6ffe910f5f2989ca31687f1b10f60db8',\n ],\n [\n '2887d08a26f484546f360e33abbf7a998b7170a5b30070938b84f072c676bf3',\n '62a78e8d00e5d3a59e2fc424ffa08961567ba1ef24c8531cd7bceee6074a535',\n ],\n [\n '6e3cc8076b3d45377929033af35aab0c6d19ae4fd47c0daf844079ca04c46eb',\n '7b90f338e4d848aa8f19d0b5c3bca916a2a9024acbf14bddb278bca2aa39e5f',\n ],\n [\n '34844dacdd3ec54a3af328bb9d67715ab33425e194ac9977ca02ef22e8f7a88',\n '3c1affc6372f32a1634748124f9e1a03c4f0c993971da0dc28888b0801279d',\n ],\n [\n '436b192e03a49796cf9bc5e93c88268b71c9c24f9c3a85322bba634ebea309d',\n '67a8091ef69d62abcb28ce5df4dc7d53f8dc2b9690344f75ecd03a6d9386044',\n ],\n [\n '592d25b68baff87a6d7fd41ff0dadbddc1bd1316683de3b2d677501c0eb14e4',\n '27ad1e1099683f54589010faeefb19e38569ace43653be8787a42b0591e7bc5',\n ],\n [\n '89a5111ae911512ba62e87b97f643c0219702f235c70f62c6678a129302009',\n '557fa3d98e9ce7b83b47545013a4498f3de43787fb66b1a54521222242f7c1b',\n ],\n [\n '1c9b5e53377e72da5066cb08566bbf9ec31ec1877f455d932cd9b1aa375d34e',\n '72f79555a8bc207863f32d482fca54692825449fd8963fcea3de3a8183a739a',\n ],\n [\n '574a6e05eb14591729515be239ea8c1fa9e12d4049d42876f76c8ff37bca03',\n '5f99b3af43ca68c1c73e8190d5f73c8de162ba643d7d5f0cd73cfa8135db6d3',\n ],\n [\n '513fc5c2e16505b2b25a2f284e167d5401194bcac0dc3ecf8b7c9acb560daa1',\n '687ee7a1a8954d08d3856e1a16ded808e419e789736d3f55f79f7693bad69f5',\n ],\n [\n '53d48bd1205274b1c2b0a0ceb3d21c5fcd7c8892a784931603240b288a598b9',\n '35387abd7ea59c9b956de44d36533cad1f6668c438d666651695ff3862159be',\n ],\n [\n '213eb1ea99e08825110dd61094eb6e8145119dc1c507636f068730b1e086d44',\n '744f6853f4f02f4f042468d0739e0c9f64df720b87ed77d1979547084ef7a89',\n ],\n [\n '735ef017d091ca23264ad0aa7bb9b2be3309b4539605e79ed4a652ccb2fbe3c',\n '7f0ccc7a5747c4e921fff97d431169f690763427e2cfd1ad74d7a0308d7faa9',\n ],\n [\n '3f36babc5a30070b610ed97db44997e6d9115c9c0579ad8f75d295a17130001',\n '79047908a2474e32d5c712a07bf5c4ad522590bb5d6cefda410d30528e12ca8',\n ],\n [\n '51c04907ae88a5926b242fb2862cb1f2c651a94e6caad5bff8601c079fded74',\n '10a585a269f460aed43f54c7de13cdf623fc8de5957526997278be939ef32ad',\n ],\n [\n 'c1e1bd626a735aa2c065831317217ecce68e377eb1f67e54ce2e97bc2ef2dc',\n '53c5af23a9b482f420be6dfd37b6886154cfd130794098e1f51c1885ac2556a',\n ],\n [\n '5aff3b30775ae4758e604a4a6262803a545f5ef4e7855fa245ac6a6431a9ece',\n '39a4799e5519047f29333bee9c86c99bfa8056d4aa381c396c4a44331fe795f',\n ],\n [\n '3d753e9723701a8e9d99b91bb93dee2eda7ffa5072fb2cd5c5fd99aebcdb299',\n '15798bf5c17d6d5880fed1553af32dd8d8baf2888c715a886575448a24c7975',\n ],\n [\n '6593e5078466b07a4222d2e544da826d2c583c9cc5f2eaea148b129b00d4aa0',\n '11b352b08a0a61d3cd67d1dc08069dec3bde907b3da0f56de5011b956bf8744',\n ],\n [\n '7a6eb353c5be9ff03fe4a06c01fb71aad2b38144179a291ebcbb2c2417cca65',\n '3de3ecb12f2fa699b46a9d399abf77ca17bebc3e491bfb2542dd0fba991e2bb',\n ],\n [\n '2c7ead583d6c32162091034a9eddfa775b4e84b8bdbea939edb2a80dcf64f6',\n '461790ce40d9c276d962b2a1e9a74d66e9d7335962e234e8a2fc6963d31722d',\n ],\n [\n '34285af023d9b4c2c2b88e8704bf2c05a9b553b00b2e70ff05f8c2970cb134f',\n '33fe678e7671760a83836107428dbade68c3593fbe568f3f8f1b2c568099c44',\n ],\n [\n '6222f720a24466263db6a11842f117fc4bb78da6705f140e48869db3e087441',\n '6eff5b9bf3aeedc962bc5a24b66e7bdad2153450ed53a058bf2c8dbf2907693',\n ],\n [\n '17c6ec5ea206eb97cbf53851e37ce391080e0d2bf1e5395610f79ab0503f7ce',\n '3adb71ca3523d88ceb1e365f12dfb24895453c14daf0046b2626cddadfdf5f7',\n ],\n [\n '70859f9771a713e54974ce11cdaf44b0dcc3e9befa0c0834908d877eeaafd27',\n 'd18f794bf0cc0623b711e7450030424e52326c45ba9b03341883ae4828a5f8',\n ],\n [\n '2a820cfd0fd4ab0871e7b303cd545a3086caf8fa818c087a4017197da74efbf',\n '5f992683ff37f6c041b84bfc01503d333ac9763505cc8f69473da01812969d1',\n ],\n [\n '5b0526de2c07fe7cd73e3884f642d57a0ac5e13c68590ed03a14e530616e8c1',\n 'eec69d0cbd92c9fca31ec967dba848bec368e792d6678797946a5e34fe3487',\n ],\n [\n '6cf6b3efee707210cb3a72f1e885c3d0953aefb43e5e148c740aa1641725c61',\n '911cb630b898e2c1a9115f9e45bafe3b819edfb1eab6e15612d14289939984',\n ],\n [\n '74e913de55f1e46143cb2ecfc580f8d3d3908f200281322b84e21c989cda293',\n '761d2736c9ac7670ba905bc2629c6c0dbe988820a4454ff415ba68710f7df92',\n ],\n [\n '44084305e0c911a40b7cbefe5f13cffe9a99375d1a584c4a2200958050af7a9',\n '249c83877371564708ea525b64b1e7e12785460d83364446531c9adcacba5f0',\n ],\n [\n '2bf71ad4d1bee1a67fb300477029f54bdb0e09f78bf2ac2e8afc7465a7adbcc',\n '6244dd6cad282539049be57487bfd9900bb0d5da805d02b535096368fcb4cd5',\n ],\n [\n '3a62d8f763b62def36e4089458046a49c5ecb91b861549530773e0548ff2bb',\n '6a10a03ba61e6ac657270465c09aa9526cf1ebe96bdecdf0e7000476a47b9eb',\n ],\n [\n '284eed3a17c51e0677d4fe897f056abe9def8af07a4630e6ca5723e2aa6677',\n '516a06ac1d5626ed03d2eee9de6f60f0311eca703a99b0fb31b9c66b01c27c7',\n ],\n [\n '2a2c63b16cccd685f731d06fe93ce2cffb358d34d03dda9a7368185c1eb0c32',\n '7180baca0ba81284809f92eca1654cd76b925a9242e5d5e0f18d0a55d13c6ec',\n ],\n [\n '5f9466017ec09769611389ea5370ad68dda936d3f5816c9e928ff9574abf9a7',\n '6619b5b145bb5f4f29deb7a4cd68ef4da3995312fa6537f0d01684da4267ece',\n ],\n [\n '74f229babe01b4962b3307589c1a13019134b1db6822698388bebb55d21c30f',\n '156ae857ab3279f754facba0db36398dffec8c31e5e160473198f2f891b7531',\n ],\n [\n '334b9fe3a5fd99bc966ddd1309698fd32afd1f235062f2c275b6616a185de45',\n '221a60053583cc0607f6f2e6966b62fc9dac00538bb7eb1148e007a92116d2',\n ],\n [\n '7ad710ba002a67c731efbaba2149d16fec5d2f7aa3d126fd9886172e9f4ea30',\n '3a10f8e902a7a13aec94d66415347e1314f9bac83a7db176096b809b25ffb86',\n ],\n [\n '4306dd0a184a3283c3097ff8f7434cec80912e9dc04b7df21ba73fda9f8e6d8',\n '6d42bd3d1a8dbddafd09e872e2aa3891ae79ec939dc1b382196bc21c4ab749',\n ],\n [\n '1c3f2124e1135c32a426d1d14e471edd9e0f2c7bd703ee123cbbd608e8c4be7',\n '3cc607a3c3f1ab68dd5fa56c65996002721b8ad8ad4b0dd9e5b1467d316583',\n ],\n [\n '294af33272ffcee0b56a436de1b73759cbddebef4c07888b42c2f92b0b68e1',\n 'd837164311d5dca8d37b99ef9eb22708643c83d1cbdfe852f63ea07b06fbad',\n ],\n [\n '753bdb5439a19bbffdfa02b1dc24e8368f22d0a8276b109c11e6feb26f56f39',\n '6ed396231af93647633eab467f1a034f38e76823eb85baf97cae56e2dcd9f75',\n ],\n [\n '5674f0cb892b733fc0b50e121d8679afed0a925c32594cc65ffe83bebe7748e',\n '7fbf0325dd38dd94905adab2c52758552292a6a103d9edfcb11938828e828c8',\n ],\n [\n '4a8f053573a0a74251059d0229d89b6660407ba0b491779fd10f87a5117c81f',\n '21b70112485398bf67ec9d733df24a1df30dea718a93b786f41ed04e3ae3c5e',\n ],\n [\n '726c01ec4a08df8fc8de173311f50d4f3b97c5a9cf68c1536146f827db95ae8',\n '15013cafadefa7f1c4e4dfdd70bd4d3979dd18bd7f0332572ce2a3fd8773d12',\n ],\n [\n '38ac0fbfa98937257460db7e6645d7e5112b6fce7234813fc8a704e8ade8da2',\n '73c0109f86048aad08c443f781ae60ad13b99f7b9cfdf3128fe6d6eeb799a7b',\n ],\n [\n '6f6d3a38621582ace092eb50ecfe9eff265df141ebdcab8653299116fcea291',\n '4a1bf3f39bc919c8f1b720a0b1ce952cad17f2ba98308ee6b76dd9b6f3d7b75',\n ],\n [\n '6a307fc28e1df8d9ad01766419e097797d65cb674436fa1c8f012d3de2c2a1f',\n '26911a635ba824db004875d79dd84834a97ac12643e42829015bf88c1fd6f05',\n ],\n [\n '2a74860e3336d6db916555894cc8028f41508812925db1925457afe40257155',\n '5f8da573f4c39816ce2dba8a20224223a7cfec53117ec78973930c0e9b60244',\n ],\n [\n '4d2b49e1ed0799f719b8269f092cb489a466a645bc0ccabafdc678864c176d7',\n '5410083df7d256f18cbf5697ae5e52c31e075d8a3b27e21d6f5177ca882f6c1',\n ],\n [\n '110ecb9fbf6c333d168cee473cc5ad98809b6cb9eb5d1f6cd28ab5fab504fd3',\n '7e3c54d7533d9f8c3310f219dab0cc3ea4d39b418a748eeffd6bae2b8637a43',\n ],\n [\n '5be4d711b80da70e6d3ac493250bbfd16f20b25f31919b3a91cf14ffbac1096',\n '7f55a0919f082e8885f1515e83c5b39b6022404503507498e1b4422d79c43e2',\n ],\n [\n '2605125b95ca4ba93a21cbbba5762898a7cf9e988f07ab9e64cb3868e3b139d',\n '62f0ccf55b9fc0eaf9736fc8ee484e2acdbe259813af9803cf815829a5e9d3b',\n ],\n [\n '1092bbbf206f2a3068167c3dd99a72de31e206f6c504c071c8214d105ff814d',\n '309f489f68a62089f53b96df5d4fbc3ecc5a1a42eb7ece0e49bad17ad490ff4',\n ],\n [\n '2abdee9409d9c92559ca3f4e6bddd649c31aa09b90bfcb4a612af491241e18d',\n '3ffa8eac180a29de3f8a69efca84bac046f921f5725e96a6ff0530be1436aaf',\n ],\n [\n '376313f27d00bb1aae7ec991745efe6ee28c6b50de0c6cd9845cc4bb4f83543',\n '6a8e0a9389ba528b156fa94ac090a895d7b795818d4941c29415d9e2984c547',\n ],\n [\n 'a80380c71bd466a696b3f0fbf02817c9459d9798f4f3899cf32edf647fe066',\n '6a09805e814e7cdfc76eba4b79f1df5ae559e0f0aba9f728d3cba4ea5c57471',\n ],\n [\n '223694b921d247d989a79b9b2b2f07496036c40cb043eab074a9d6a2cd2ffed',\n 'c247217f1b1df35e30d9e15fdaadf42d6fb0edd3a5a7e265d4cdc426c120aa',\n ],\n [\n '102333620df278c6714bbc880fc087db58c1b9b4d77ed4d61b32a74bfc7c3e2',\n '6a77d37727ccf71c2caeb151faf4404d4b94e9047f9f0a7c3966367f3b53c65',\n ],\n [\n '891626f466536929ee7eadcd18b41925706dedab7528ed5f0f7abf039eb9d2',\n '5f73d11c141c933a35b2d0d06e5cbae614a20d17dc3b439f8bcdc3413c5ea37',\n ],\n [\n '215c23fd3f073f870e5e80303967391bf173f8adcdbeec72d131c557babc203',\n '10634332e9d9439a321597dc5b0fac9ff478834c3d6e281735f21a4a5e13266',\n ],\n [\n '21ea0bdc1332bc36e6aeb43be9071651c27e4ea2eadec636c8d818d4af72a36',\n '3a523d9643dccc6bb9c7c58413312caa3e60ba9c7c7f0177e0f3f469a3241e3',\n ],\n [\n '60deaed1bffb6190beed40caaf2bfab5e43d3707aff7ad3f278d571aa247eae',\n 'e41f71ff254c1418e6a66992af307789fe04d6606fb2670900bb1a089fd879',\n ],\n [\n '1e1fac4a1646253fb1332fadc21fbdd3e3a24a840d129400f520ae4116a4cf5',\n '69c406f9f46576afad68808de0ab7e8922b6226af748e721d9097e21f1800f3',\n ],\n [\n '5db0ddcdf79ffe74d6454c12d2bc60b06776db03c75dc413f5be42ea9a91b5e',\n '134c3d6c699841f17306835bb193785228ffe7ab212a01a861c56b086a18cec',\n ],\n [\n '626814e320fb5bea505b248fd1c1389ad586c1cfe04923fe2f83173e915f4f8',\n '7ae407a926e887206a8b85cf485f1f327c9bb8ccbb6897024e2d122877d8ee0',\n ],\n [\n '23186237dc7d3b570cea645282ad4c359731bbfa54e7f036426bf6493812cd',\n '7d1fbab7e61a22d3b00993290d9f4cd5d820061573e787f66c2cff9a18e1eaf',\n ],\n [\n '54302dcb0e6cc1c6e44cca8f61a63bb2ca65048d53fb325d36ff12c49a58202',\n '1b77b3e37d13504b348046268d8ae25ce98ad783c25561a879dcc77e99c2426',\n ],\n [\n '13961b56b9fc0e412e468c385c22bd0680a25624ec211ffbb6bc877b2a6926c',\n '62f7f7792c77cd981fad13cb6863fe099c4d971c1374109185eae99943f16e9',\n ],\n [\n '47abd7308c70659af3f00fafe6837298af3cb530b6c2ba710ffd07a6bc1ae98',\n '75d0c8a7377aa9f0663d0c124a5659750847afabc29e39893fd27534a4a03cb',\n ],\n [\n '2c6276b764fb398fa555857dbe0ce0ec18fab7a233bf23851295739801f0585',\n '5d8f4897ce44007ec5bfcb9aeb78b8f6e1d40a514f72d213c9300d2770d2b8c',\n ],\n];\n","import BN from 'bn.js';\nimport assert from 'minimalistic-assert';\n\nimport { addHexPrefix, removeHexPrefix } from './encode';\n\nexport type BigNumberish = string | number | BN;\n\nexport function isHex(hex: string): boolean {\n return /^0x[0-9a-f]*$/i.test(hex);\n}\n\nexport function toBN(number: BigNumberish, base?: number | 'hex') {\n if (typeof number === 'string') {\n // eslint-disable-next-line no-param-reassign\n number = number.toLowerCase();\n }\n if (typeof number === 'string' && isHex(number) && !base)\n return new BN(removeHexPrefix(number), 'hex');\n return new BN(number, base);\n}\n\nexport function toHex(number: BN): string {\n return addHexPrefix(number.toString('hex'));\n}\n\nexport function hexToDecimalString(hex: string): string {\n return toBN(`0x${hex.replace(/^0x/, '')}`).toString();\n}\n\nexport function toFelt(num: BigNumberish): string {\n if (BN.isBN(num)) {\n return num.toString();\n }\n return toBN(num).toString();\n}\n\n/*\n Asserts input is equal to or greater then lowerBound and lower then upperBound.\n Assert message specifies inputName.\n input, lowerBound, and upperBound should be of type BN.\n inputName should be a string.\n*/\nexport function assertInRange(\n input: BigNumberish,\n lowerBound: BigNumberish,\n upperBound: BigNumberish,\n inputName = ''\n) {\n const messageSuffix = inputName === '' ? 'invalid length' : `invalid ${inputName} length`;\n const inputBn = toBN(input);\n assert(\n inputBn.gte(toBN(lowerBound)) && inputBn.lt(toBN(upperBound)),\n `Message not signable, ${messageSuffix}.`\n );\n}\n\nexport function bigNumberishArrayToDecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toBN(x).toString(10));\n}\n\nexport function bigNumberishArrayToHexadecimalStringArray(rawCalldata: BigNumberish[]): string[] {\n return rawCalldata.map((x) => toHex(toBN(x)));\n}\n\nexport const isStringWholeNumber = (value: string) => /^\\d+$/.test(value);\nexport const toHexString = (value: string) => toHex(toBN(value));\n\nexport function getDecimalString(value: string) {\n if (isHex(value)) {\n return hexToDecimalString(value);\n }\n if (isStringWholeNumber(value)) {\n return value;\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexString(value: string) {\n if (isHex(value)) {\n return value;\n }\n if (isStringWholeNumber(value)) {\n return toHexString(value);\n }\n throw new Error(`${value} need to be hex-string or whole-number-string`);\n}\n\nexport function getHexStringArray(value: Array<string>) {\n return value.map((el) => getHexString(el));\n}\n\nexport const toCairoBool = (value: boolean): string => (+value).toString();\n","/* eslint-disable no-param-reassign */\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nconst STRING_ZERO = '0';\n\nexport function arrayBufferToString(array: ArrayBuffer): string {\n return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), '');\n}\n\nexport function btoaUniversal(b: ArrayBuffer): string {\n return IS_BROWSER ? btoa(arrayBufferToString(b)) : Buffer.from(b).toString('base64');\n}\n\nexport function buf2hex(buffer: Uint8Array) {\n return [...buffer].map((x) => x.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Some function imported from https://github.com/pedrouid/enc-utils/blob/master/src/index.ts\n * enc-utils is no dependency to avoid using `Buffer` which just works in node and no browsers\n */\n\nexport function removeHexPrefix(hex: string): string {\n return hex.replace(/^0x/, '');\n}\n\nexport function addHexPrefix(hex: string): string {\n return `0x${removeHexPrefix(hex)}`;\n}\n\nfunction padString(str: string, length: number, left: boolean, padding = STRING_ZERO): string {\n const diff = length - str.length;\n let result = str;\n if (diff > 0) {\n const pad = padding.repeat(diff);\n result = left ? pad + str : str + pad;\n }\n return result;\n}\n\nexport function padLeft(str: string, length: number, padding = STRING_ZERO): string {\n return padString(str, length, true, padding);\n}\n\nexport function calcByteLength(length: number, byteSize = 8): number {\n const remainder = length % byteSize;\n return remainder ? ((length - remainder) / byteSize) * byteSize + byteSize : length;\n}\n\nexport function sanitizeBytes(str: string, byteSize = 8, padding = STRING_ZERO): string {\n return padLeft(str, calcByteLength(str.length, byteSize), padding);\n}\n\nexport function sanitizeHex(hex: string): string {\n hex = removeHexPrefix(hex);\n hex = sanitizeBytes(hex, 2);\n if (hex) {\n hex = addHexPrefix(hex);\n }\n return hex;\n}\n\n// implemented using TextEncoder to make it isomorphic\nexport function utf8ToArray(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n","import elliptic from 'elliptic';\nimport hashJS from 'hash.js';\nimport assert from 'minimalistic-assert';\n\nimport { CONSTANT_POINTS, EC_ORDER, FIELD_PRIME, MAX_ECDSA_VAL, ONE, ZERO } from '../constants';\nimport { KeyPair, Signature } from '../types';\nimport { addHexPrefix, removeHexPrefix, sanitizeBytes } from './encode';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nconst { ec: EC, curves } = elliptic;\n\nexport const ec = new EC(\n new curves.PresetCurve({\n type: 'short',\n prime: null,\n p: FIELD_PRIME,\n a: '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001',\n b: '06f21413 efbe40de 150e596d 72f7a8c5 609ad26c 15c915c1 f4cdfcb9 9cee9e89',\n n: EC_ORDER,\n hash: hashJS.sha256,\n gRed: false,\n g: CONSTANT_POINTS[1],\n })\n);\n\n/**\n * The function _truncateToN in lib/elliptic/ec/index.js does a shift-right of 4 bits\n * in some cases. This function does the opposite operation so that\n * _truncateToN(fixMessage(msg)) == msg.\n *\n * @param msg\n */\nfunction fixMessage(msg: string) {\n const pureHex = msg.replace(/^0x0*/, '');\n\n if (pureHex.length <= 62) {\n // In this case, pureHex should not be transformed, as the byteLength() is at most 31,\n // so delta < 0 (see _truncateToN).\n return pureHex;\n }\n assert(pureHex.length === 63);\n // In this case delta will be 4 so we perform a shift-left of 4 bits by adding a ZERO_BN.\n return `${pureHex}0`;\n}\n\nexport const genKeyPair = ec.genKeyPair.bind(ec);\n\nexport function getKeyPair(pk: BigNumberish): KeyPair {\n const pkBn = toBN(pk);\n return ec.keyFromPrivate(removeHexPrefix(toHex(pkBn)), 'hex');\n}\n\nexport function getStarkKey(keyPair: KeyPair): string {\n // this method needs to be run to generate the .pub property used below\n // the result can be dumped\n keyPair.getPublic(true, 'hex');\n return addHexPrefix(sanitizeBytes((keyPair as any).pub.getX().toString(16), 2));\n}\n\n/**\n * Takes a public key and casts it into `elliptic` KeyPair format.\n *\n * @param publicKey - public key which should get casted to a KeyPair\n * @returns keyPair with public key only, which can be used to verify signatures, but cant sign anything\n */\nexport function getKeyPairFromPublicKey(publicKey: BigNumberish): KeyPair {\n const publicKeyBn = toBN(publicKey);\n return ec.keyFromPublic(removeHexPrefix(toHex(publicKeyBn)), 'hex');\n}\n\n/**\n * Signs a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid private key.\n * @returns an Signature.\n */\nexport function sign(keyPair: KeyPair, msgHash: string): Signature {\n const msgHashBN = toBN(addHexPrefix(msgHash));\n // Verify message hash has valid length.\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n const msgSignature = keyPair.sign(fixMessage(msgHash));\n const { r, s } = msgSignature;\n const w = s.invm((ec as any).n);\n // Verify signature has valid length.\n assertInRange(r, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(s, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return [r.toString(), s.toString()];\n}\n\nfunction chunkArray(arr: any[], n: number): any[][] {\n return Array(Math.ceil(arr.length / n))\n .fill('')\n .map((_, i) => arr.slice(i * n, i * n + n));\n}\n\n/**\n * Verifies a message using the provided key.\n *\n * @param keyPair should be an KeyPair with a valid public key.\n * @param sig should be an Signature.\n * @returns true if the verification succeeds.\n */\nexport function verify(keyPair: KeyPair | KeyPair[], msgHash: string, sig: Signature): boolean {\n const keyPairArray = Array.isArray(keyPair) ? keyPair : [keyPair];\n const msgHashBN = toBN(addHexPrefix(msgHash));\n assert(sig.length % 2 === 0, 'Signature must be an array of length dividable by 2');\n assertInRange(msgHashBN, ZERO, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'msgHash');\n assert(keyPairArray.length === sig.length / 2, 'Signature and keyPair length must be equal');\n\n return chunkArray(sig, 2).every(([r, s], i) => {\n const rBN = toBN(r);\n const sBN = toBN(s);\n const w = sBN.invm((ec as any).n);\n assertInRange(rBN, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'r');\n assertInRange(sBN, ONE, toBN(addHexPrefix(EC_ORDER)), 's');\n assertInRange(w, ONE, toBN(addHexPrefix(MAX_ECDSA_VAL)), 'w');\n return ec.verify(fixMessage(msgHash), { r: rBN, s: sBN }, keyPairArray[i]) ?? false;\n });\n}\n","import Json from 'json-bigint';\n\nconst json = (alwaysParseAsBig: boolean) => {\n return Json({\n alwaysParseAsBig,\n useNativeBigInt: true,\n protoAction: 'preserve',\n constructorAction: 'preserve',\n });\n};\n\nexport const { parse, stringify } = json(false);\nexport const { parse: parseAlwaysAsBig, stringify: stringifyAlwaysAsBig } = json(true);\n\nexport default { parse, stringify };\n","import BN from 'bn.js';\nimport { gzip } from 'pako';\n\nimport { Calldata, CompressedProgram, Program, RawArgs, Signature } from '../types';\nimport { genKeyPair, getStarkKey } from './ellipticCurve';\nimport { addHexPrefix, btoaUniversal } from './encode';\nimport { stringify } from './json';\nimport { BigNumberish, toBN } from './number';\n\n/**\n * Function to compress compiled cairo program\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/master/src/starkware/starknet/services/api/gateway/transaction.py#L54-L58)\n * @param jsonProgram - json file representing the compiled cairo program\n * @returns Compressed cairo program\n */\nexport function compressProgram(jsonProgram: Program | string): CompressedProgram {\n const stringified = typeof jsonProgram === 'string' ? jsonProgram : stringify(jsonProgram);\n const compressedProgram = gzip(stringified);\n return btoaUniversal(compressedProgram);\n}\n\nexport function randomAddress(): string {\n const randomKeyPair = genKeyPair();\n return getStarkKey(randomKeyPair);\n}\n\nexport function makeAddress(input: string): string {\n return addHexPrefix(input).toLowerCase();\n}\n\nexport function formatSignature(sig?: Signature): string[] {\n if (!sig) return [];\n try {\n return sig.map((x) => toBN(x)).map((x) => x.toString());\n } catch (e) {\n return [];\n }\n}\n\nexport function compileCalldata(args: RawArgs): Calldata {\n return Object.values(args).flatMap((value) => {\n if (Array.isArray(value))\n return [toBN(value.length).toString(), ...value.map((x) => toBN(x).toString())];\n if (typeof value === 'object' && 'type' in value)\n return Object.entries(value)\n .filter(([k]) => k !== 'type')\n .map(([, v]) => toBN(v).toString());\n return toBN(value).toString();\n });\n}\n\nexport function estimatedFeeToMaxFee(estimatedFee: BigNumberish, overhead: number = 0.5): BN {\n // BN can only handle Integers, so we need to do all calulations with integers\n const overHeadPercent = Math.round((1 + overhead) * 100);\n return toBN(estimatedFee).mul(toBN(overHeadPercent)).div(toBN(100));\n}\n","\n/*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED$1 = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN$1 = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1 = 3;\nconst MAX_MATCH$1 = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1 = 30;\n/* number of distance codes */\n\nconst BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) =>\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) =>\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS$1; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n // \"inconsistent bit counts\");\n //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n for (n = 0; n <= max_code; n++) {\n let len = tree[n * 2 + 1]/*.Len*/;\n if (len === 0) { continue; }\n /* Now reverse the bits */\n tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n // n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n }\n};\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nconst tr_static_init = () => {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES$1; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES$1; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nconst copy_block = (s, buf, len, header) =>\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n s.pending_buf.set(s.window.subarray(buf, buf + len), s.pending);\n s.pending += len;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) =>\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) =>\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let lx = 0; /* running index in l_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) =>\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE$1;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) =>\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) =>\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) =>\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let black_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS$1; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) =>\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN$1) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block$1(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) =>\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //let out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n};\n\nvar _tr_init_1 = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1 = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n Z_UNKNOWN,\n Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42;\nconst EXTRA_STATE = 69;\nconst NAME_STATE = 73;\nconst COMMENT_STATE = 91;\nconst HCRC_STATE = 103;\nconst BUSY_STATE = 113;\nconst FINISH_STATE = 666;\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = messages[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32_1(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32_1(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n let max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n const max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n};\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nconst deflateResetKeep = (strm) => {\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH$2;\n _tr_init(s);\n return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK$3) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$2; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR$2; }\n strm.state.gzhead = head;\n return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR$2;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION$1) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\nconst deflate$2 = (strm, flush) => {\n\n let beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK$1 || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n }\n\n s.strm = strm; /* just in case */\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK$3;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH$3) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n let bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK$3;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH$1) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK$3;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH$3) { return Z_OK$3; }\n if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR$2;\n }\n\n const status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR$2;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n this.options = common.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED$1,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = deflate_1$2.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n if (opt.header) {\n deflate_1$2.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = deflate_1$2.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END$2) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = deflate_1$2.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK$2;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK$2) {\n this.result = common.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n const deflator = new Deflate$1(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 30; /* got a data error -- remain here until reset */\nconst TYPE$1 = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE$1;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n let base_index = 0;\n// let shoextra; /* extra bits table to use */\n let end; /* use base and extra for symbol > end */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n let extra_index = 0;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES$1 || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES$1) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS$1) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 1; /* i: waiting for magic header */\nconst FLAGS = 2; /* i: waiting for method and flags (gzip) */\nconst TIME = 3; /* i: waiting for modification time (gzip) */\nconst OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 5; /* i: waiting for extra length (gzip) */\nconst EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nconst NAME = 7; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 8; /* i: waiting for end of comment (gzip) */\nconst HCRC = 9; /* i: waiting for header crc (gzip) */\nconst DICTID = 10; /* i: waiting for dictionary check value */\nconst DICT = 11; /* waiting for inflateSetDictionary() call */\nconst TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 14; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 17; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 18; /* i: waiting for code length code lengths */\nconst CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 20; /* i: same as LEN below, but only first time in */\nconst LEN = 21; /* i: waiting for length/lit/eob code */\nconst LENEXT = 22; /* i: waiting for length extra bits */\nconst DIST = 23; /* i: waiting for distance code */\nconst DISTEXT = 24; /* i: waiting for distance extra bits */\nconst MATCH = 25; /* o: waiting for output space to copy string */\nconst LIT = 26; /* o: waiting for output space to write literal */\nconst CHECK = 27; /* i: waiting for 32-bit check value */\nconst LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 29; /* finished check, done -- remain here until reset */\nconst BAD = 30; /* got a data error -- remain here until reset */\nconst MEM = 31; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateResetKeep = (strm) => {\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32_1(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inffast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR$1;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR$1;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32_1(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR$1;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n this.options = common.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = inflate_1$2.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n\n this.header = new gzheader();\n\n inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate_1$2.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = inflate_1$2.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n inflate_1$2.inflateReset(strm);\n status = inflate_1$2.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = common.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n const inflator = new Inflate$1(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nexport { Deflate_1 as Deflate, Inflate_1 as Inflate, constants_1 as constants, pako as default, deflate_1 as deflate, deflateRaw_1 as deflateRaw, gzip_1 as gzip, inflate_1 as inflate, inflateRaw_1 as inflateRaw, ungzip_1 as ungzip };\n","import { CompiledContract, ContractClass, RawCalldata } from '../types';\nimport { parse } from './json';\nimport { isHex, toBN, toHex } from './number';\nimport { compressProgram } from './stark';\n\nexport function wait(delay: number) {\n return new Promise((res) => {\n setTimeout(res, delay);\n });\n}\n\nexport function parseCalldata(calldata: RawCalldata = []) {\n return calldata.map((data) => {\n if (typeof data === 'string' && isHex(data as string)) {\n return data;\n }\n return toHex(toBN(data));\n });\n}\n\nexport function parseContract(contract: CompiledContract | string) {\n const parsedContract =\n typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;\n return {\n ...parsedContract,\n program: compressProgram(parsedContract.program),\n } as ContractClass;\n}\n","/**\n * Map RPC Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionResponse,\n} from '../../types';\nimport { RPC } from '../../types/api';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\ntype RpcGetBlockResponse = RPC.GetBlockWithTxHashesResponse & {\n [key: string]: any;\n};\n\ntype GetTransactionByHashResponse = RPC.GetTransactionByHashResponse & {\n [key: string]: any;\n};\n\nexport class RPCResponseParser\n implements\n Omit<\n ResponseParser,\n | 'parseDeclareContractResponse'\n | 'parseDeployContractResponse'\n | 'parseInvokeFunctionResponse'\n | 'parseGetTransactionReceiptResponse'\n >\n{\n public parseGetBlockResponse(res: RpcGetBlockResponse): GetBlockResponse {\n return {\n timestamp: res.timestamp,\n block_hash: res.block_hash,\n block_number: res.block_number,\n new_root: res.new_root,\n parent_hash: res.parent_hash,\n status: res.status,\n transactions: res.transactions,\n };\n }\n\n public parseGetTransactionResponse(res: GetTransactionByHashResponse): GetTransactionResponse {\n return {\n calldata: res.calldata || [],\n contract_address: res.contract_address,\n max_fee: res.max_fee,\n nonce: res.nonce,\n signature: res.signature || [],\n transaction_hash: res.transaction_hash,\n version: res.version,\n };\n }\n\n public parseFeeEstimateResponse(res: RPC.EstimateFeeResponse): EstimateFeeResponse {\n return {\n overall_fee: toBN(res.overall_fee),\n gas_consumed: toBN(res.gas_consumed),\n gas_price: toBN(res.gas_price),\n };\n }\n\n public parseCallContractResponse(res: Array<string>): CallContractResponse {\n return {\n result: res,\n };\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport type { BlockNumber } from '../types';\nimport { BigNumberish, isHex, toBN, toHex } from '../utils/number';\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L148-L153)\n *\n * @param hashValue\n * @param hashField\n */\nexport function formatHash(hashValue: BigNumberish): string {\n if (typeof hashValue === 'string') return hashValue;\n return toHex(toBN(hashValue));\n}\n\n/**\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/fc97bdd8322a7df043c87c371634b26c15ed6cee/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L156-L161)\n * @param txHash\n * @param txId\n */\nexport function txIdentifier(txHash?: BigNumberish, txId?: BigNumberish): string {\n if (!txHash) {\n return `transactionId=${JSON.stringify(txId)}`;\n }\n const hashString = formatHash(txHash);\n\n return `transactionHash=${hashString}`;\n}\n\n// hex string and BN are detected as block hashes\n// decimal string and number are detected as block numbers\n// null appends nothing to the request url\n\nexport type BlockIdentifier = BlockNumber | BigNumberish;\n\nexport class Block {\n hash: BlockIdentifier = null;\n\n number: BlockIdentifier = null;\n\n tag: BlockIdentifier = null;\n\n private setIdentifier: (_identifier: BlockIdentifier) => void;\n\n constructor(_identifier: BlockIdentifier) {\n this.setIdentifier = function (__identifier: BlockIdentifier) {\n if (typeof __identifier === 'string' && isHex(__identifier)) {\n this.hash = __identifier;\n } else if (typeof __identifier === 'number') {\n this.number = __identifier;\n } else {\n this.tag = __identifier;\n }\n };\n\n this.setIdentifier(_identifier);\n }\n\n get queryIdentifier(): any {\n if (this.number !== null) {\n return `blockNumber=${this.number}`;\n }\n\n if (this.hash !== null) {\n return `blockHash=${this.hash}`;\n }\n\n return `blockNumber=${this.tag}`;\n }\n\n get identifier(): any {\n if (this.number !== null) {\n return { block_number: this.number };\n }\n\n if (this.hash !== null) {\n return { block_hash: this.hash };\n }\n\n return this.tag;\n }\n\n set identifier(_identifier: BlockIdentifier) {\n this.setIdentifier(_identifier);\n }\n\n valueOf = () => this.number;\n\n toString = () => this.hash;\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport { RPC } from '../types/api';\nimport {\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n InvocationsDetails,\n} from '../types/lib';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelectorFromName } from '../utils/hash';\nimport { stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToHexadecimalStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseCalldata, parseContract, wait } from '../utils/provider';\nimport { RPCResponseParser } from '../utils/responseParser/rpc';\nimport { randomAddress } from '../utils/stark';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\nexport type RpcProviderOptions = {\n nodeUrl: string;\n retries?: number;\n headers?: object;\n};\n\nexport class RpcProvider implements ProviderInterface {\n public nodeUrl: string;\n\n // from interface\n public chainId!: StarknetChainId;\n\n public headers: object;\n\n private responseParser = new RPCResponseParser();\n\n private retries: number;\n\n constructor(optionsOrProvider: RpcProviderOptions) {\n const { nodeUrl, retries, headers } = optionsOrProvider;\n this.nodeUrl = nodeUrl;\n this.retries = retries || 200;\n this.headers = { 'Content-Type': 'application/json', ...headers };\n\n this.getChainId().then((chainId) => {\n this.chainId = chainId;\n });\n }\n\n public fetch(method: any, params: any): Promise<any> {\n return fetch(this.nodeUrl, {\n method: 'POST',\n body: stringify({ method, jsonrpc: '2.0', params, id: 0 }),\n headers: this.headers as Record<string, string>,\n });\n }\n\n protected errorHandler(error: any) {\n if (error) {\n const { code, message } = error;\n throw new Error(`${code}: ${message}`);\n }\n }\n\n protected async fetchEndpoint<T extends keyof RPC.Methods>(\n method: T,\n params?: RPC.Methods[T]['params']\n ): Promise<RPC.Methods[T]['result']> {\n try {\n const rawResult = await this.fetch(method, params);\n const { error, result } = await rawResult.json();\n this.errorHandler(error);\n return result as RPC.Methods[T]['result'];\n } catch (error: any) {\n this.errorHandler(error?.response?.data);\n throw error;\n }\n }\n\n // Methods from Interface\n public async getChainId(): Promise<any> {\n return this.fetchEndpoint('starknet_chainId');\n }\n\n // Methods from Interface\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.getBlockWithTxHashes(blockIdentifier).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getBlockHashAndNumber(): Promise<RPC.BlockHashAndNumber> {\n return this.fetchEndpoint('starknet_blockHashAndNumber');\n }\n\n public async getBlockWithTxHashes(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetBlockWithTxHashesResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxHashes', { block_id });\n }\n\n public async getBlockWithTxs(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetBlockWithTxs> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockWithTxs', { block_id });\n }\n\n public async getClassHashAt(\n contractAddress: RPC.ContractAddress,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.Felt> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassHashAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.Nonce> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getNonce', {\n contract_address: contractAddress,\n block_id,\n });\n }\n\n public async getPendingTransactions(): Promise<RPC.PendingTransactions> {\n return this.fetchEndpoint('starknet_pendingTransactions');\n }\n\n public async getProtocolVersion(): Promise<Error> {\n throw new Error('Pathfinder does not implement this rpc 0.1.0 method');\n }\n\n public async getStateUpdate(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.StateUpdate> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStateUpdate', { block_id });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n const parsedKey = toHex(toBN(key));\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getStorageAt', {\n contract_address: contractAddress,\n key: parsedKey,\n block_id,\n });\n }\n\n // Methods from Interface\n public async getTransaction(txHash: string): Promise<GetTransactionResponse> {\n return this.getTransactionByHash(txHash).then(this.responseParser.parseGetTransactionResponse);\n }\n\n public async getTransactionByHash(txHash: string): Promise<RPC.GetTransactionByHashResponse> {\n return this.fetchEndpoint('starknet_getTransactionByHash', { transaction_hash: txHash });\n }\n\n public async getTransactionByBlockIdAndIndex(\n blockIdentifier: BlockIdentifier,\n index: number\n ): Promise<RPC.GetTransactionByBlockIdAndIndex> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getTransactionByBlockIdAndIndex', { block_id, index });\n }\n\n public async getTransactionReceipt(txHash: string): Promise<RPC.TransactionReceipt> {\n return this.fetchEndpoint('starknet_getTransactionReceipt', { transaction_hash: txHash });\n }\n\n public async getClassByHash(classHash: RPC.Felt): Promise<RPC.ContractClass> {\n return this.getClass(classHash);\n }\n\n public async getClass(\n classHash: RPC.Felt,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClass', { class_hash: classHash, block_id });\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.ContractClass> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getClassAt', {\n block_id,\n contract_address: contractAddress,\n });\n }\n\n public async getCode(\n _contractAddress: string,\n _blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n throw new Error('RPC does not implement getCode function');\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'INVOKE',\n sender_address: invocation.contractAddress,\n calldata: parseCalldata(invocation.calldata),\n signature: bigNumberishArrayToHexadecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 0)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n max_fee: toHex(toBN(invocationDetails?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DECLARE',\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n sender_address: senderAddress,\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_estimateFee', {\n request: {\n type: 'DEPLOY_ACCOUNT',\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details?.maxFee || 0)),\n },\n block_id,\n }).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n // TODO: Revisit after Pathfinder release with JSON-RPC v0.2.1 RPC Spec\n public async declareContract(\n { contractDefinition, signature, senderAddress }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('starknet_addDeclareTransaction', {\n declare_transaction: {\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi, // rpc 2.0\n },\n type: 'DECLARE',\n version: toHex(toBN(details.version || 0)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n sender_address: senderAddress,\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract(\n { contract, constructorCalldata, addressSalt }: DeployContractPayload,\n details?: InvocationsDetails\n ): Promise<DeployContractResponse> {\n const contractDefinition = parseContract(contract);\n return this.fetchEndpoint('starknet_addDeployTransaction', {\n deploy_transaction: {\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata ?? []),\n contract_class: {\n program: contractDefinition.program,\n entry_points_by_type: contractDefinition.entry_points_by_type,\n abi: contractDefinition.abi,\n },\n type: 'DEPLOY',\n version: toHex(toBN(details?.version || 0)),\n },\n });\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('starknet_addDeployAccountTransaction', {\n constructor_calldata: bigNumberishArrayToHexadecimalStringArray(constructorCalldata || []),\n class_hash: toHex(toBN(classHash)),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n type: 'DEPLOY',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(signature || []),\n nonce: toHex(toBN(details.nonce)),\n });\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('starknet_addInvokeTransaction', {\n invoke_transaction: {\n sender_address: functionInvocation.contractAddress,\n calldata: parseCalldata(functionInvocation.calldata),\n type: 'INVOKE',\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n signature: bigNumberishArrayToHexadecimalStringArray(functionInvocation.signature || []),\n nonce: toHex(toBN(details.nonce)),\n },\n });\n }\n\n // Methods from Interface\n public async callContract(\n call: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n const result = await this.fetchEndpoint('starknet_call', {\n request: {\n contract_address: call.contractAddress,\n entry_point_selector: getSelectorFromName(call.entrypoint),\n calldata: parseCalldata(call.calldata),\n },\n block_id,\n });\n\n return this.responseParser.parseCallContractResponse(result);\n }\n\n public async traceTransaction(transactionHash: RPC.TransactionHash): Promise<RPC.Trace> {\n return this.fetchEndpoint('starknet_traceTransaction', { transaction_hash: transactionHash });\n }\n\n public async traceBlockTransactions(blockHash: RPC.BlockHash): Promise<RPC.Traces> {\n return this.fetchEndpoint('starknet_traceBlockTransactions', { block_hash: blockHash });\n }\n\n public async waitForTransaction(txHash: string, retryInterval: number = 8000) {\n let { retries } = this;\n let onchain = false;\n\n while (!onchain) {\n const successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING'];\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n try {\n // eslint-disable-next-line no-await-in-loop\n const res = await this.getTransactionReceipt(txHash);\n\n if (!('status' in res)) {\n const error = new Error('pending transaction');\n throw error;\n }\n\n if (res.status && successStates.includes(res.status)) {\n onchain = true;\n } else if (res.status && errorStates.includes(res.status)) {\n const message = res.status;\n const error = new Error(message) as Error & { response: any };\n error.response = res;\n throw error;\n }\n } catch (error: unknown) {\n if (error instanceof Error && errorStates.includes(error.message)) {\n throw error;\n }\n\n if (retries === 0) {\n throw new Error('waitForTransaction timedout with retries');\n }\n }\n\n retries -= 1;\n }\n\n await wait(retryInterval);\n }\n\n /**\n * Gets the transaction count from a block.\n *\n *\n * @param blockIdentifier\n * @returns Number of transactions\n */\n public async getTransactionCount(\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<RPC.GetTransactionCountResponse> {\n const block_id = new Block(blockIdentifier).identifier;\n return this.fetchEndpoint('starknet_getBlockTransactionCount', { block_id });\n }\n\n /**\n * Gets the latest block number\n *\n *\n * @returns Number of the latest block\n */\n public async getBlockNumber(): Promise<RPC.GetBlockNumberResponse> {\n return this.fetchEndpoint('starknet_blockNumber');\n }\n\n /**\n * Gets syncing status of the node\n *\n *\n * @returns Object with the stats data\n */\n public async getSyncingStats(): Promise<RPC.GetSyncingStatsResponse> {\n return this.fetchEndpoint('starknet_syncing');\n }\n\n /**\n * Gets all the events filtered\n *\n *\n * @returns events and the pagination of the events\n */\n public async getEvents(eventFilter: RPC.EventFilter): Promise<RPC.GetEventsResponse> {\n return this.fetchEndpoint('starknet_getEvents', { filter: eventFilter });\n }\n}\n","import urljoin from 'url-join';\n\nimport { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport {\n CallL1Handler,\n GetContractAddressesResponse,\n GetTransactionStatusResponse,\n GetTransactionTraceResponse,\n Sequencer,\n} from '../types/api';\nimport { DeclareContractTransaction, DeployAccountContractTransaction } from '../types/lib';\nimport fetch from '../utils/fetchPonyfill';\nimport { getSelector, getSelectorFromName } from '../utils/hash';\nimport { parse, parseAlwaysAsBig, stringify } from '../utils/json';\nimport {\n BigNumberish,\n bigNumberishArrayToDecimalStringArray,\n getDecimalString,\n getHexString,\n getHexStringArray,\n toBN,\n toHex,\n} from '../utils/number';\nimport { parseContract, wait } from '../utils/provider';\nimport { SequencerAPIResponseParser } from '../utils/responseParser/sequencer';\nimport { randomAddress } from '../utils/stark';\nimport { buildUrl } from '../utils/url';\nimport { GatewayError, HttpError } from './errors';\nimport { ProviderInterface } from './interface';\nimport { Block, BlockIdentifier } from './utils';\n\ntype NetworkName = 'mainnet-alpha' | 'goerli-alpha' | 'goerli-alpha-2';\n\nfunction isEmptyQueryObject(obj?: Record<any, any>): obj is undefined {\n return (\n obj === undefined ||\n Object.keys(obj).length === 0 ||\n (Object.keys(obj).length === 1 &&\n Object.entries(obj).every(([k, v]) => k === 'blockIdentifier' && v === null))\n );\n}\n\nexport type SequencerProviderOptions =\n | { network: NetworkName }\n | {\n baseUrl: string;\n feederGatewayUrl?: string;\n gatewayUrl?: string;\n chainId?: StarknetChainId;\n headers?: object;\n };\n\nexport class SequencerProvider implements ProviderInterface {\n public baseUrl: string;\n\n public feederGatewayUrl: string;\n\n public gatewayUrl: string;\n\n public chainId: StarknetChainId;\n\n public headers: object | undefined;\n\n private responseParser = new SequencerAPIResponseParser();\n\n constructor(optionsOrProvider: SequencerProviderOptions = { network: 'goerli-alpha-2' }) {\n if ('network' in optionsOrProvider) {\n this.baseUrl = SequencerProvider.getNetworkFromName(optionsOrProvider.network);\n this.chainId = SequencerProvider.getChainIdFromBaseUrl(this.baseUrl);\n this.feederGatewayUrl = urljoin(this.baseUrl, 'feeder_gateway');\n this.gatewayUrl = urljoin(this.baseUrl, 'gateway');\n } else {\n this.baseUrl = optionsOrProvider.baseUrl;\n this.feederGatewayUrl = buildUrl(\n this.baseUrl,\n 'feeder_gateway',\n optionsOrProvider.feederGatewayUrl\n );\n this.gatewayUrl = buildUrl(this.baseUrl, 'gateway', optionsOrProvider.gatewayUrl);\n\n this.chainId =\n optionsOrProvider.chainId ??\n SequencerProvider.getChainIdFromBaseUrl(optionsOrProvider.baseUrl);\n\n this.headers = optionsOrProvider?.headers;\n }\n }\n\n protected static getNetworkFromName(name: NetworkName) {\n switch (name) {\n case 'mainnet-alpha':\n return 'https://alpha-mainnet.starknet.io';\n case 'goerli-alpha':\n return 'https://alpha4.starknet.io';\n case 'goerli-alpha-2':\n return 'https://alpha4-2.starknet.io';\n default:\n return 'https://alpha4.starknet.io';\n }\n }\n\n protected static getChainIdFromBaseUrl(baseUrl: string): StarknetChainId {\n try {\n const url = new URL(baseUrl);\n if (url.host.includes('mainnet.starknet.io')) {\n return StarknetChainId.MAINNET;\n }\n } catch {\n // eslint-disable-next-line no-console\n console.error(`Could not parse baseUrl: ${baseUrl}`);\n }\n return StarknetChainId.TESTNET;\n }\n\n private getFetchUrl(endpoint: keyof Sequencer.Endpoints) {\n const gatewayUrlEndpoints = ['add_transaction'];\n\n return gatewayUrlEndpoints.includes(endpoint) ? this.gatewayUrl : this.feederGatewayUrl;\n }\n\n private getFetchMethod(endpoint: keyof Sequencer.Endpoints) {\n const postMethodEndpoints = [\n 'add_transaction',\n 'call_contract',\n 'estimate_fee',\n 'estimate_message_fee',\n ];\n\n return postMethodEndpoints.includes(endpoint) ? 'POST' : 'GET';\n }\n\n private getQueryString(query?: Record<string, any>): string {\n if (isEmptyQueryObject(query)) {\n return '';\n }\n const queryString = Object.entries(query)\n .map(([key, value]) => {\n if (key === 'blockIdentifier') {\n const block = new Block(value);\n return `${block.queryIdentifier}`;\n }\n return `${key}=${value}`;\n })\n .join('&');\n\n return `?${queryString}`;\n }\n\n private getHeaders(method: 'POST' | 'GET'): object | undefined {\n if (method === 'POST') {\n return {\n 'Content-Type': 'application/json',\n ...this.headers,\n };\n }\n return this.headers;\n }\n\n // typesafe fetch\n protected async fetchEndpoint<T extends keyof Sequencer.Endpoints>(\n endpoint: T,\n // typescript type magic to create a nice fitting function interface\n ...[query, request]: Sequencer.Endpoints[T]['QUERY'] extends never\n ? Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [] // when no query and no request is needed, we can omit the query and request parameters\n : [undefined, Sequencer.Endpoints[T]['REQUEST']]\n : Sequencer.Endpoints[T]['REQUEST'] extends never\n ? [Sequencer.Endpoints[T]['QUERY']] // when no request is needed, we can omit the request parameter\n : [Sequencer.Endpoints[T]['QUERY'], Sequencer.Endpoints[T]['REQUEST']] // when both query and request are needed, we cant omit anything\n ): Promise<Sequencer.Endpoints[T]['RESPONSE']> {\n const baseUrl = this.getFetchUrl(endpoint);\n const method = this.getFetchMethod(endpoint);\n const queryString = this.getQueryString(query);\n const headers = this.getHeaders(method);\n const url = urljoin(baseUrl, endpoint, queryString);\n\n try {\n const res = await fetch(url, {\n method,\n body: stringify(request),\n headers: headers as Record<string, string>,\n });\n const textResponse = await res.text();\n if (!res.ok) {\n // This will allow user to handle contract errors\n let responseBody: any;\n try {\n responseBody = parse(textResponse);\n } catch {\n // if error parsing fails, return an http error\n throw new HttpError(res.statusText, res.status);\n }\n\n const errorCode = responseBody.code || ((responseBody as any)?.status_code as string); // starknet-devnet uses status_code instead of code; They need to fix that\n throw new GatewayError(responseBody.message, errorCode); // Caught locally, and re-thrown for the user\n }\n\n if (endpoint === 'estimate_fee') {\n return parseAlwaysAsBig(textResponse, (_, v) => {\n if (v && typeof v === 'bigint') {\n return toBN(v.toString());\n }\n return v;\n });\n }\n return parse(textResponse) as Sequencer.Endpoints[T]['RESPONSE'];\n } catch (err) {\n // rethrow custom errors\n if (err instanceof GatewayError || err instanceof HttpError) {\n throw err;\n }\n if (err instanceof Error) {\n throw Error(`Could not ${method} from endpoint \\`${url}\\`: ${err.message}`);\n }\n throw err;\n }\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return Promise.resolve(this.chainId);\n }\n\n public async callContract(\n { contractAddress, entrypoint: entryPointSelector, calldata = [] }: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n return this.fetchEndpoint(\n 'call_contract',\n { blockIdentifier },\n {\n signature: [],\n contract_address: contractAddress,\n entry_point_selector: getSelectorFromName(entryPointSelector),\n calldata,\n }\n ).then(this.responseParser.parseCallContractResponse);\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.fetchEndpoint('get_block', { blockIdentifier }).then(\n this.responseParser.parseGetBlockResponse\n );\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n const parsedKey = toBN(key).toString(10);\n return this.fetchEndpoint('get_storage_at', {\n blockIdentifier,\n contractAddress,\n key: parsedKey,\n });\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction', { transactionHash: txHashHex }).then((value) =>\n this.responseParser.parseGetTransactionResponse(value)\n );\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_receipt', { transactionHash: txHashHex }).then(\n this.responseParser.parseGetTransactionReceiptResponse\n );\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<ContractClass> {\n return this.fetchEndpoint('get_full_contract', { blockIdentifier, contractAddress }).then(\n parseContract\n );\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<string> {\n return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });\n }\n\n public async getClassByHash(classHash: string): Promise<ContractClass> {\n return this.fetchEndpoint('get_class_by_hash', { classHash }).then(parseContract);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'INVOKE_FUNCTION',\n contract_address: functionInvocation.contractAddress,\n calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),\n signature: bigNumberishArrayToDecimalStringArray(functionInvocation.signature ?? []),\n nonce: toHex(toBN(details.nonce)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseInvokeFunctionResponse);\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract({\n contract,\n constructorCalldata,\n addressSalt,\n }: DeployContractPayload): Promise<DeployContractResponse> {\n const contractDefinition = parseContract(contract);\n\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n contract_definition: contractDefinition,\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async deployAccountContract(\n { classHash, constructorCalldata, addressSalt, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DEPLOY_ACCOUNT',\n contract_address_salt: addressSalt ?? randomAddress(),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata ?? []),\n class_hash: toHex(toBN(classHash)),\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n }).then(this.responseParser.parseDeployContractResponse);\n }\n\n public async declareContract(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.fetchEndpoint('add_transaction', undefined, {\n type: 'DECLARE',\n contract_class: contractDefinition,\n nonce: toHex(toBN(details.nonce)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n sender_address: senderAddress,\n max_fee: toHex(toBN(details.maxFee || 0)),\n version: toHex(toBN(details.version || 1)),\n }).then(this.responseParser.parseDeclareContractResponse);\n }\n\n public async getEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocation: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'INVOKE_FUNCTION',\n contract_address: invocation.contractAddress,\n calldata: invocation.calldata ?? [],\n signature: bigNumberishArrayToDecimalStringArray(invocation.signature || []),\n version: toHex(toBN(invocationDetails?.version || 1)),\n nonce: toHex(toBN(invocationDetails.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeclareEstimateFee(\n { senderAddress, contractDefinition, signature }: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DECLARE',\n sender_address: senderAddress,\n contract_class: contractDefinition,\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 1)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.fetchEndpoint(\n 'estimate_fee',\n { blockIdentifier },\n {\n type: 'DEPLOY_ACCOUNT',\n class_hash: toHex(toBN(classHash)),\n constructor_calldata: bigNumberishArrayToDecimalStringArray(constructorCalldata || []),\n contract_address_salt: toHex(toBN(addressSalt || 0)),\n signature: bigNumberishArrayToDecimalStringArray(signature || []),\n version: toHex(toBN(details?.version || 0)),\n nonce: toHex(toBN(details.nonce)),\n }\n ).then(this.responseParser.parseFeeEstimateResponse);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<Sequencer.GetCodeResponse> {\n return this.fetchEndpoint('get_code', { contractAddress, blockIdentifier });\n }\n\n public async waitForTransaction(txHash: BigNumberish, retryInterval: number = 8000) {\n let onchain = false;\n\n while (!onchain) {\n // eslint-disable-next-line no-await-in-loop\n await wait(retryInterval);\n // eslint-disable-next-line no-await-in-loop\n const res = await this.getTransactionStatus(txHash);\n\n const successStates = ['ACCEPTED_ON_L1', 'ACCEPTED_ON_L2', 'PENDING'];\n const errorStates = ['REJECTED', 'NOT_RECEIVED'];\n\n if (successStates.includes(res.tx_status)) {\n onchain = true;\n } else if (errorStates.includes(res.tx_status)) {\n const message = res.tx_failure_reason\n ? `${res.tx_status}: ${res.tx_failure_reason.code}\\n${res.tx_failure_reason.error_message}`\n : res.tx_status;\n const error = new Error(message) as Error & { response: GetTransactionStatusResponse };\n error.response = res;\n throw error;\n }\n }\n }\n\n /**\n * Gets the status of a transaction.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L48-L52)\n *\n * @param txHash\n * @returns the transaction status object { block_number, tx_status: NOT_RECEIVED | RECEIVED | PENDING | REJECTED | ACCEPTED_ONCHAIN }\n */\n public async getTransactionStatus(txHash: BigNumberish): Promise<GetTransactionStatusResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_status', { transactionHash: txHashHex });\n }\n\n /**\n * Gets the smart contract address on the goerli testnet.\n *\n * [Reference](https://github.com/starkware-libs/cairo-lang/blob/f464ec4797361b6be8989e36e02ec690e74ef285/src/starkware/starknet/services/api/feeder_gateway/feeder_gateway_client.py#L13-L15)\n * @returns starknet smart contract addresses\n */\n public async getContractAddresses(): Promise<GetContractAddressesResponse> {\n return this.fetchEndpoint('get_contract_addresses');\n }\n\n /**\n * Gets the transaction trace from a tx id.\n *\n *\n * @param txHash\n * @returns the transaction trace\n */\n public async getTransactionTrace(txHash: BigNumberish): Promise<GetTransactionTraceResponse> {\n const txHashHex = toHex(toBN(txHash));\n return this.fetchEndpoint('get_transaction_trace', { transactionHash: txHashHex });\n }\n\n public async estimateMessageFee(\n { from_address, to_address, entry_point_selector, payload }: CallL1Handler,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<Sequencer.EstimateFeeResponse> {\n const validCallL1Handler = {\n from_address: getDecimalString(from_address),\n to_address: getHexString(to_address),\n entry_point_selector: getSelector(entry_point_selector),\n payload: getHexStringArray(payload),\n };\n\n return this.fetchEndpoint('estimate_message_fee', { blockIdentifier }, validCallL1Handler);\n }\n}\n","import {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n} from '../../types';\n\nexport abstract class ResponseParser {\n abstract parseGetBlockResponse(res: any): GetBlockResponse;\n\n abstract parseGetTransactionResponse(res: any): GetTransactionResponse;\n\n abstract parseGetTransactionReceiptResponse(res: any): GetTransactionReceiptResponse;\n\n abstract parseFeeEstimateResponse(res: any): EstimateFeeResponse;\n\n abstract parseCallContractResponse(res: any): CallContractResponse;\n\n abstract parseInvokeFunctionResponse(res: any): InvokeFunctionResponse;\n\n abstract parseDeployContractResponse(res: any): DeployContractResponse;\n\n abstract parseDeclareContractResponse(res: any): DeclareContractResponse;\n}\n","/**\n * Map Sequencer Response to common interface response\n * Intersection (sequencer response ∩ (∪ rpc responses))\n */\nimport {\n CallContractResponse,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n InvokeFunctionResponse,\n} from '../../types';\nimport { Sequencer } from '../../types/api';\nimport { toBN } from '../number';\nimport { ResponseParser } from '.';\n\nexport class SequencerAPIResponseParser extends ResponseParser {\n public parseGetBlockResponse(res: Sequencer.GetBlockResponse): GetBlockResponse {\n return {\n ...res,\n new_root: res.state_root,\n parent_hash: res.parent_block_hash,\n transactions: Object.values(res.transactions)\n .map((value) => 'transaction_hash' in value && value.transaction_hash)\n .filter(Boolean) as Array<string>,\n };\n }\n\n public parseGetTransactionResponse(\n res: Sequencer.GetTransactionResponse\n ): GetTransactionResponse {\n return {\n ...res,\n calldata: 'calldata' in res.transaction ? (res.transaction.calldata as Array<string>) : [],\n contract_address:\n 'contract_address' in res.transaction ? res.transaction.contract_address : undefined,\n contract_class:\n 'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,\n entry_point_selector:\n 'entry_point_selector' in res.transaction\n ? res.transaction.entry_point_selector\n : undefined,\n max_fee: 'max_fee' in res.transaction ? (res.transaction.max_fee as string) : undefined,\n nonce: res.transaction.nonce as string,\n sender_address:\n 'sender_address' in res.transaction\n ? (res.transaction.sender_address as string)\n : undefined,\n signature: 'signature' in res.transaction ? res.transaction.signature : undefined,\n transaction_hash:\n 'transaction_hash' in res.transaction ? res.transaction.transaction_hash : undefined,\n version: 'version' in res.transaction ? (res.transaction.version as string) : undefined,\n };\n }\n\n public parseGetTransactionReceiptResponse(\n res: Sequencer.TransactionReceiptResponse\n ): GetTransactionReceiptResponse {\n return {\n transaction_hash: res.transaction_hash,\n status: res.status,\n messages_sent: res.l2_to_l1_messages as any, // TODO: parse\n events: res.events as any,\n ...('block_hash' in res && { block_hash: res.block_hash }),\n ...('block_number' in res && { block_number: res.block_number }),\n ...('actual_fee' in res && { actual_fee: res.actual_fee }),\n ...('transaction_index' in res && { transaction_index: res.transaction_index }),\n ...('execution_resources' in res && { execution_resources: res.execution_resources }),\n ...('l1_to_l2_consumed_message' in res && {\n // eslint-disable-next-line @typescript-eslint/dot-notation\n l1_to_l2_consumed_message: res['l1_to_l2_consumed_message'],\n }),\n ...('transaction_failure_reason' in res && {\n transaction_failure_reason: res.transaction_failure_reason,\n }),\n };\n }\n\n public parseFeeEstimateResponse(res: Sequencer.EstimateFeeResponse): EstimateFeeResponse {\n if ('overall_fee' in res) {\n let gasInfo = {};\n\n try {\n gasInfo = {\n gas_consumed: toBN(res.gas_usage),\n gas_price: toBN(res.gas_price),\n };\n } catch {\n // do nothing\n }\n\n return {\n overall_fee: toBN(res.overall_fee),\n ...gasInfo,\n };\n }\n return {\n overall_fee: toBN(res.amount),\n };\n }\n\n public parseCallContractResponse(res: Sequencer.CallContractResponse): CallContractResponse {\n return {\n result: res.result,\n };\n }\n\n public parseInvokeFunctionResponse(\n res: Sequencer.AddTransactionResponse\n ): InvokeFunctionResponse {\n return {\n transaction_hash: res.transaction_hash,\n };\n }\n\n public parseDeployContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeployContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n contract_address: res.address as string,\n };\n }\n\n public parseDeclareContractResponse(\n res: Sequencer.AddTransactionResponse\n ): DeclareContractResponse {\n return {\n transaction_hash: res.transaction_hash,\n class_hash: res.class_hash as string,\n };\n }\n}\n","import urljoin from 'url-join';\n\n/**\n * Inspired from https://github.com/segmentio/is-url\n */\n\n/**\n * RegExps.\n * A URL must match #1 and then at least one of #2/#3.\n * Use two levels of REs to avoid REDOS.\n */\nconst protocolAndDomainRE = /^(?:\\w+:)?\\/\\/(\\S+)$/;\n\nconst localhostDomainRE = /^localhost[:?\\d]*(?:[^:?\\d]\\S*)?$/;\nconst nonLocalhostDomainRE = /^[^\\s.]+\\.\\S{2,}$/;\n\n/**\n * Loosely validate a URL `string`.\n * @param {String} s\n * @return {Boolean}\n */\nexport function isUrl(s?: string): boolean {\n if (!s) {\n return false;\n }\n\n if (typeof s !== 'string') {\n return false;\n }\n\n const match = s.match(protocolAndDomainRE);\n if (!match) {\n return false;\n }\n\n const everythingAfterProtocol = match[1];\n if (!everythingAfterProtocol) {\n return false;\n }\n\n if (\n localhostDomainRE.test(everythingAfterProtocol) ||\n nonLocalhostDomainRE.test(everythingAfterProtocol)\n ) {\n return true;\n }\n\n return false;\n}\n\nexport function buildUrl(baseUrl: string, defaultPath: string, urlOrPath?: string) {\n return isUrl(urlOrPath) ? urlOrPath! : urljoin(baseUrl, urlOrPath ?? defaultPath);\n}\n","export function fixProto(target, prototype) {\n var setPrototypeOf = Object.setPrototypeOf;\n setPrototypeOf\n ? setPrototypeOf(target, prototype)\n : (target.__proto__ = prototype);\n}\nexport function fixStack(target, fn) {\n if (fn === void 0) { fn = target.constructor; }\n var captureStackTrace = Error.captureStackTrace;\n captureStackTrace && captureStackTrace(target, fn);\n}\n//# sourceMappingURL=utils.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { fixProto, fixStack } from './utils';\nvar CustomError = (function (_super) {\n __extends(CustomError, _super);\n function CustomError(message) {\n var _newTarget = this.constructor;\n var _this = _super.call(this, message) || this;\n Object.defineProperty(_this, 'name', {\n value: _newTarget.name,\n enumerable: false,\n configurable: true,\n });\n fixProto(_this, _newTarget.prototype);\n fixStack(_this);\n return _this;\n }\n return CustomError;\n}(Error));\nexport { CustomError };\n//# sourceMappingURL=custom-error.js.map","var __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { fixStack } from './utils';\nexport function customErrorFactory(fn, parent) {\n if (parent === void 0) { parent = Error; }\n function CustomError() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (!(this instanceof CustomError))\n return new (CustomError.bind.apply(CustomError, __spreadArrays([void 0], args)))();\n parent.apply(this, args);\n Object.defineProperty(this, 'name', {\n value: fn.name || parent.name,\n enumerable: false,\n configurable: true,\n });\n fn.apply(this, args);\n fixStack(this, CustomError);\n }\n return Object.defineProperties(CustomError, {\n prototype: {\n value: Object.create(parent.prototype, {\n constructor: {\n value: CustomError,\n writable: true,\n configurable: true,\n },\n }),\n },\n });\n}\n//# sourceMappingURL=factory.js.map","/* eslint-disable max-classes-per-file */\nimport { CustomError } from 'ts-custom-error';\n\nexport class GatewayError extends CustomError {\n constructor(message: string, public errorCode: string) {\n super(message);\n }\n}\n\nexport class HttpError extends CustomError {\n constructor(message: string, public errorCode: number) {\n super(message);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport {\n DeclareContractTransaction,\n DeployAccountContractTransaction,\n InvocationsDetails,\n} from '../types/lib';\nimport { BigNumberish } from '../utils/number';\nimport { ProviderInterface } from './interface';\nimport { RpcProvider, RpcProviderOptions } from './rpc';\nimport { SequencerProvider, SequencerProviderOptions } from './sequencer';\nimport { BlockIdentifier } from './utils';\n\nexport interface ProviderOptions {\n sequencer?: SequencerProviderOptions;\n rpc?: RpcProviderOptions;\n}\n\nexport class Provider implements ProviderInterface {\n private provider!: ProviderInterface;\n\n constructor(providerOrOptions?: ProviderOptions | ProviderInterface) {\n if (providerOrOptions && 'chainId' in providerOrOptions) {\n this.provider = providerOrOptions;\n } else if (providerOrOptions?.rpc) {\n this.provider = new RpcProvider(providerOrOptions.rpc);\n } else if (providerOrOptions?.sequencer) {\n this.provider = new SequencerProvider(providerOrOptions.sequencer);\n } else {\n this.provider = new SequencerProvider();\n }\n }\n\n public get chainId(): StarknetChainId {\n return this.provider.chainId;\n }\n\n public async getChainId(): Promise<StarknetChainId> {\n return this.provider.getChainId();\n }\n\n public async getBlock(blockIdentifier: BlockIdentifier = 'pending'): Promise<GetBlockResponse> {\n return this.provider.getBlock(blockIdentifier);\n }\n\n public async getClassAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<ContractClass> {\n return this.provider.getClassAt(contractAddress, blockIdentifier);\n }\n\n public async getClassHashAt(\n contractAddress: string,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<string> {\n return this.provider.getClassHashAt(contractAddress, blockIdentifier);\n }\n\n public getClassByHash(classHash: string): Promise<ContractClass> {\n return this.provider.getClassByHash(classHash);\n }\n\n public async getEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getEstimateFee(invocationWithTxType, invocationDetails, blockIdentifier);\n }\n\n public async getInvokeEstimateFee(\n invocationWithTxType: Invocation,\n invocationDetails: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getInvokeEstimateFee(\n invocationWithTxType,\n invocationDetails,\n blockIdentifier\n );\n }\n\n public async getNonce(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish> {\n return this.provider.getNonce(contractAddress, blockIdentifier);\n }\n\n public async getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<BigNumberish> {\n return this.provider.getStorageAt(contractAddress, key, blockIdentifier);\n }\n\n public async getTransaction(txHash: BigNumberish): Promise<GetTransactionResponse> {\n return this.provider.getTransaction(txHash);\n }\n\n public async getTransactionReceipt(txHash: BigNumberish): Promise<GetTransactionReceiptResponse> {\n return this.provider.getTransactionReceipt(txHash);\n }\n\n public async callContract(\n request: Call,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<CallContractResponse> {\n return this.provider.callContract(request, blockIdentifier);\n }\n\n public async invokeFunction(\n functionInvocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse> {\n return this.provider.invokeFunction(functionInvocation, details);\n }\n\n /**\n * @deprecated This method won't be supported, use Account.deploy instead\n */\n public async deployContract(\n payload: DeployContractPayload,\n details: InvocationsDetails\n ): Promise<DeployContractResponse> {\n return this.provider.deployContract(payload, details);\n }\n\n public async deployAccountContract(\n payload: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse> {\n return this.provider.deployAccountContract(payload, details);\n }\n\n public async declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse> {\n return this.provider.declareContract(transaction, details);\n }\n\n public async getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier);\n }\n\n public getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier = 'pending'\n ): Promise<EstimateFeeResponse> {\n return this.provider.getDeployAccountEstimateFee(transaction, details, blockIdentifier);\n }\n\n public async getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse> {\n return this.provider.getCode(contractAddress, blockIdentifier);\n }\n\n public async waitForTransaction(txHash: BigNumberish, retryInterval?: number): Promise<void> {\n return this.provider.waitForTransaction(txHash, retryInterval);\n }\n}\n","import { StarknetChainId } from '../constants';\nimport type {\n Call,\n CallContractResponse,\n ContractClass,\n DeclareContractResponse,\n DeployContractPayload,\n DeployContractResponse,\n EstimateFeeResponse,\n GetBlockResponse,\n GetCodeResponse,\n GetTransactionReceiptResponse,\n GetTransactionResponse,\n Invocation,\n InvocationsDetailsWithNonce,\n InvokeFunctionResponse,\n} from '../types';\nimport {\n DeclareContractTransaction,\n DeployAccountContractPayload,\n DeployAccountContractTransaction,\n InvocationsDetails,\n} from '../types/lib';\nimport type { BigNumberish } from '../utils/number';\nimport { BlockIdentifier } from './utils';\n\nexport abstract class ProviderInterface {\n public abstract chainId: StarknetChainId;\n\n /**\n * Gets the Starknet chain Id\n *\n * @returns the chain Id\n */\n public abstract getChainId(): Promise<StarknetChainId>;\n\n /**\n * Calls a function on the StarkNet contract.\n *\n * @param call transaction to be called\n * @param blockIdentifier block identifier\n * @returns the result of the function on the smart contract.\n */\n public abstract callContract(\n call: Call,\n blockIdentifier?: BlockIdentifier\n ): Promise<CallContractResponse>;\n\n /**\n * Gets the block information\n *\n * @param blockIdentifier block identifier\n * @returns the block object\n */\n public abstract getBlock(blockIdentifier: BlockIdentifier): Promise<GetBlockResponse>;\n\n /**\n * @deprecated The method should not be used\n */\n public abstract getCode(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<GetCodeResponse>;\n\n /**\n * Gets the contract class of the deployed contract.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Contract class of compiled contract\n */\n public abstract getClassAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<ContractClass>;\n\n /**\n * Returns the class hash deployed under the given address.\n *\n * @param contractAddress - contract address\n * @param blockIdentifier - block identifier\n * @returns Class hash\n */\n public abstract getClassHashAt(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<string>;\n\n /**\n * Returns the contract class deployed under the given class hash.\n *\n * @param classHash - class hash\n * @returns Contract class of compiled contract\n */\n public abstract getClassByHash(classHash: string): Promise<ContractClass>;\n\n /**\n * Gets the nonce of a contract with respect to a specific block\n *\n * @param contractAddress - contract address\n * @returns the hex nonce\n */\n public abstract getNonce(\n contractAddress: string,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the contract's storage variable at a specific key.\n *\n * @param contractAddress\n * @param key - from getStorageVarAddress('<STORAGE_VARIABLE_NAME>') (WIP)\n * @param blockIdentifier - block identifier\n * @returns the value of the storage variable\n */\n public abstract getStorageAt(\n contractAddress: string,\n key: BigNumberish,\n blockIdentifier?: BlockIdentifier\n ): Promise<BigNumberish>;\n\n /**\n * Gets the transaction information from a tx id.\n *\n * @param txHash\n * @returns the transacton object { transaction_id, status, transaction, block_number?, block_number?, transaction_index?, transaction_failure_reason? }\n */\n public abstract getTransaction(transactionHash: BigNumberish): Promise<GetTransactionResponse>;\n\n /**\n * Gets the transaction receipt from a tx hash.\n *\n * @param txHash\n * @returns the transaction receipt object\n */\n public abstract getTransactionReceipt(\n transactionHash: BigNumberish\n ): Promise<GetTransactionReceiptResponse>;\n\n /**\n * Deploys a given compiled contract (json) to starknet\n *\n * @deprecated This method won't be supported, use Account.deploy instead\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployContract(\n payload: DeployContractPayload,\n details?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Deploys a given compiled Account contract (json) to starknet\n *\n * @param payload payload to be deployed containing:\n * - compiled contract code\n * - constructor calldata\n * - address salt\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccountContract(\n payload: DeployAccountContractPayload,\n details: InvocationsDetailsWithNonce\n ): Promise<DeployContractResponse>;\n\n /**\n * Invokes a function on starknet\n * @deprecated This method wont be supported as soon as fees are mandatory\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * - maxFee - optional maxFee\n * @returns response from addTransaction\n */\n public abstract invokeFunction(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * @param transaction transaction payload to be deployed containing:\n * - compiled contract code\n * - sender address\n * - signature\n * @param details Invocation Details containing:\n * - nonce\n * - optional version\n * - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declareContract(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce\n ): Promise<DeclareContractResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n * @deprecated Please use getInvokeEstimateFee or getDeclareEstimateFee instead\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given INVOKE transaction\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param blockIdentifier - block identifier\n * @param details - optional details containing:\n * - nonce - optional nonce\n * - version - optional version\n * @returns the estimated fee\n */\n public abstract getInvokeEstimateFee(\n invocation: Invocation,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DECLARE transaction\n *\n * @param transaction transaction payload to be declared containing:\n * - compiled contract code\n * - sender address\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeclareEstimateFee(\n transaction: DeclareContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimates the fee for a given DEPLOY_ACCOUNT transaction\n *\n * @param transaction transaction payload to be deployed containing:\n * - classHash\n * - constructorCalldata\n * - addressSalt\n * - signature - (defaults to []) the signature\n * @param details - optional details containing:\n * - nonce\n * - version - optional version\n * - optional maxFee\n * @param blockIdentifier - block identifier\n * @returns the estimated fee\n */\n public abstract getDeployAccountEstimateFee(\n transaction: DeployAccountContractTransaction,\n details: InvocationsDetailsWithNonce,\n blockIdentifier: BlockIdentifier\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Wait for the transaction to be accepted\n * @param txHash - transaction hash\n * @param retryInterval - retry interval\n */\n public abstract waitForTransaction(txHash: BigNumberish, retryInterval?: number): Promise<void>;\n}\n","import { Provider } from './default';\n\nexport * from './default';\nexport * from './errors';\nexport * from './sequencer';\nexport * from './interface';\nexport * from './rpc';\n\nexport const defaultProvider = new Provider();\n","import { AccountInterface } from '../account';\nimport { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport {\n Abi,\n AsyncContractFunction,\n ContractFunction,\n Invocation,\n InvokeFunctionResponse,\n Overrides,\n Result,\n} from '../types';\n\nexport abstract class ContractInterface {\n public abstract abi: Abi;\n\n public abstract address: string;\n\n public abstract providerOrAccount: ProviderInterface | AccountInterface;\n\n public abstract deployTransactionHash?: string;\n\n readonly functions!: { [name: string]: AsyncContractFunction };\n\n readonly callStatic!: { [name: string]: AsyncContractFunction };\n\n readonly populateTransaction!: { [name: string]: ContractFunction };\n\n readonly estimateFee!: { [name: string]: ContractFunction };\n\n readonly [key: string]: AsyncContractFunction | any;\n\n /**\n * Saves the address of the contract deployed on network that will be used for interaction\n *\n * @param address - address of the contract\n */\n public abstract attach(address: string): void;\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n public abstract connect(providerOrAccount: ProviderInterface | AccountInterface): void;\n\n /**\n * Resolves when contract is deployed on the network or when no deployment transaction is found\n *\n * @returns Promise that resolves when contract is deployed on the network or when no deployment transaction is found\n * @throws When deployment fails\n */\n public abstract deployed(): Promise<ContractInterface>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n * @returns Result of the call as an array with key value pars\n */\n public abstract call(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<Result>;\n\n /**\n * Invokes a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the invoke\n * @param options\n * @returns Add Transaction Response\n */\n public abstract invoke(\n method: string,\n args?: Array<any>,\n options?: Overrides\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Estimates a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @param options optional blockIdentifier\n */\n public abstract estimate(\n method: string,\n args?: Array<any>,\n options?: {\n blockIdentifier?: BlockIdentifier;\n }\n ): Promise<any>;\n\n /**\n * Calls a method on a contract\n *\n * @param method name of the method\n * @param args Array of the arguments for the call\n * @returns Invocation object\n */\n public abstract populate(method: string, args?: Array<any>): Invocation;\n}\n","import assert from 'minimalistic-assert';\n\nimport { AccountInterface } from '../account';\nimport { ProviderInterface, defaultProvider } from '../provider';\nimport { Abi, CompiledContract, RawCalldata } from '../types';\nimport { Contract } from './default';\n\nexport class ContractFactory {\n abi: Abi;\n\n compiledContract: CompiledContract;\n\n providerOrAccount: ProviderInterface | AccountInterface;\n\n constructor(\n compiledContract: CompiledContract,\n providerOrAccount: ProviderInterface | AccountInterface = defaultProvider,\n abi: Abi = compiledContract.abi // abi can be different from the deployed contract ie for proxy contracts\n ) {\n this.abi = abi;\n this.compiledContract = compiledContract;\n this.providerOrAccount = providerOrAccount;\n }\n\n /**\n * Deploys contract and returns new instance of the Contract\n *\n * @param constructorCalldata - Constructor Calldata\n * @param addressSalt (optional) - Address Salt for deployment\n * @returns deployed Contract\n */\n public async deploy(\n constructorCalldata?: RawCalldata,\n addressSalt?: string | undefined\n ): Promise<Contract> {\n const { contract_address, transaction_hash } = await this.providerOrAccount.deployContract({\n contract: this.compiledContract,\n constructorCalldata,\n addressSalt,\n });\n assert(Boolean(contract_address), 'Deployment of the contract failed');\n\n const contractInstance = new Contract(\n this.compiledContract.abi,\n contract_address!,\n this.providerOrAccount\n );\n contractInstance.deployTransactionHash = transaction_hash;\n\n return contractInstance;\n }\n\n /**\n * Attaches to new Provider or Account\n *\n * @param providerOrAccount - new Provider or Account to attach to\n */\n connect(providerOrAccount: ProviderInterface | AccountInterface): ContractFactory {\n this.providerOrAccount = providerOrAccount;\n return this;\n }\n\n /**\n * Attaches current abi and provider or account to the new address\n *\n * @param address - Contract address\n * @returns Contract\n */\n attach(address: string): Contract {\n return new Contract(this.abi, address, this.providerOrAccount);\n }\n\n // ethers.js' getDeployTransaction cant be supported as it requires the account or signer to return a signed transaction which is not possible with the current implementation\n}\n","import { BigNumberish } from '../../utils/number';\nimport { Signature } from '../lib';\n\nexport type Calldata = string[];\n\nexport type Overrides = {\n maxFee?: BigNumberish;\n nonce?: BigNumberish;\n signature?: Signature;\n};\n\nexport * from './sequencer';\nexport * from './rpc';\n","import { Abi, Call, DeclareSignerDetails, InvocationsSignerDetails, Signature } from '../types';\nimport { DeployAccountSignerDetails } from '../types/signer';\nimport { TypedData } from '../utils/typedData';\n\nexport abstract class SignerInterface {\n /**\n * Method to get the public key of the signer\n *\n * @returns public key of signer as hex string with 0x prefix\n */\n public abstract getPubKey(): Promise<string>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param typedData - JSON object to be signed\n * @param accountAddress - account\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData, accountAddress: string): Promise<Signature>;\n\n /**\n * Signs a transaction with the starknet private key and returns the signature\n *\n * @param invocation the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns signature\n */\n public abstract signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature>;\n\n /**\n * Signs a DEPLOY_ACCOUNT transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - contractAddress - the computed address of the contract\n * - constructorCalldata - calldata to be passed in deploy constructor\n * - addressSalt - contract address salt\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeployAccountTransaction(\n transaction: DeployAccountSignerDetails\n ): Promise<Signature>;\n\n /**\n * Signs a DECLARE transaction with the starknet private key and returns the signature\n *\n * @param transaction\n * - classHash - computed class hash. Will be replaced by ContractClass in future once class hash is present in CompiledContract\n * - senderAddress - the address of the sender\n * - chainId - the chainId to declare contract on\n * - maxFee - maxFee for the declare transaction\n * - version - transaction version\n * - nonce - Nonce of the declare transaction\n * @returns signature\n */\n public abstract signDeclareTransaction(transaction: DeclareSignerDetails): Promise<Signature>;\n}\n","import { Call, ParsedStruct } from '../types';\nimport { getSelectorFromName } from './hash';\nimport { BigNumberish, bigNumberishArrayToDecimalStringArray, toBN } from './number';\n\n/**\n * Transforms a list of Calls, each with their own calldata, into\n * two arrays: one with the entrypoints, and one with the concatenated calldata.\n * @param calls\n * @returns\n */\nexport const transformCallsToMulticallArrays = (calls: Call[]) => {\n const callArray: ParsedStruct[] = [];\n const calldata: BigNumberish[] = [];\n calls.forEach((call) => {\n const data = call.calldata || [];\n callArray.push({\n to: toBN(call.contractAddress).toString(10),\n selector: toBN(getSelectorFromName(call.entrypoint)).toString(10),\n data_offset: calldata.length.toString(),\n data_len: data.length.toString(),\n });\n calldata.push(...data);\n });\n return {\n callArray,\n calldata: bigNumberishArrayToDecimalStringArray(calldata),\n };\n};\n\n/**\n * Transforms a list of calls in the full flattened calldata expected\n * by the __execute__ protocol.\n * @param calls\n * @returns\n */\nexport const fromCallsToExecuteCalldata = (calls: Call[]): string[] => {\n const { callArray, calldata } = transformCallsToMulticallArrays(calls);\n return [\n callArray.length.toString(),\n ...callArray\n .map(\n ({ to, selector, data_offset, data_len }) =>\n [to, selector, data_offset, data_len] as string[]\n )\n .flat(),\n calldata.length.toString(),\n ...calldata,\n ];\n};\n\nexport const fromCallsToExecuteCalldataWithNonce = (\n calls: Call[],\n nonce: BigNumberish\n): string[] => {\n return [...fromCallsToExecuteCalldata(calls), toBN(nonce).toString()];\n};\n","import { computeHashOnElements, getSelectorFromName } from '../hash';\nimport { MerkleTree } from '../merkle';\nimport { BigNumberish, isHex, toBN, toHex } from '../number';\nimport { encodeShortString } from '../shortString';\nimport { StarkNetMerkleType, StarkNetType, TypedData } from './types';\nimport { validateTypedData } from './utils';\n\nexport * from './types';\n\nfunction getHex(value: BigNumberish): string {\n try {\n return toHex(toBN(value));\n } catch (e) {\n if (typeof value === 'string') {\n return toHex(toBN(encodeShortString(value)));\n }\n throw new Error(`Invalid BigNumberish: ${value}`);\n }\n}\n\nexport function prepareSelector(selector: string): string {\n return isHex(selector) ? selector : getSelectorFromName(selector);\n}\n\nexport function isMerkleTreeType(type: StarkNetType): type is StarkNetMerkleType {\n return type.type === 'merkletree';\n}\n\ninterface Context {\n parent?: string;\n key?: string;\n}\n\n/**\n * Get the dependencies of a struct type. If a struct has the same dependency multiple times, it's only included once\n * in the resulting array.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {string[]} [dependencies]\n * @return {string[]}\n */\nexport const getDependencies = (\n types: TypedData['types'],\n type: string,\n dependencies: string[] = []\n): string[] => {\n // Include pointers (struct arrays)\n if (type[type.length - 1] === '*') {\n // eslint-disable-next-line no-param-reassign\n type = type.slice(0, -1);\n }\n\n if (dependencies.includes(type)) {\n return dependencies;\n }\n\n if (!types[type]) {\n return dependencies;\n }\n\n return [\n type,\n ...types[type].reduce<string[]>(\n (previous, t) => [\n ...previous,\n ...getDependencies(types, t.type, previous).filter(\n (dependency) => !previous.includes(dependency)\n ),\n ],\n []\n ),\n ];\n};\n\nfunction getMerkleTreeType(types: TypedData['types'], ctx: Context) {\n if (ctx.parent && ctx.key) {\n const parentType = types[ctx.parent];\n const merkleType = parentType.find((t) => t.name === ctx.key)!;\n const isMerkleTree = isMerkleTreeType(merkleType);\n if (!isMerkleTree) {\n throw new Error(`${ctx.key} is not a merkle tree`);\n }\n if (merkleType.contains.endsWith('*')) {\n throw new Error(`Merkle tree contain property must not be an array but was given ${ctx.key}`);\n }\n return merkleType.contains;\n }\n return 'raw';\n}\n\n/**\n * Encode a type to a string. All dependant types are alphabetically sorted.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const encodeType = (types: TypedData['types'], type: string): string => {\n const [primary, ...dependencies] = getDependencies(types, type);\n const newTypes = !primary ? [] : [primary, ...dependencies.sort()];\n\n return newTypes\n .map((dependency) => {\n return `${dependency}(${types[dependency].map((t) => `${t.name}:${t.type}`)})`;\n })\n .join('');\n};\n\n/**\n * Get a type string as hash.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @return {string}\n */\nexport const getTypeHash = (types: TypedData['types'], type: string): string => {\n return getSelectorFromName(encodeType(types, type));\n};\n\n/**\n * Encodes a single value to an ABI serialisable string, number or Buffer. Returns the data as tuple, which consists of\n * an array of ABI compatible types, and an array of corresponding values.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {any} data\n * @returns {[string, string]}\n */\nexport const encodeValue = (\n types: TypedData['types'],\n type: string,\n data: unknown,\n ctx: Context = {}\n): [string, string] => {\n if (types[type]) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return [type, getStructHash(types, type, data as Record<string, unknown>)];\n }\n\n if (\n Object.keys(types)\n .map((x) => `${x}*`)\n .includes(type)\n ) {\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return getStructHash(types, type.slice(0, -1), struct as Record<string, unknown>);\n });\n return [type, computeHashOnElements(structHashes)];\n }\n\n if (type === 'merkletree') {\n const merkleTreeType = getMerkleTreeType(types, ctx);\n const structHashes: string[] = (data as unknown[]).map((struct) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return encodeValue(types, merkleTreeType, struct as Record<string, unknown>)[1];\n });\n const { root } = new MerkleTree(structHashes as string[]);\n return ['felt', root];\n }\n\n if (type === 'felt*') {\n return ['felt*', computeHashOnElements(data as string[])];\n }\n\n if (type === 'selector') {\n return ['felt', prepareSelector(data as string)];\n }\n\n return [type, getHex(data as string)];\n};\n\n/**\n * Encode the data to an ABI encoded Buffer. The data should be a key -> value object with all the required values. All\n * dependant types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n */\nexport const encodeData = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n const [returnTypes, values] = types[type].reduce<[string[], string[]]>(\n ([ts, vs], field) => {\n if (data[field.name] === undefined || data[field.name] === null) {\n throw new Error(`Cannot encode data: missing data for '${field.name}'`);\n }\n\n const value = data[field.name];\n const [t, encodedValue] = encodeValue(types, field.type, value, {\n parent: type,\n key: field.name,\n });\n\n return [\n [...ts, t],\n [...vs, encodedValue],\n ];\n },\n [['felt'], [getTypeHash(types, type)]]\n );\n\n return [returnTypes, values];\n};\n\n/**\n * Get encoded data as a hash. The data should be a key -> value object with all the required values. All dependant\n * types are automatically encoded.\n *\n * @param {TypedData} typedData\n * @param {string} type\n * @param {Record<string, any>} data\n * @return {Buffer}\n */\nexport const getStructHash = <T extends TypedData>(\n types: T['types'],\n type: string,\n data: T['message']\n) => {\n return computeHashOnElements(encodeData(types, type, data)[1]);\n};\n\n/**\n * Get the EIP-191 encoded message to sign, from the typedData object.\n *\n * @param {TypedData} typedData\n * @param {BigNumberish} account\n * @return {string}\n */\nexport const getMessageHash = (typedData: TypedData, account: BigNumberish): string => {\n if (!validateTypedData(typedData)) {\n throw new Error('Typed data does not match JSON schema');\n }\n\n const message = [\n encodeShortString('StarkNet Message'),\n getStructHash(typedData.types, 'StarkNetDomain', typedData.domain),\n account,\n getStructHash(typedData.types, typedData.primaryType, typedData.message),\n ];\n\n return computeHashOnElements(message);\n};\n","import { pedersen } from './hash';\nimport { toBN } from './number';\n\nexport class MerkleTree {\n public leaves: string[];\n\n public branches: string[][] = [];\n\n public root: string;\n\n constructor(leafHashes: string[]) {\n this.leaves = leafHashes;\n this.root = this.build(leafHashes);\n }\n\n private build(leaves: string[]): string {\n if (leaves.length === 1) {\n return leaves[0];\n }\n if (leaves.length !== this.leaves.length) {\n this.branches.push(leaves);\n }\n const newLeaves = [];\n for (let i = 0; i < leaves.length; i += 2) {\n if (i + 1 === leaves.length) {\n newLeaves.push(MerkleTree.hash(leaves[i], '0x0'));\n } else {\n newLeaves.push(MerkleTree.hash(leaves[i], leaves[i + 1]));\n }\n }\n return this.build(newLeaves);\n }\n\n static hash(a: string, b: string) {\n const [aSorted, bSorted] = [toBN(a), toBN(b)].sort((x: any, y: any) => (x.gte(y) ? 1 : -1));\n return pedersen([aSorted, bSorted]);\n }\n\n public getProof(leaf: string, branch = this.leaves, hashPath: string[] = []): string[] {\n const index = branch.indexOf(leaf);\n if (index === -1) {\n throw new Error('leaf not found');\n }\n if (branch.length === 1) {\n return hashPath;\n }\n const isLeft = index % 2 === 0;\n const neededBranch = (isLeft ? branch[index + 1] : branch[index - 1]) ?? '0x0';\n const newHashPath = [...hashPath, neededBranch];\n const currentBranchLevelIndex =\n this.leaves.length === branch.length\n ? -1\n : this.branches.findIndex((b) => b.length === branch.length);\n const nextBranch = this.branches[currentBranchLevelIndex + 1] ?? [this.root];\n return this.getProof(\n MerkleTree.hash(isLeft ? leaf : neededBranch, isLeft ? neededBranch : leaf),\n nextBranch,\n newHashPath\n );\n }\n}\n\nexport function proofMerklePath(root: string, leaf: string, path: string[]): boolean {\n if (path.length === 0) {\n return root === leaf;\n }\n const [next, ...rest] = path;\n return proofMerklePath(root, MerkleTree.hash(leaf, next), rest);\n}\n","import { addHexPrefix, removeHexPrefix } from './encode';\n\nexport function isASCII(str: string) {\n // eslint-disable-next-line no-control-regex\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\n// function to check if string has less or equal 31 characters\nexport function isShortString(str: string) {\n return str.length <= 31;\n}\n\nexport function encodeShortString(str: string) {\n if (!isASCII(str)) throw new Error(`${str} is not an ASCII string`);\n if (!isShortString(str)) throw new Error(`${str} is too long`);\n return addHexPrefix(str.replace(/./g, (char) => char.charCodeAt(0).toString(16)));\n}\n\nexport function decodeShortString(str: string) {\n return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));\n}\n","import { TypedData } from './types';\n\n/**\n * Validates that `data` matches the EIP-712 JSON schema.\n *\n * @param {any} data\n * @return {boolean}\n */\nexport const validateTypedData = (data: unknown): data is TypedData => {\n const typedData = data as TypedData;\n\n // Validate that the data matches the EIP-712 JSON schema\n const valid = Boolean(typedData.types && typedData.primaryType && typedData.message);\n\n return valid;\n};\n","import {\n Abi,\n Call,\n DeclareSignerDetails,\n InvocationsSignerDetails,\n KeyPair,\n Signature,\n} from '../types';\nimport { DeployAccountSignerDetails } from '../types/signer';\nimport { genKeyPair, getStarkKey, sign } from '../utils/ellipticCurve';\nimport {\n calculateDeclareTransactionHash,\n calculateDeployAccountTransactionHash,\n calculateTransactionHash,\n} from '../utils/hash';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { SignerInterface } from './interface';\n\nexport class Signer implements SignerInterface {\n protected keyPair: KeyPair;\n\n constructor(keyPair: KeyPair = genKeyPair()) {\n this.keyPair = keyPair;\n }\n\n public async getPubKey(): Promise<string> {\n return getStarkKey(this.keyPair);\n }\n\n public async signMessage(typedData: TypedData, accountAddress: string): Promise<Signature> {\n const msgHash = getMessageHash(typedData, accountAddress);\n return sign(this.keyPair, msgHash);\n }\n\n public async signTransaction(\n transactions: Call[],\n transactionsDetail: InvocationsSignerDetails,\n abis?: Abi[]\n ): Promise<Signature> {\n if (abis && abis.length !== transactions.length) {\n throw new Error('ABI must be provided for each transaction or no transaction');\n }\n // now use abi to display decoded data somewhere, but as this signer is headless, we can't do that\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n const msgHash = calculateTransactionHash(\n transactionsDetail.walletAddress,\n transactionsDetail.version,\n calldata,\n transactionsDetail.maxFee,\n transactionsDetail.chainId,\n transactionsDetail.nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeployAccountTransaction({\n classHash,\n contractAddress,\n constructorCalldata,\n addressSalt,\n maxFee,\n version,\n chainId,\n nonce,\n }: DeployAccountSignerDetails) {\n const msgHash = calculateDeployAccountTransactionHash(\n contractAddress,\n classHash,\n constructorCalldata,\n addressSalt,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n\n public async signDeclareTransaction(\n // contractClass: ContractClass, // Should be used once class hash is present in ContractClass\n { classHash, senderAddress, chainId, maxFee, version, nonce }: DeclareSignerDetails\n ) {\n const msgHash = calculateDeclareTransactionHash(\n classHash,\n senderAddress,\n version,\n maxFee,\n chainId,\n nonce\n );\n\n return sign(this.keyPair, msgHash);\n }\n}\n","import { UDC, ZERO } from '../constants';\nimport { ProviderInterface, ProviderOptions } from '../provider';\nimport { Provider } from '../provider/default';\nimport { BlockIdentifier } from '../provider/utils';\nimport { Signer, SignerInterface } from '../signer';\nimport {\n Abi,\n Call,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeAction,\n InvocationsDetails,\n InvocationsSignerDetails,\n InvokeFunctionResponse,\n KeyPair,\n Signature,\n} from '../types';\nimport { EstimateFee, EstimateFeeDetails } from '../types/account';\nimport {\n AllowArray,\n DeclareContractPayload,\n DeployAccountContractPayload,\n UniversalDeployerContractPayload,\n} from '../types/lib';\nimport {\n calculateContractAddressFromHash,\n feeTransactionVersion,\n transactionVersion,\n} from '../utils/hash';\nimport { BigNumberish, toBN, toCairoBool } from '../utils/number';\nimport { parseContract } from '../utils/provider';\nimport { compileCalldata, estimatedFeeToMaxFee } from '../utils/stark';\nimport { fromCallsToExecuteCalldata } from '../utils/transaction';\nimport { TypedData, getMessageHash } from '../utils/typedData';\nimport { AccountInterface } from './interface';\n\nexport class Account extends Provider implements AccountInterface {\n public signer: SignerInterface;\n\n public address: string;\n\n constructor(\n providerOrOptions: ProviderOptions | ProviderInterface,\n address: string,\n keyPairOrSigner: KeyPair | SignerInterface\n ) {\n super(providerOrOptions);\n this.address = address.toLowerCase();\n this.signer =\n 'getPubKey' in keyPairOrSigner ? keyPairOrSigner : new Signer(keyPairOrSigner as KeyPair);\n }\n\n public async getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish> {\n return super.getNonce(this.address, blockIdentifier);\n }\n\n public async estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails | undefined\n ): Promise<EstimateFee> {\n return this.estimateInvokeFee(calls, estimateFeeDetails);\n }\n\n public async estimateInvokeFee(\n calls: AllowArray<Call>,\n { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee: ZERO,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n const response = await super.getInvokeEstimateFee(\n { contractAddress: this.address, calldata, signature },\n { version, nonce },\n blockIdentifier\n );\n\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeclareFee(\n { classHash, contract }: DeclareContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n const contractDefinition = parseContract(contract);\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee: ZERO,\n version,\n nonce,\n });\n\n const response = await super.getDeclareEstimateFee(\n { senderAddress: this.address, signature, contractDefinition },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateAccountDeployFee(\n {\n classHash,\n addressSalt = 0,\n constructorCalldata = [],\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}\n ): Promise<EstimateFee> {\n const nonce = toBN(providedNonce ?? (await this.getNonce()));\n const version = toBN(feeTransactionVersion);\n const chainId = await this.getChainId();\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n contractAddress,\n chainId,\n maxFee: ZERO,\n version,\n nonce,\n addressSalt,\n constructorCalldata,\n });\n\n const response = await super.getDeployAccountEstimateFee(\n { classHash, addressSalt, constructorCalldata, signature },\n { version, nonce },\n blockIdentifier\n );\n const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);\n\n return {\n ...response,\n suggestedMaxFee,\n };\n }\n\n public async estimateDeployFee(\n {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n additionalCalls = [],\n }: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails | undefined\n ): Promise<EstimateFee> {\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];\n return this.estimateInvokeFee(\n [\n {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n ...callsArray,\n ],\n transactionsDetail\n );\n }\n\n public async execute(\n calls: AllowArray<Call>,\n abis: Abi[] | undefined = undefined,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const transactions = Array.isArray(calls) ? calls : [calls];\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee({ type: 'INVOKE', payload: calls }, transactionsDetail));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signerDetails: InvocationsSignerDetails = {\n walletAddress: this.address,\n nonce,\n maxFee,\n version,\n chainId,\n };\n\n const signature = await this.signer.signTransaction(transactions, signerDetails, abis);\n\n const calldata = fromCallsToExecuteCalldata(transactions);\n\n return this.invokeFunction(\n { contractAddress: this.address, calldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async declare(\n { classHash, contract }: DeclareContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeclareContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n { type: 'DECLARE', payload: { classHash, contract } },\n transactionsDetail\n ));\n\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const signature = await this.signer.signDeclareTransaction({\n classHash,\n senderAddress: this.address,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n const contractDefinition = parseContract(contract);\n\n return this.declareContract(\n { contractDefinition, senderAddress: this.address, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async deploy(\n {\n classHash,\n salt,\n unique = true,\n constructorCalldata = [],\n additionalCalls = [],\n }: UniversalDeployerContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<InvokeFunctionResponse> {\n const compiledConstructorCallData = compileCalldata(constructorCalldata);\n\n const callsArray = Array.isArray(additionalCalls) ? additionalCalls : [additionalCalls];\n\n return this.execute(\n [\n {\n contractAddress: UDC.ADDRESS,\n entrypoint: UDC.ENTRYPOINT,\n calldata: [\n classHash,\n salt,\n toCairoBool(unique),\n compiledConstructorCallData.length,\n ...compiledConstructorCallData,\n ],\n },\n ...callsArray,\n ],\n undefined,\n transactionsDetail\n );\n }\n\n public async deployAccount(\n {\n classHash,\n constructorCalldata = [],\n addressSalt = 0,\n contractAddress: providedContractAddress,\n }: DeployAccountContractPayload,\n transactionsDetail: InvocationsDetails = {}\n ): Promise<DeployContractResponse> {\n const nonce = toBN(transactionsDetail.nonce ?? (await this.getNonce()));\n const version = toBN(transactionVersion);\n const chainId = await this.getChainId();\n\n const contractAddress =\n providedContractAddress ??\n calculateContractAddressFromHash(addressSalt, classHash, constructorCalldata, 0);\n\n const maxFee =\n transactionsDetail.maxFee ??\n (await this.getSuggestedMaxFee(\n {\n type: 'DEPLOY_ACCOUNT',\n payload: { classHash, constructorCalldata, addressSalt, contractAddress },\n },\n transactionsDetail\n ));\n\n const signature = await this.signer.signDeployAccountTransaction({\n classHash,\n constructorCalldata,\n contractAddress,\n addressSalt,\n chainId,\n maxFee,\n version,\n nonce,\n });\n\n return this.deployAccountContract(\n { classHash, addressSalt, constructorCalldata, signature },\n {\n nonce,\n maxFee,\n version,\n }\n );\n }\n\n public async signMessage(typedData: TypedData): Promise<Signature> {\n return this.signer.signMessage(typedData, this.address);\n }\n\n public async hashMessage(typedData: TypedData): Promise<string> {\n return getMessageHash(typedData, this.address);\n }\n\n public async verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean> {\n try {\n await this.callContract({\n contractAddress: this.address,\n entrypoint: 'isValidSignature',\n calldata: compileCalldata({\n hash: toBN(hash).toString(),\n signature: signature.map((x) => toBN(x).toString()),\n }),\n });\n return true;\n } catch {\n return false;\n }\n }\n\n public async verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean> {\n const hash = await this.hashMessage(typedData);\n return this.verifyMessageHash(hash, signature);\n }\n\n public async getSuggestedMaxFee(\n { type, payload }: EstimateFeeAction,\n details: EstimateFeeDetails\n ) {\n let feeEstimate: EstimateFee;\n\n switch (type) {\n case 'INVOKE':\n feeEstimate = await this.estimateInvokeFee(payload, details);\n break;\n\n case 'DECLARE':\n feeEstimate = await this.estimateDeclareFee(payload, details);\n break;\n\n case 'DEPLOY_ACCOUNT':\n feeEstimate = await this.estimateAccountDeployFee(payload, details);\n break;\n\n case 'DEPLOY':\n feeEstimate = await this.estimateDeployFee(payload, details);\n break;\n\n default:\n feeEstimate = { suggestedMaxFee: ZERO, overall_fee: ZERO };\n break;\n }\n\n return feeEstimate.suggestedMaxFee.toString();\n }\n}\n","import { ProviderInterface } from '../provider';\nimport { BlockIdentifier } from '../provider/utils';\nimport { SignerInterface } from '../signer';\nimport {\n Abi,\n Call,\n DeclareContractResponse,\n DeployContractResponse,\n EstimateFeeAction,\n EstimateFeeDetails,\n EstimateFeeResponse,\n InvocationsDetails,\n InvokeFunctionResponse,\n Signature,\n} from '../types';\nimport {\n AllowArray,\n DeclareContractPayload,\n DeployAccountContractPayload,\n UniversalDeployerContractPayload,\n} from '../types/lib';\nimport { BigNumberish } from '../utils/number';\nimport { TypedData } from '../utils/typedData/types';\n\nexport abstract class AccountInterface extends ProviderInterface {\n public abstract address: string;\n\n public abstract signer: SignerInterface;\n\n /**\n * @deprecated Use estimateInvokeFee or estimateDeclareFee instead\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing an INVOKE transaction on starknet\n *\n * @param calls the invocation object containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n *\n * @returns response from estimate_fee\n */\n public abstract estimateInvokeFee(\n calls: AllowArray<Call>,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DECLARE transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be declared\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateDeclareFee(\n contractPayload: DeclareContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a DEPLOY_ACCOUNT transaction on starknet\n *\n * @param contractPayload the payload object containing:\n * - contract - the compiled contract to be deployed\n * - classHash - the class hash of the compiled contract. This can be obtained by using starknet-cli.\n *\n * @returns response from estimate_fee\n */\n public abstract estimateAccountDeployFee(\n contractPayload: DeployAccountContractPayload,\n estimateFeeDetails?: EstimateFeeDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Estimate Fee for executing a UDC DEPLOY transaction on starknet\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n \n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * - additionalCalls - optional additional calls array to support multicall\n * \n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract estimateDeployFee(\n deployContractPayload: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<EstimateFeeResponse>;\n\n /**\n * Invoke execute function in account contract\n *\n * @param transactions the invocation object or an array of them, containing:\n * - contractAddress - the address of the contract\n * - entrypoint - the entrypoint of the contract\n * - calldata - (defaults to []) the calldata\n * - signature - (defaults to []) the signature\n * @param abi (optional) the abi of the contract for better displaying\n *\n * @returns response from addTransaction\n */\n public abstract execute(\n transactions: AllowArray<Call>,\n abis?: Abi[],\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Declares a given compiled contract (json) to starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - contract: compiled contract code\n - classHash: computed class hash of compiled contract\n - signature\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract declare(\n contractPayload: DeclareContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeclareContractResponse>;\n\n /**\n * Deploys a given compiled contract (json) to starknet using Universal Deployer Contract (UDC)\n * This is different from the normal DEPLOY transaction as it goes through the Universal Deployer Contract (UDC)\n *\n * @param deployContractPayload containing\n * - classHash: computed class hash of compiled contract\n * - salt: address salt\n * - unique: bool if true ensure unique salt\n * - calldata: constructor calldata\n * - additionalCalls - optional additional calls array to support multicall\n * @param transactionsDetail Invocation Details containing:\n * - optional nonce\n * - optional version\n * - optional maxFee\n */\n public abstract deploy(\n deployContractPayload: UniversalDeployerContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<InvokeFunctionResponse>;\n\n /**\n * Deploy the account on Starknet\n * \n * @param contractPayload transaction payload to be deployed containing:\n - classHash: computed class hash of compiled contract\n - optional constructor calldata\n - optional address salt \n - optional contractAddress\n * @param transactionsDetail Invocation Details containing:\n - optional nonce\n - optional version\n - optional maxFee\n * @returns a confirmation of sending a transaction on the starknet contract\n */\n public abstract deployAccount(\n contractPayload: DeployAccountContractPayload,\n transactionsDetail?: InvocationsDetails\n ): Promise<DeployContractResponse>;\n\n /**\n * Sign an JSON object for off-chain usage with the starknet private key and return the signature\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be signed\n * @returns the signature of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract signMessage(typedData: TypedData): Promise<Signature>;\n\n /**\n * Hash a JSON object with pederson hash and return the hash\n * This adds a message prefix so it cant be interchanged with transactions\n *\n * @param json - JSON object to be hashed\n * @returns the hash of the JSON object\n * @throws {Error} if the JSON object is not a valid JSON\n */\n public abstract hashMessage(typedData: TypedData): Promise<string>;\n\n /**\n * Verify a signature of a JSON object\n *\n * @param typedData - JSON object to be verified\n * @param signature - signature of the JSON object\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the JSON object is not a valid JSON or the signature is not a valid signature\n */\n public abstract verifyMessage(typedData: TypedData, signature: Signature): Promise<boolean>;\n\n /**\n * Verify a signature of a given hash\n * @warning This method is not recommended, use verifyMessage instead\n *\n * @param hash - hash to be verified\n * @param signature - signature of the hash\n * @returns true if the signature is valid, false otherwise\n * @throws {Error} if the signature is not a valid signature\n */\n public abstract verifyMessageHash(hash: BigNumberish, signature: Signature): Promise<boolean>;\n\n /**\n * Gets the nonce of the account with respect to a specific block\n *\n * @param {BlockIdentifier} blockIdentifier - optional blockIdentifier. Defaults to 'pending'\n * @returns nonce of the account\n */\n public abstract getNonce(blockIdentifier?: BlockIdentifier): Promise<BigNumberish>;\n\n /**\n * Gets Suggested Max Fee based on the transaction type\n *\n * @param {EstimateFeeAction} estimateFeeAction\n * @param {EstimateFeeDetails} details\n * @returns suggestedMaxFee\n */\n public abstract getSuggestedMaxFee(\n estimateFeeAction: EstimateFeeAction,\n details: EstimateFeeDetails\n ): Promise<BigNumberish>;\n}\n","import { addHexPrefix } from './encode';\nimport { BigNumberish, toBN } from './number';\n\n// Represents an integer in the range [0, 2^256).\nexport interface Uint256 {\n // The low 128 bits of the value.\n low: BigNumberish;\n // The high 128 bits of the value.\n high: BigNumberish;\n}\n\n// function to convert Uint256 to BN\nexport function uint256ToBN(uint256: Uint256) {\n return toBN(uint256.high).shln(128).add(toBN(uint256.low));\n}\n\nexport const UINT_128_MAX = toBN(1).shln(128).sub(toBN(1));\nexport const UINT_256_MAX = toBN(1).shln(256).sub(toBN(1));\n// function to check if BN is smaller or equal 2**256-1\nexport function isUint256(bn: BigNumberish): boolean {\n return toBN(bn).lte(UINT_256_MAX);\n}\n\n// function to convert BN to Uint256\nexport function bnToUint256(bignumber: BigNumberish): Uint256 {\n const bn = toBN(bignumber);\n if (!isUint256(bn)) throw new Error('Number is too large');\n return {\n low: addHexPrefix(bn.maskn(128).toString(16)),\n high: addHexPrefix(bn.shrn(128).toString(16)),\n };\n}\n",null,null,null,null,"/* eslint-disable no-bitwise */\nimport { arrayify } from '@ethersproject/bytes';\n\nimport { MASK_251, ZERO } from '../constants';\nimport { addHexPrefix, removeHexPrefix } from './encode';\nimport { keccakBn } from './hash';\nimport { BigNumberish, assertInRange, toBN, toHex } from './number';\n\nexport function addAddressPadding(address: BigNumberish): string {\n return addHexPrefix(removeHexPrefix(toHex(toBN(address))).padStart(64, '0'));\n}\n\nexport function validateAndParseAddress(address: BigNumberish): string {\n assertInRange(address, ZERO, MASK_251, 'Starknet Address');\n\n const result = addAddressPadding(address);\n\n if (!result.match(/^(0x)?[0-9a-fA-F]{64}$/)) {\n throw new Error('Invalid Address Format');\n }\n\n return result;\n}\n\n// from https://github.com/ethers-io/ethers.js/blob/fc1e006575d59792fa97b4efb9ea2f8cca1944cf/packages/address/src.ts/index.ts#L12\nexport function getChecksumAddress(address: BigNumberish): string {\n const chars = removeHexPrefix(validateAndParseAddress(address)).toLowerCase().split('');\n const hashed = arrayify(keccakBn(address), { hexPad: 'left' }); // in case the hash is 251 bits (63 chars) we need to pad it to 64 chars without changing the number value (\"left\")\n\n for (let i = 0; i < chars.length; i += 2) {\n if (hashed[i >> 1] >> 4 >= 8) {\n chars[i] = chars[i].toUpperCase();\n }\n if ((hashed[i >> 1] & 0x0f) >= 8) {\n chars[i + 1] = chars[i + 1].toUpperCase();\n }\n }\n\n return addHexPrefix(chars.join(''));\n}\n\nexport function validateChecksumAddress(address: string): boolean {\n return getChecksumAddress(address) === address;\n}\n"],"mappings":"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;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAAM,KAAK;AACf,cAAI,MAAM,OAAO;AACjB,cAAI,KAAK,EAAE,KAAK;AAChB,cAAI,MAA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AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,IAAK;AACpC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,eAAM,KAAK,KAAK,KAAK,KAAK,GAAG,IAAK;AAClC,gBAAO,MAAM,KAAK,KAAK,KAAK,GAAG,I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A,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,KAAK;AAAA,UACH,KAAK;AAAA,UACL,QAAQ;AAAA,YACN;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;;;AC3wBA;AAAA;AAAA;AAEA,UAAIC,UAAS;AAEb,UAAI,OAAO;AACX,UAAI,QAAQ;AACZ,UAAI,QAAQ;AAEZ,UAAIC,UAAS,MAAM;AAEnB,eAAS,YAAY,SAAS;AAC5B,YAAI,QAAQ,SAAS;AACnB,eAAK,QAAQ,IAAI,MAAM,MAAM,OAAO;AAAA,iBAC7B,QAAQ,SAAS;AACxB,eAAK,QAAQ,IAAI,MAAM,QAAQ,OAAO;AAAA;AAEtC,eAAK,QAAQ,IAAI,MAAM,KAAK,OAAO;AACrC,aAAK,IAAI,KAAK,MAAM;AACpB,aAAK,IAAI,KAAK,MAAM;AACpB,aAAK,OAAO,QAAQ;AAEpB,QAAAA,QAAO,KAAK,EAAE,SAAS,GAAG,eAAe;AACzC,QAAAA,QAAO,KAAK,EAAE,IAAI,KAAK,CAAC,EAAE,WAAW,GAAG,yBAAyB;AAAA,MACnE;AACA,MAAAD,QAAO,cAAc;AAErB,eAAS,YAAY,MAAM,SAAS;AAClC,eAAO,eAAeA,SAAQ,MAAM;AAAA,UAClC,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,KAAK,WAAW;AACd,gBAAIE,SAAQ,IAAI,YAAY,OAAO;AACnC,mBAAO,eAAeF,SAAQ,MAAM;AAAA,cAClC,cAAc;AAAA,cACd,YAAY;AAAA,cACZ,OAAOE;AAAA,YACT,CAAC;AACD,mBAAOA;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH;AAEA,kBAAY,QAAQ;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,kBAAY,QAAQ;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,kBAAY,QAAQ;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,kBAAY,QAAQ;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QAEH,GAAG;AAAA,QAEH,GAAG;AAAA,QAEH,GAAG;AAAA,QAEH,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UAEA;AAAA,QAEF;AAAA,MACF,CAAC;AAED,kBAAY,QAAQ;AAAA,QAClB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QAGH,GAAG;AAAA,QAGH,GAAG;AAAA,QAGH,GAAG;AAAA,QAGH,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UAGA;AAAA,QAGF;AAAA,MACF,CAAC;AAED,kBAAY,cAAc;AAAA,QACxB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,QACF;AAAA,MACF,CAAC;AAED,kBAAY,WAAW;AAAA,QACrB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QAEH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,MAAM,KAAK;AAAA,QACX,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UAGA;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI;AACJ,UAAI;AACF,cAAM;AAAA,MACR,SAAS,GAAP;AACA,cAAM;AAAA,MACR;AAEA,kBAAY,aAAa;AAAA,QACvB,MAAM;AAAA,QACN,OAAO;AAAA,QACP,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH,MAAM,KAAK;AAAA,QAGX,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,UACL;AAAA,YACE,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AAAA,UACA;AAAA,YACE,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AAAA,QACF;AAAA,QAEA,MAAM;AAAA,QACN,GAAG;AAAA,UACD;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAAA;AAAA;;;AC7MD;AAAA;AAAA;AAEA,UAAI,OAAO;AACX,UAAI,QAAQ;AACZ,UAAIC,UAAS;AAEb,eAAS,SAAS,SAAS;AACzB,YAAI,EAAE,gBAAgB;AACpB,iBAAO,IAAI,SAAS,OAAO;AAC7B,aAAK,OAAO,QAAQ;AACpB,aAAK,aAAa,CAAC,CAAC,QAAQ;AAE5B,aAAK,SAAS,KAAK,KAAK;AACxB,aAAK,aAAa,QAAQ,cAAc,KAAK,KAAK;AAElD,aAAK,UAAU;AACf,aAAK,iBAAiB;AACtB,aAAK,IAAI;AACT,aAAK,IAAI;AAET,YAAI,UAAU,MAAM,QAAQ,QAAQ,SAAS,QAAQ,cAAc,KAAK;AACxE,YAAI,QAAQ,MAAM,QAAQ,QAAQ,OAAO,QAAQ,YAAY,KAAK;AAClE,YAAI,OAAO,MAAM,QAAQ,QAAQ,MAAM,QAAQ,WAAW,KAAK;AAC/D,QAAAA;AAAA,UAAO,QAAQ,UAAW,KAAK,aAAa;AAAA,UACrC,qCAAqC,KAAK,aAAa;AAAA,QAAO;AACrE,aAAK,MAAM,SAAS,OAAO,IAAI;AAAA,MACjC;AACA,aAAO,UAAU;AAEjB,eAAS,UAAU,QAAQ,SAAS,KAAK,SAAS,OAAO,MAAM;AAC7D,YAAI,OAAO,QAAQ,OAAO,KAAK,EAAE,OAAO,IAAI;AAE5C,aAAK,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC;AAClC,aAAK,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC;AAClC,iBAAS,IAAI,GAAG,IAAI,KAAK,EAAE,QAAQ,KAAK;AACtC,eAAK,EAAE,KAAK;AACZ,eAAK,EAAE,KAAK;AAAA,QACd;AAEA,aAAK,QAAQ,IAAI;AACjB,aAAK,UAAU;AACf,aAAK,iBAAiB;AAAA,MACxB;AAEA,eAAS,UAAU,QAAQ,SAAS,OAAO;AACzC,eAAO,IAAI,KAAK,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,MACxC;AAEA,eAAS,UAAU,UAAU,SAAS,OAAO,MAAM;AACjD,YAAI,OAAO,KAAK,MAAM,EACN,OAAO,KAAK,CAAC,EACb,OAAO,CAAE,CAAK,CAAC;AAC/B,YAAI;AACF,iBAAO,KAAK,OAAO,IAAI;AACzB,aAAK,IAAI,KAAK,OAAO;AACrB,aAAK,IAAI,KAAK,MAAM,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO;AAC5C,YAAI,CAAC;AACH;AAEF,aAAK,IAAI,KAAK,MAAM,EACN,OAAO,KAAK,CAAC,EACb,OAAO,CAAE,CAAK,CAAC,EACf,OAAO,IAAI,EACX,OAAO;AACrB,aAAK,IAAI,KAAK,MAAM,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO;AAAA,MAC9C;AAEA,eAAS,UAAU,SAAS,SAAS,OAAO,SAAS,YAAY,KAAK,QAAQ;AAE5E,YAAI,OAAO,eAAe,UAAU;AAClC,mBAAS;AACT,gBAAM;AACN,uBAAa;AAAA,QACf;AAEA,kBAAU,MAAM,QAAQ,SAAS,UAAU;AAC3C,cAAM,MAAM,QAAQ,KAAK,MAAM;AAE/B,QAAAA;AAAA,UAAO,QAAQ,UAAW,KAAK,aAAa;AAAA,UACrC,qCAAqC,KAAK,aAAa;AAAA,QAAO;AAErE,aAAK,QAAQ,QAAQ,OAAO,OAAO,CAAC,CAAC,CAAC;AACtC,aAAK,UAAU;AAAA,MACjB;AAEA,eAAS,UAAU,WAAW,SAAS,SAAS,KAAK,KAAK,KAAK,QAAQ;AACrE,YAAI,KAAK,UAAU,KAAK;AACtB,gBAAM,IAAI,MAAM,oBAAoB;AAGtC,YAAI,OAAO,QAAQ,UAAU;AAC3B,mBAAS;AACT,gBAAM;AACN,gBAAM;AAAA,QACR;AAGA,YAAI,KAAK;AACP,gBAAM,MAAM,QAAQ,KAAK,UAAU,KAAK;AACxC,eAAK,QAAQ,GAAG;AAAA,QAClB;AAEA,YAAI,OAAO,CAAC;AACZ,eAAO,KAAK,SAAS,KAAK;AACxB,eAAK,IAAI,KAAK,MAAM,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO;AAC5C,iBAAO,KAAK,OAAO,KAAK,CAAC;AAAA,QAC3B;AAEA,YAAI,MAAM,KAAK,MAAM,GAAG,GAAG;AAC3B,aAAK,QAAQ,GAAG;AAChB,aAAK;AACL,eAAO,MAAM,OAAO,KAAK,GAAG;AAAA,MAC9B;AAAA;AAAA;;;AChHA;AAAA;AAAA;AAEA,UAAIC,MAAK;AACT,UAAI,QAAQ;AACZ,UAAIC,UAAS,MAAM;AAEnB,eAAS,QAAQC,KAAI,SAAS;AAC5B,aAAK,KAAKA;AACV,aAAK,OAAO;AACZ,aAAK,MAAM;AAGX,YAAI,QAAQ;AACV,eAAK,eAAe,QAAQ,MAAM,QAAQ,OAAO;AACnD,YAAI,QAAQ;AACV,eAAK,cAAc,QAAQ,KAAK,QAAQ,MAAM;AAAA,MAClD;AACA,aAAO,UAAU;AAEjB,cAAQ,aAAa,SAAS,WAAWA,KAAI,KAAK,KAAK;AACrD,YAAI,eAAe;AACjB,iBAAO;AAET,eAAO,IAAI,QAAQA,KAAI;AAAA,UACrB;AAAA,UACA,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AAEA,cAAQ,cAAc,SAAS,YAAYA,KAAI,MAAM,KAAK;AACxD,YAAI,gBAAgB;AAClB,iBAAO;AAET,eAAO,IAAI,QAAQA,KAAI;AAAA,UACrB;AAAA,UACA,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAEA,cAAQ,UAAU,WAAW,SAAS,WAAW;AAC/C,YAAI,MAAM,KAAK,UAAU;AAEzB,YAAI,IAAI,WAAW;AACjB,iBAAO,EAAE,QAAQ,OAAO,QAAQ,qBAAqB;AACvD,YAAI,CAAC,IAAI,SAAS;AAChB,iBAAO,EAAE,QAAQ,OAAO,QAAQ,4BAA4B;AAC9D,YAAI,CAAC,IAAI,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,WAAW;AACvC,iBAAO,EAAE,QAAQ,OAAO,QAAQ,sBAAsB;AAExD,eAAO,EAAE,QAAQ,MAAM,QAAQ,KAAK;AAAA,MACtC;AAEA,cAAQ,UAAU,YAAY,SAAS,UAAU,SAAS,KAAK;AAE7D,YAAI,OAAO,YAAY,UAAU;AAC/B,gBAAM;AACN,oBAAU;AAAA,QACZ;AAEA,YAAI,CAAC,KAAK;AACR,eAAK,MAAM,KAAK,GAAG,EAAE,IAAI,KAAK,IAAI;AAEpC,YAAI,CAAC;AACH,iBAAO,KAAK;AAEd,eAAO,KAAK,IAAI,OAAO,KAAK,OAAO;AAAA,MACrC;AAEA,cAAQ,UAAU,aAAa,SAAS,WAAW,KAAK;AACtD,YAAI,QAAQ;AACV,iBAAO,KAAK,KAAK,SAAS,IAAI,CAAC;AAAA;AAE/B,iBAAO,KAAK;AAAA,MAChB;AAEA,cAAQ,UAAU,iBAAiB,SAAS,eAAe,KAAK,KAAK;AACnE,aAAK,OAAO,IAAIF,IAAG,KAAK,OAAO,EAAE;AAIjC,aAAK,OAAO,KAAK,KAAK,KAAK,KAAK,GAAG,MAAM,CAAC;AAAA,MAC5C;AAEA,cAAQ,UAAU,gBAAgB,SAAS,cAAc,KAAK,KAAK;AACjE,YAAI,IAAI,KAAK,IAAI,GAAG;AAIlB,cAAI,KAAK,GAAG,MAAM,SAAS,QAAQ;AACjC,YAAAC,QAAO,IAAI,GAAG,mBAAmB;AAAA,UACnC,WAAW,KAAK,GAAG,MAAM,SAAS,WACvB,KAAK,GAAG,MAAM,SAAS,WAAW;AAC3C,YAAAA,QAAO,IAAI,KAAK,IAAI,GAAG,8BAA8B;AAAA,UACvD;AACA,eAAK,MAAM,KAAK,GAAG,MAAM,MAAM,IAAI,GAAG,IAAI,CAAC;AAC3C;AAAA,QACF;AACA,aAAK,MAAM,KAAK,GAAG,MAAM,YAAY,KAAK,GAAG;AAAA,MAC/C;AAGA,cAAQ,UAAU,SAAS,SAAS,OAAO,KAAK;AAC9C,YAAG,CAAC,IAAI,SAAS,GAAG;AAClB,UAAAA,QAAO,IAAI,SAAS,GAAG,4BAA4B;AAAA,QACrD;AACA,eAAO,IAAI,IAAI,KAAK,IAAI,EAAE,KAAK;AAAA,MACjC;AAGA,cAAQ,UAAU,OAAO,SAASE,MAAK,KAAK,KAAK,SAAS;AACxD,eAAO,KAAK,GAAG,KAAK,KAAK,MAAM,KAAK,OAAO;AAAA,MAC7C;AAEA,cAAQ,UAAU,SAAS,SAASC,QAAO,KAAK,WAAW;AACzD,eAAO,KAAK,GAAG,OAAO,KAAK,WAAW,IAAI;AAAA,MAC5C;AAEA,cAAQ,UAAU,UAAU,SAAS,UAAU;AAC7C,eAAO,iBAAiB,KAAK,QAAQ,KAAK,KAAK,SAAS,IAAI,CAAC,KACtD,YAAY,KAAK,OAAO,KAAK,IAAI,QAAQ,KAAK;AAAA,MACvD;AAAA;AAAA;;;ACxHA;AAAA;AAAA;AAEA,UAAIC,MAAK;AAET,UAAI,QAAQ;AACZ,UAAIC,UAAS,MAAM;AAEnB,eAAS,UAAU,SAAS,KAAK;AAC/B,YAAI,mBAAmB;AACrB,iBAAO;AAET,YAAI,KAAK,WAAW,SAAS,GAAG;AAC9B;AAEF,QAAAA,QAAO,QAAQ,KAAK,QAAQ,GAAG,0BAA0B;AACzD,aAAK,IAAI,IAAID,IAAG,QAAQ,GAAG,EAAE;AAC7B,aAAK,IAAI,IAAIA,IAAG,QAAQ,GAAG,EAAE;AAC7B,YAAI,QAAQ,kBAAkB;AAC5B,eAAK,gBAAgB;AAAA;AAErB,eAAK,gBAAgB,QAAQ;AAAA,MACjC;AACA,aAAO,UAAU;AAEjB,eAAS,WAAW;AAClB,aAAK,QAAQ;AAAA,MACf;AAEA,eAAS,UAAU,KAAK,GAAG;AACzB,YAAI,UAAU,IAAI,EAAE;AACpB,YAAI,EAAE,UAAU,MAAO;AACrB,iBAAO;AAAA,QACT;AACA,YAAI,WAAW,UAAU;AAGzB,YAAI,aAAa,KAAK,WAAW,GAAG;AAClC,iBAAO;AAAA,QACT;AAEA,YAAI,MAAM;AACV,iBAAS,IAAI,GAAG,MAAM,EAAE,OAAO,IAAI,UAAU,KAAK,OAAO;AACvD,kBAAQ;AACR,iBAAO,IAAI;AACX,mBAAS;AAAA,QACX;AAGA,YAAI,OAAO,KAAM;AACf,iBAAO;AAAA,QACT;AAEA,UAAE,QAAQ;AACV,eAAO;AAAA,MACT;AAEA,eAAS,UAAU,KAAK;AACtB,YAAI,IAAI;AACR,YAAI,MAAM,IAAI,SAAS;AACvB,eAAO,CAAC,IAAI,MAAM,EAAE,IAAI,IAAI,KAAK,QAAS,IAAI,KAAK;AACjD;AAAA,QACF;AACA,YAAI,MAAM,GAAG;AACX,iBAAO;AAAA,QACT;AACA,eAAO,IAAI,MAAM,CAAC;AAAA,MACpB;AAEA,gBAAU,UAAU,aAAa,SAAS,WAAW,MAAM,KAAK;AAC9D,eAAO,MAAM,QAAQ,MAAM,GAAG;AAC9B,YAAI,IAAI,IAAI,SAAS;AACrB,YAAI,KAAK,EAAE,aAAa,IAAM;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,MAAM,UAAU,MAAM,CAAC;AAC3B,YAAI,QAAQ,OAAO;AACjB,iBAAO;AAAA,QACT;AACA,YAAK,MAAM,EAAE,UAAW,KAAK,QAAQ;AACnC,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,EAAE,aAAa,GAAM;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,UAAU,MAAM,CAAC;AAC5B,YAAI,SAAS,OAAO;AAClB,iBAAO;AAAA,QACT;AACA,YAAI,IAAI,KAAK,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK;AAC1C,UAAE,SAAS;AACX,YAAI,KAAK,EAAE,aAAa,GAAM;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,OAAO,UAAU,MAAM,CAAC;AAC5B,YAAI,SAAS,OAAO;AAClB,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,WAAW,OAAO,EAAE,OAAO;AAClC,iBAAO;AAAA,QACT;AACA,YAAI,IAAI,KAAK,MAAM,EAAE,OAAO,OAAO,EAAE,KAAK;AAC1C,YAAI,EAAE,OAAO,GAAG;AACd,cAAI,EAAE,KAAK,KAAM;AACf,gBAAI,EAAE,MAAM,CAAC;AAAA,UACf,OAAO;AAEL,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,EAAE,OAAO,GAAG;AACd,cAAI,EAAE,KAAK,KAAM;AACf,gBAAI,EAAE,MAAM,CAAC;AAAA,UACf,OAAO;AAEL,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,aAAK,IAAI,IAAIA,IAAG,CAAC;AACjB,aAAK,IAAI,IAAIA,IAAG,CAAC;AACjB,aAAK,gBAAgB;AAErB,eAAO;AAAA,MACT;AAEA,eAAS,gBAAgB,KAAK,KAAK;AACjC,YAAI,MAAM,KAAM;AACd,cAAI,KAAK,GAAG;AACZ;AAAA,QACF;AACA,YAAI,SAAS,KAAK,KAAK,IAAI,GAAG,IAAI,KAAK,QAAQ;AAC/C,YAAI,KAAK,SAAS,GAAI;AACtB,eAAO,EAAE,QAAQ;AACf,cAAI,KAAM,SAAS,UAAU,KAAM,GAAI;AAAA,QACzC;AACA,YAAI,KAAK,GAAG;AAAA,MACd;AAEA,gBAAU,UAAU,QAAQ,SAAS,MAAM,KAAK;AAC9C,YAAI,IAAI,KAAK,EAAE,QAAQ;AACvB,YAAI,IAAI,KAAK,EAAE,QAAQ;AAGvB,YAAI,EAAE,KAAK;AACT,cAAI,CAAE,CAAE,EAAE,OAAO,CAAC;AAEpB,YAAI,EAAE,KAAK;AACT,cAAI,CAAE,CAAE,EAAE,OAAO,CAAC;AAEpB,YAAI,UAAU,CAAC;AACf,YAAI,UAAU,CAAC;AAEf,eAAO,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,MAAO;AAC9B,cAAI,EAAE,MAAM,CAAC;AAAA,QACf;AACA,YAAI,MAAM,CAAE,CAAK;AACjB,wBAAgB,KAAK,EAAE,MAAM;AAC7B,cAAM,IAAI,OAAO,CAAC;AAClB,YAAI,KAAK,CAAI;AACb,wBAAgB,KAAK,EAAE,MAAM;AAC7B,YAAI,WAAW,IAAI,OAAO,CAAC;AAC3B,YAAI,MAAM,CAAE,EAAK;AACjB,wBAAgB,KAAK,SAAS,MAAM;AACpC,cAAM,IAAI,OAAO,QAAQ;AACzB,eAAO,MAAM,OAAO,KAAK,GAAG;AAAA,MAC9B;AAAA;AAAA;;;ACrKA;AAAA;AAAA;AAEA,UAAIE,MAAK;AACT,UAAI,WAAW;AACf,UAAI,QAAQ;AACZ,UAAIC,UAAS;AACb,UAAI,OAAO;AACX,UAAIC,UAAS,MAAM;AAEnB,UAAI,UAAU;AACd,UAAI,YAAY;AAEhB,eAASC,IAAG,SAAS;AACnB,YAAI,EAAE,gBAAgBA;AACpB,iBAAO,IAAIA,IAAG,OAAO;AAGvB,YAAI,OAAO,YAAY,UAAU;AAC/B,UAAAD;AAAA,YAAO,OAAO,UAAU,eAAe,KAAKD,SAAQ,OAAO;AAAA,YACzD,mBAAmB;AAAA,UAAO;AAE5B,oBAAUA,QAAO;AAAA,QACnB;AAGA,YAAI,mBAAmBA,QAAO;AAC5B,oBAAU,EAAE,OAAO,QAAQ;AAE7B,aAAK,QAAQ,QAAQ,MAAM;AAC3B,aAAK,IAAI,KAAK,MAAM;AACpB,aAAK,KAAK,KAAK,EAAE,MAAM,CAAC;AACxB,aAAK,IAAI,KAAK,MAAM;AAGpB,aAAK,IAAI,QAAQ,MAAM;AACvB,aAAK,EAAE,WAAW,QAAQ,MAAM,EAAE,UAAU,IAAI,CAAC;AAGjD,aAAK,OAAO,QAAQ,QAAQ,QAAQ,MAAM;AAAA,MAC5C;AACA,aAAO,UAAUE;AAEjB,MAAAA,IAAG,UAAU,UAAU,SAAS,QAAQ,SAAS;AAC/C,eAAO,IAAI,QAAQ,MAAM,OAAO;AAAA,MAClC;AAEA,MAAAA,IAAG,UAAU,iBAAiB,SAAS,eAAe,MAAM,KAAK;AAC/D,eAAO,QAAQ,YAAY,MAAM,MAAM,GAAG;AAAA,MAC5C;AAEA,MAAAA,IAAG,UAAU,gBAAgB,SAAS,cAAc,KAAK,KAAK;AAC5D,eAAO,QAAQ,WAAW,MAAM,KAAK,GAAG;AAAA,MAC1C;AAEA,MAAAA,IAAG,UAAU,aAAa,SAASC,YAAW,SAAS;AACrD,YAAI,CAAC;AACH,oBAAU,CAAC;AAGb,YAAI,OAAO,IAAI,SAAS;AAAA,UACtB,MAAM,KAAK;AAAA,UACX,MAAM,QAAQ;AAAA,UACd,SAAS,QAAQ,WAAW;AAAA,UAC5B,SAAS,QAAQ,WAAW,KAAK,KAAK,KAAK,YAAY;AAAA,UACvD,YAAY,QAAQ,WAAW,QAAQ,cAAc;AAAA,UACrD,OAAO,KAAK,EAAE,QAAQ;AAAA,QACxB,CAAC;AAED,YAAI,QAAQ,KAAK,EAAE,WAAW;AAC9B,YAAI,MAAM,KAAK,EAAE,IAAI,IAAIJ,IAAG,CAAC,CAAC;AAC9B,mBAAS;AACP,cAAI,OAAO,IAAIA,IAAG,KAAK,SAAS,KAAK,CAAC;AACtC,cAAI,KAAK,IAAI,GAAG,IAAI;AAClB;AAEF,eAAK,MAAM,CAAC;AACZ,iBAAO,KAAK,eAAe,IAAI;AAAA,QACjC;AAAA,MACF;AAEA,MAAAG,IAAG,UAAU,eAAe,SAAS,aAAa,KAAK,WAAW;AAChE,YAAI,QAAQ,IAAI,WAAW,IAAI,IAAI,KAAK,EAAE,UAAU;AACpD,YAAI,QAAQ;AACV,gBAAM,IAAI,MAAM,KAAK;AACvB,YAAI,CAAC,aAAa,IAAI,IAAI,KAAK,CAAC,KAAK;AACnC,iBAAO,IAAI,IAAI,KAAK,CAAC;AAAA;AAErB,iBAAO;AAAA,MACX;AAEA,MAAAA,IAAG,UAAU,OAAO,SAASE,MAAK,KAAK,KAAK,KAAK,SAAS;AACxD,YAAI,OAAO,QAAQ,UAAU;AAC3B,oBAAU;AACV,gBAAM;AAAA,QACR;AACA,YAAI,CAAC;AACH,oBAAU,CAAC;AAEb,cAAM,KAAK,eAAe,KAAK,GAAG;AAClC,cAAM,KAAK,aAAa,IAAIL,IAAG,KAAK,EAAE,CAAC;AAGvC,YAAI,QAAQ,KAAK,EAAE,WAAW;AAC9B,YAAI,OAAO,IAAI,WAAW,EAAE,QAAQ,MAAM,KAAK;AAG/C,YAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;AAGnC,YAAI,OAAO,IAAI,SAAS;AAAA,UACtB,MAAM,KAAK;AAAA,UACX,SAAS;AAAA,UACT;AAAA,UACA,MAAM,QAAQ;AAAA,UACd,SAAS,QAAQ,WAAW;AAAA,QAC9B,CAAC;AAGD,YAAI,MAAM,KAAK,EAAE,IAAI,IAAIA,IAAG,CAAC,CAAC;AAE9B,iBAAS,OAAO,KAAK,QAAQ;AAC3B,cAAI,IAAI,QAAQ,IACd,QAAQ,EAAE,IAAI,IACd,IAAIA,IAAG,KAAK,SAAS,KAAK,EAAE,WAAW,CAAC,CAAC;AAC3C,cAAI,KAAK,aAAa,GAAG,IAAI;AAC7B,cAAI,EAAE,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,GAAG,KAAK;AAClC;AAEF,cAAI,KAAK,KAAK,EAAE,IAAI,CAAC;AACrB,cAAI,GAAG,WAAW;AAChB;AAEF,cAAI,MAAM,GAAG,KAAK;AAClB,cAAI,IAAI,IAAI,KAAK,KAAK,CAAC;AACvB,cAAI,EAAE,KAAK,CAAC,MAAM;AAChB;AAEF,cAAI,IAAI,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,WAAW,CAAC,EAAE,KAAK,GAAG,CAAC;AAC5D,cAAI,EAAE,KAAK,KAAK,CAAC;AACjB,cAAI,EAAE,KAAK,CAAC,MAAM;AAChB;AAEF,cAAI,iBAAiB,GAAG,KAAK,EAAE,MAAM,IAAI,IAAI,MACxB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;AAG5C,cAAI,QAAQ,aAAa,EAAE,IAAI,KAAK,EAAE,IAAI,GAAG;AAC3C,gBAAI,KAAK,EAAE,IAAI,CAAC;AAChB,6BAAiB;AAAA,UACnB;AAEA,iBAAO,IAAI,UAAU,EAAE,GAAM,GAAM,cAA6B,CAAC;AAAA,QACnE;AAAA,MACF;AAEA,MAAAG,IAAG,UAAU,SAAS,SAASG,QAAO,KAAK,WAAW,KAAK,KAAK;AAC9D,cAAM,KAAK,aAAa,IAAIN,IAAG,KAAK,EAAE,CAAC;AACvC,cAAM,KAAK,cAAc,KAAK,GAAG;AACjC,oBAAY,IAAI,UAAU,WAAW,KAAK;AAG1C,YAAI,IAAI,UAAU;AAClB,YAAI,IAAI,UAAU;AAClB,YAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK;AACpC,iBAAO;AACT,YAAI,EAAE,KAAK,CAAC,IAAI,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK;AACpC,iBAAO;AAGT,YAAI,OAAO,EAAE,KAAK,KAAK,CAAC;AACxB,YAAI,KAAK,KAAK,IAAI,GAAG,EAAE,KAAK,KAAK,CAAC;AAClC,YAAI,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC;AAChC,YAAI;AAEJ,YAAI,CAAC,KAAK,MAAM,eAAe;AAC7B,cAAI,KAAK,EAAE,OAAO,IAAI,IAAI,UAAU,GAAG,EAAE;AACzC,cAAI,EAAE,WAAW;AACf,mBAAO;AAET,iBAAO,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM;AAAA,QAC1C;AAKA,YAAI,KAAK,EAAE,QAAQ,IAAI,IAAI,UAAU,GAAG,EAAE;AAC1C,YAAI,EAAE,WAAW;AACf,iBAAO;AAKT,eAAO,EAAE,OAAO,CAAC;AAAA,MACnB;AAEA,MAAAG,IAAG,UAAU,gBAAgB,SAAS,KAAK,WAAW,GAAG,KAAK;AAC5D,QAAAD,SAAQ,IAAI,OAAO,GAAG,0CAA0C;AAChE,oBAAY,IAAI,UAAU,WAAW,GAAG;AAExC,YAAI,IAAI,KAAK;AACb,YAAI,IAAI,IAAIF,IAAG,GAAG;AAClB,YAAI,IAAI,UAAU;AAClB,YAAI,IAAI,UAAU;AAGlB,YAAI,SAAS,IAAI;AACjB,YAAI,cAAc,KAAK;AACvB,YAAI,EAAE,IAAI,KAAK,MAAM,EAAE,KAAK,KAAK,MAAM,CAAC,CAAC,KAAK,KAAK;AACjD,gBAAM,IAAI,MAAM,sCAAsC;AAGxD,YAAI;AACF,cAAI,KAAK,MAAM,WAAW,EAAE,IAAI,KAAK,MAAM,CAAC,GAAG,MAAM;AAAA;AAErD,cAAI,KAAK,MAAM,WAAW,GAAG,MAAM;AAErC,YAAI,OAAO,UAAU,EAAE,KAAK,CAAC;AAC7B,YAAI,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,KAAK,CAAC;AAClC,YAAI,KAAK,EAAE,IAAI,IAAI,EAAE,KAAK,CAAC;AAI3B,eAAO,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE;AAAA,MAChC;AAEA,MAAAG,IAAG,UAAU,sBAAsB,SAAS,GAAG,WAAW,GAAG,KAAK;AAChE,oBAAY,IAAI,UAAU,WAAW,GAAG;AACxC,YAAI,UAAU,kBAAkB;AAC9B,iBAAO,UAAU;AAEnB,iBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,cAAI;AACJ,cAAI;AACF,qBAAS,KAAK,cAAc,GAAG,WAAW,CAAC;AAAA,UAC7C,SAASI,IAAP;AACA;AAAA,UACF;AAEA,cAAI,OAAO,GAAG,CAAC;AACb,mBAAO;AAAA,QACX;AACA,cAAM,IAAI,MAAM,sCAAsC;AAAA,MACxD;AAAA;AAAA;;;AClPA,MAAAC,eAAA;AAAA;AAAA;AAEA,UAAI,QAAQ;AACZ,UAAIC,UAAS,MAAM;AACnB,UAAI,aAAa,MAAM;AACvB,UAAI,iBAAiB,MAAM;AAW3B,eAAS,QAAQ,OAAO,QAAQ;AAC9B,aAAK,QAAQ;AACb,aAAK,UAAU,WAAW,OAAO,MAAM;AACvC,YAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,eAAK,OAAO,OAAO;AAAA;AAEnB,eAAK,YAAY,WAAW,OAAO,GAAG;AAAA,MAC1C;AAEA,cAAQ,aAAa,SAAS,WAAW,OAAO,KAAK;AACnD,YAAI,eAAe;AACjB,iBAAO;AACT,eAAO,IAAI,QAAQ,OAAO,EAAE,IAAS,CAAC;AAAA,MACxC;AAEA,cAAQ,aAAa,SAAS,WAAW,OAAO,QAAQ;AACtD,YAAI,kBAAkB;AACpB,iBAAO;AACT,eAAO,IAAI,QAAQ,OAAO,EAAE,OAAe,CAAC;AAAA,MAC9C;AAEA,cAAQ,UAAU,SAAS,SAAS,SAAS;AAC3C,eAAO,KAAK;AAAA,MACd;AAEA,qBAAe,SAAS,YAAY,SAAS,WAAW;AACtD,eAAO,KAAK,MAAM,YAAY,KAAK,IAAI,CAAC;AAAA,MAC1C,CAAC;AAED,qBAAe,SAAS,OAAO,SAAS,MAAM;AAC5C,YAAI,KAAK;AACP,iBAAO,KAAK,MAAM,YAAY,KAAK,SAAS;AAC9C,eAAO,KAAK,MAAM,EAAE,IAAI,KAAK,KAAK,CAAC;AAAA,MACrC,CAAC;AAED,qBAAe,SAAS,aAAa,SAAS,YAAY;AACxD,YAAI,QAAQ,KAAK;AACjB,YAAI,OAAO,KAAK,KAAK;AACrB,YAAI,SAAS,MAAM,iBAAiB;AAEpC,YAAI,IAAI,KAAK,MAAM,GAAG,MAAM,cAAc;AAC1C,UAAE,MAAM;AACR,UAAE,WAAW;AACb,UAAE,WAAW;AAEb,eAAO;AAAA,MACT,CAAC;AAED,qBAAe,SAAS,QAAQ,SAAS,OAAO;AAC9C,eAAO,KAAK,MAAM,UAAU,KAAK,UAAU,CAAC;AAAA,MAC9C,CAAC;AAED,qBAAe,SAAS,QAAQ,SAAS,OAAO;AAC9C,eAAO,KAAK,MAAM,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,EAAE,OAAO;AAAA,MACxD,CAAC;AAED,qBAAe,SAAS,iBAAiB,SAAS,gBAAgB;AAChE,eAAO,KAAK,KAAK,EAAE,MAAM,KAAK,MAAM,cAAc;AAAA,MACpD,CAAC;AAED,cAAQ,UAAU,OAAO,SAASC,MAAK,SAAS;AAC9C,QAAAD,QAAO,KAAK,SAAS,yBAAyB;AAC9C,eAAO,KAAK,MAAM,KAAK,SAAS,IAAI;AAAA,MACtC;AAEA,cAAQ,UAAU,SAAS,SAASE,QAAO,SAAS,KAAK;AACvD,eAAO,KAAK,MAAM,OAAO,SAAS,KAAK,IAAI;AAAA,MAC7C;AAEA,cAAQ,UAAU,YAAY,SAAS,UAAU,KAAK;AACpD,QAAAF,QAAO,KAAK,SAAS,wBAAwB;AAC7C,eAAO,MAAM,OAAO,KAAK,OAAO,GAAG,GAAG;AAAA,MACxC;AAEA,cAAQ,UAAU,YAAY,SAAS,UAAU,KAAK;AACpD,eAAO,MAAM,OAAO,KAAK,SAAS,GAAG,GAAG;AAAA,MAC1C;AAEA,aAAO,UAAU;AAAA;AAAA;;;AC9FjB,MAAAG,qBAAA;AAAA;AAAA;AAEA,UAAIC,MAAK;AACT,UAAI,QAAQ;AACZ,UAAIC,UAAS,MAAM;AACnB,UAAI,iBAAiB,MAAM;AAC3B,UAAI,aAAa,MAAM;AAUvB,eAAS,UAAU,OAAO,KAAK;AAC7B,aAAK,QAAQ;AAEb,YAAI,OAAO,QAAQ;AACjB,gBAAM,WAAW,GAAG;AAEtB,YAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,gBAAM;AAAA,YACJ,GAAG,IAAI,MAAM,GAAG,MAAM,cAAc;AAAA,YACpC,GAAG,IAAI,MAAM,MAAM,cAAc;AAAA,UACnC;AAAA,QACF;AAEA,QAAAA,QAAO,IAAI,KAAK,IAAI,GAAG,0BAA0B;AAEjD,YAAI,MAAM,QAAQ,IAAI,CAAC;AACrB,eAAK,KAAK,IAAI;AAChB,YAAI,IAAI,aAAaD;AACnB,eAAK,KAAK,IAAI;AAEhB,aAAK,YAAY,MAAM,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI;AACpD,aAAK,YAAY,MAAM,QAAQ,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI;AAAA,MACtD;AAEA,qBAAe,WAAW,KAAK,SAAS,IAAI;AAC1C,eAAO,KAAK,MAAM,UAAU,KAAK,SAAS,CAAC;AAAA,MAC7C,CAAC;AAED,qBAAe,WAAW,KAAK,SAAS,IAAI;AAC1C,eAAO,KAAK,MAAM,YAAY,KAAK,SAAS,CAAC;AAAA,MAC/C,CAAC;AAED,qBAAe,WAAW,YAAY,SAAS,WAAW;AACxD,eAAO,KAAK,MAAM,YAAY,KAAK,EAAE,CAAC;AAAA,MACxC,CAAC;AAED,qBAAe,WAAW,YAAY,SAAS,WAAW;AACxD,eAAO,KAAK,MAAM,UAAU,KAAK,EAAE,CAAC;AAAA,MACtC,CAAC;AAED,gBAAU,UAAU,UAAU,SAAS,UAAU;AAC/C,eAAO,KAAK,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC;AAAA,MAC/C;AAEA,gBAAU,UAAU,QAAQ,SAASE,SAAQ;AAC3C,eAAO,MAAM,OAAO,KAAK,QAAQ,GAAG,KAAK,EAAE,YAAY;AAAA,MACzD;AAEA,aAAO,UAAU;AAAA;AAAA;;;AChEjB;AAAA;AAAA;AAEA,UAAI,OAAO;AACX,UAAIC,UAAS;AACb,UAAI,QAAQ;AACZ,UAAIC,UAAS,MAAM;AACnB,UAAI,aAAa,MAAM;AACvB,UAAI,UAAU;AACd,UAAI,YAAY;AAEhB,eAAS,MAAM,OAAO;AACpB,QAAAA,QAAO,UAAU,WAAW,iCAAiC;AAE7D,YAAI,EAAE,gBAAgB;AACpB,iBAAO,IAAI,MAAM,KAAK;AAExB,gBAAQD,QAAO,OAAO;AACtB,aAAK,QAAQ;AACb,aAAK,IAAI,MAAM;AACf,aAAK,EAAE,WAAW,MAAM,EAAE,UAAU,IAAI,CAAC;AAEzC,aAAK,aAAa,MAAM,MAAM,EAAE;AAChC,aAAK,iBAAiB,KAAK,KAAK,MAAM,EAAE,UAAU,IAAI,CAAC;AACvD,aAAK,OAAO,KAAK;AAAA,MACnB;AAEA,aAAO,UAAU;AAOjB,YAAM,UAAU,OAAO,SAASE,MAAK,SAAS,QAAQ;AACpD,kBAAU,WAAW,OAAO;AAC5B,YAAI,MAAM,KAAK,cAAc,MAAM;AACnC,YAAI,IAAI,KAAK,QAAQ,IAAI,cAAc,GAAG,OAAO;AACjD,YAAI,IAAI,KAAK,EAAE,IAAI,CAAC;AACpB,YAAI,WAAW,KAAK,YAAY,CAAC;AACjC,YAAI,KAAK,KAAK,QAAQ,UAAU,IAAI,SAAS,GAAG,OAAO,EACpD,IAAI,IAAI,KAAK,CAAC;AACjB,YAAI,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,KAAK,MAAM,CAAC;AACnC,eAAO,KAAK,cAAc,EAAE,GAAM,GAAM,SAAmB,CAAC;AAAA,MAC9D;AAQA,YAAM,UAAU,SAAS,SAASC,QAAO,SAAS,KAAK,KAAK;AAC1D,kBAAU,WAAW,OAAO;AAC5B,cAAM,KAAK,cAAc,GAAG;AAC5B,YAAI,MAAM,KAAK,cAAc,GAAG;AAChC,YAAI,IAAI,KAAK,QAAQ,IAAI,SAAS,GAAG,IAAI,SAAS,GAAG,OAAO;AAC5D,YAAI,KAAK,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;AAC3B,YAAI,UAAU,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1C,eAAO,QAAQ,GAAG,EAAE;AAAA,MACtB;AAEA,YAAM,UAAU,UAAU,SAAS,UAAU;AAC3C,YAAIC,QAAO,KAAK,KAAK;AACrB,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ;AACpC,UAAAA,MAAK,OAAO,UAAU,EAAE;AAC1B,eAAO,MAAM,UAAUA,MAAK,OAAO,CAAC,EAAE,KAAK,KAAK,MAAM,CAAC;AAAA,MACzD;AAEA,YAAM,UAAU,gBAAgB,SAAS,cAAc,KAAK;AAC1D,eAAO,QAAQ,WAAW,MAAM,GAAG;AAAA,MACrC;AAEA,YAAM,UAAU,gBAAgB,SAAS,cAAc,QAAQ;AAC7D,eAAO,QAAQ,WAAW,MAAM,MAAM;AAAA,MACxC;AAEA,YAAM,UAAU,gBAAgB,SAAS,cAAc,KAAK;AAC1D,YAAI,eAAe;AACjB,iBAAO;AACT,eAAO,IAAI,UAAU,MAAM,GAAG;AAAA,MAChC;AAUA,YAAM,UAAU,cAAc,SAAS,YAAY,OAAO;AACxD,YAAI,MAAM,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,cAAc;AACxD,YAAI,KAAK,iBAAiB,MAAM,MAAM,KAAK,EAAE,MAAM,IAAI,MAAO;AAC9D,eAAO;AAAA,MACT;AAEA,YAAM,UAAU,cAAc,SAAS,YAAY,OAAO;AACxD,gBAAQ,MAAM,WAAW,KAAK;AAE9B,YAAI,SAAS,MAAM,SAAS;AAC5B,YAAI,SAAS,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,MAAM,UAAU,CAAC,GAAI;AAChE,YAAI,UAAU,MAAM,UAAU,SAAU;AAExC,YAAI,IAAI,MAAM,UAAU,MAAM;AAC9B,eAAO,KAAK,MAAM,WAAW,GAAG,MAAM;AAAA,MACxC;AAEA,YAAM,UAAU,YAAY,SAAS,UAAU,KAAK;AAClD,eAAO,IAAI,QAAQ,MAAM,KAAK,cAAc;AAAA,MAC9C;AAEA,YAAM,UAAU,YAAY,SAAS,UAAU,OAAO;AACpD,eAAO,MAAM,UAAU,KAAK;AAAA,MAC9B;AAEA,YAAM,UAAU,UAAU,SAAS,QAAQ,KAAK;AAC9C,eAAO,eAAe,KAAK;AAAA,MAC7B;AAAA;AAAA;;;ACrHA;AAAA;AAAA;AAEA,UAAIC,YAAW;AAEf,MAAAA,UAAS,UAAU,kBAA2B;AAC9C,MAAAA,UAAS,QAAQ;AACjB,MAAAA,UAAS,OAAO;AAChB,MAAAA,UAAS,QAAQ;AACjB,MAAAA,UAAS,SAAS;AAGlB,MAAAA,UAAS,KAAK;AACd,MAAAA,UAAS,QAAQ;AAAA;AAAA;;;ACZjB;AAAA;AAAC,OAAC,SAAU,cAAc;AACxB;AAkDA,YAAI,WACF,YAAY,8CACZ,WAAW,KAAK,MAChB,YAAY,KAAK,OAEjB,iBAAiB,sBACjB,gBAAgB,iBAAiB,0DAEjC,OAAO,MACP,WAAW,IACX,mBAAmB,kBAEnB,WAAW,CAAC,GAAG,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,IAAI,GACjF,YAAY,KAKZ,MAAM;AAMR,iBAAS,MAAM,cAAc;AAC3B,cAAI,KAAK,aAAa,cACpB,IAAIC,WAAU,YAAY,EAAE,aAAaA,YAAW,UAAU,MAAM,SAAS,KAAK,GAClFC,OAAM,IAAID,WAAU,CAAC,GAUrB,iBAAiB,IAajB,gBAAgB,GAMhB,aAAa,IAIb,aAAa,IAMb,UAAU,MAKV,UAAU,KAGV,SAAS,OAkBT,cAAc,GAId,gBAAgB,GAGhB,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,oBAAoB;AAAA,YACpB,gBAAgB;AAAA,YAChB,kBAAkB;AAAA,YAClB,mBAAmB;AAAA,YACnB,wBAAwB;AAAA,YACxB,QAAQ;AAAA,UACV,GAKA,WAAW,wCACX,iCAAiC;AAgBnC,mBAASA,WAAU,GAAG,GAAG;AACvB,gBAAI,UAAU,GAAG,aAAa,GAAG,GAAG,OAAO,KAAK,KAC9C,IAAI;AAGN,gBAAI,EAAE,aAAaA;AAAY,qBAAO,IAAIA,WAAU,GAAG,CAAC;AAExD,gBAAI,KAAK,MAAM;AAEb,kBAAI,KAAK,EAAE,iBAAiB,MAAM;AAChC,kBAAE,IAAI,EAAE;AAER,oBAAI,CAAC,EAAE,KAAK,EAAE,IAAI,SAAS;AACzB,oBAAE,IAAI,EAAE,IAAI;AAAA,gBACd,WAAW,EAAE,IAAI,SAAS;AACxB,oBAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,gBAChB,OAAO;AACL,oBAAE,IAAI,EAAE;AACR,oBAAE,IAAI,EAAE,EAAE,MAAM;AAAA,gBAClB;AAEA;AAAA,cACF;AAEA,mBAAK,QAAQ,OAAO,KAAK,aAAa,IAAI,KAAK,GAAG;AAGhD,kBAAE,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG,MAAM;AAGjC,oBAAI,MAAM,CAAC,CAAC,GAAG;AACb,uBAAK,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI;AAAI;AAEzC,sBAAI,IAAI,SAAS;AACf,sBAAE,IAAI,EAAE,IAAI;AAAA,kBACd,OAAO;AACL,sBAAE,IAAI;AACN,sBAAE,IAAI,CAAC,CAAC;AAAA,kBACV;AAEA;AAAA,gBACF;AAEA,sBAAM,OAAO,CAAC;AAAA,cAChB,OAAO;AAEL,oBAAI,CAAC,UAAU,KAAK,MAAM,OAAO,CAAC,CAAC;AAAG,yBAAO,aAAa,GAAG,KAAK,KAAK;AAEvE,kBAAE,IAAI,IAAI,WAAW,CAAC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,MAAM;AAAA,cAC7D;AAGA,mBAAK,IAAI,IAAI,QAAQ,GAAG,KAAK;AAAI,sBAAM,IAAI,QAAQ,KAAK,EAAE;AAG1D,mBAAK,IAAI,IAAI,OAAO,IAAI,KAAK,GAAG;AAG9B,oBAAI,IAAI;AAAG,sBAAI;AACf,qBAAK,CAAC,IAAI,MAAM,IAAI,CAAC;AACrB,sBAAM,IAAI,UAAU,GAAG,CAAC;AAAA,cAC1B,WAAW,IAAI,GAAG;AAGhB,oBAAI,IAAI;AAAA,cACV;AAAA,YAEF,OAAO;AAGL,uBAAS,GAAG,GAAG,SAAS,QAAQ,MAAM;AAItC,kBAAI,KAAK,MAAM,gCAAgC;AAC7C,oBAAI,IAAIA,WAAU,CAAC;AACnB,uBAAO,MAAM,GAAG,iBAAiB,EAAE,IAAI,GAAG,aAAa;AAAA,cACzD;AAEA,oBAAM,OAAO,CAAC;AAEd,kBAAI,QAAQ,OAAO,KAAK,UAAU;AAGhC,oBAAI,IAAI,KAAK;AAAG,yBAAO,aAAa,GAAG,KAAK,OAAO,CAAC;AAEpD,kBAAE,IAAI,IAAI,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,GAAG,MAAM;AAG7C,oBAAIA,WAAU,SAAS,IAAI,QAAQ,aAAa,EAAE,EAAE,SAAS,IAAI;AAC/D,wBAAM,MACJ,gBAAgB,CAAC;AAAA,gBACrB;AAAA,cACF,OAAO;AACL,kBAAE,IAAI,IAAI,WAAW,CAAC,MAAM,MAAM,MAAM,IAAI,MAAM,CAAC,GAAG,MAAM;AAAA,cAC9D;AAEA,yBAAW,SAAS,MAAM,GAAG,CAAC;AAC9B,kBAAI,IAAI;AAIR,mBAAK,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AACnC,oBAAI,SAAS,QAAQ,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG;AAC3C,sBAAI,KAAK,KAAK;AAGZ,wBAAI,IAAI,GAAG;AACT,0BAAI;AACJ;AAAA,oBACF;AAAA,kBACF,WAAW,CAAC,aAAa;AAGvB,wBAAI,OAAO,IAAI,YAAY,MAAM,MAAM,IAAI,YAAY,MACnD,OAAO,IAAI,YAAY,MAAM,MAAM,IAAI,YAAY,IAAI;AACzD,oCAAc;AACd,0BAAI;AACJ,0BAAI;AACJ;AAAA,oBACF;AAAA,kBACF;AAEA,yBAAO,aAAa,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;AAAA,gBAC5C;AAAA,cACF;AAGA,sBAAQ;AACR,oBAAM,YAAY,KAAK,GAAG,IAAI,EAAE,CAAC;AAGjC,mBAAK,IAAI,IAAI,QAAQ,GAAG,KAAK;AAAI,sBAAM,IAAI,QAAQ,KAAK,EAAE;AAAA;AACrD,oBAAI,IAAI;AAAA,YACf;AAGA,iBAAK,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,IAAI;AAAI;AAG1C,iBAAK,MAAM,IAAI,QAAQ,IAAI,WAAW,EAAE,GAAG,MAAM;AAAI;AAErD,gBAAI,MAAM,IAAI,MAAM,GAAG,EAAE,GAAG,GAAG;AAC7B,qBAAO;AAGP,kBAAI,SAASA,WAAU,SACrB,MAAM,OAAO,IAAI,oBAAoB,MAAM,UAAU,CAAC,IAAI;AACxD,sBAAM,MACJ,gBAAiB,EAAE,IAAI,CAAE;AAAA,cAC/B;AAGA,mBAAK,IAAI,IAAI,IAAI,KAAK,SAAS;AAG7B,kBAAE,IAAI,EAAE,IAAI;AAAA,cAGd,WAAW,IAAI,SAAS;AAGtB,kBAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,cAChB,OAAO;AACL,kBAAE,IAAI;AACN,kBAAE,IAAI,CAAC;AAMP,qBAAK,IAAI,KAAK;AACd,oBAAI,IAAI;AAAG,uBAAK;AAEhB,oBAAI,IAAI,KAAK;AACX,sBAAI;AAAG,sBAAE,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;AAEhC,uBAAK,OAAO,UAAU,IAAI,OAAM;AAC9B,sBAAE,EAAE,KAAK,CAAC,IAAI,MAAM,GAAG,KAAK,QAAQ,CAAC;AAAA,kBACvC;AAEA,sBAAI,YAAY,MAAM,IAAI,MAAM,CAAC,GAAG;AAAA,gBACtC,OAAO;AACL,uBAAK;AAAA,gBACP;AAEA,uBAAO,KAAK,OAAO;AAAI;AACvB,kBAAE,EAAE,KAAK,CAAC,GAAG;AAAA,cACf;AAAA,YACF,OAAO;AAGL,gBAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,YAChB;AAAA,UACF;AAMA,UAAAA,WAAU,QAAQ;AAElB,UAAAA,WAAU,WAAW;AACrB,UAAAA,WAAU,aAAa;AACvB,UAAAA,WAAU,aAAa;AACvB,UAAAA,WAAU,cAAc;AACxB,UAAAA,WAAU,gBAAgB;AAC1B,UAAAA,WAAU,kBAAkB;AAC5B,UAAAA,WAAU,kBAAkB;AAC5B,UAAAA,WAAU,kBAAkB;AAC5B,UAAAA,WAAU,mBAAmB;AAC7B,UAAAA,WAAU,SAAS;AAqCnB,UAAAA,WAAU,SAASA,WAAU,MAAM,SAAU,KAAK;AAChD,gBAAI,GAAG;AAEP,gBAAI,OAAO,MAAM;AAEf,kBAAI,OAAO,OAAO,UAAU;AAI1B,oBAAI,IAAI,eAAe,IAAI,gBAAgB,GAAG;AAC5C,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,KAAK,CAAC;AACrB,mCAAiB;AAAA,gBACnB;AAIA,oBAAI,IAAI,eAAe,IAAI,eAAe,GAAG;AAC3C,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,GAAG,CAAC;AACnB,kCAAgB;AAAA,gBAClB;AAMA,oBAAI,IAAI,eAAe,IAAI,gBAAgB,GAAG;AAC5C,sBAAI,IAAI;AACR,sBAAI,KAAK,EAAE,KAAK;AACd,6BAAS,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;AACzB,6BAAS,EAAE,IAAI,GAAG,KAAK,CAAC;AACxB,iCAAa,EAAE;AACf,iCAAa,EAAE;AAAA,kBACjB,OAAO;AACL,6BAAS,GAAG,CAAC,KAAK,KAAK,CAAC;AACxB,iCAAa,EAAE,aAAa,IAAI,IAAI,CAAC,IAAI;AAAA,kBAC3C;AAAA,gBACF;AAKA,oBAAI,IAAI,eAAe,IAAI,OAAO,GAAG;AACnC,sBAAI,IAAI;AACR,sBAAI,KAAK,EAAE,KAAK;AACd,6BAAS,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;AAC1B,6BAAS,EAAE,IAAI,GAAG,KAAK,CAAC;AACxB,8BAAU,EAAE;AACZ,8BAAU,EAAE;AAAA,kBACd,OAAO;AACL,6BAAS,GAAG,CAAC,KAAK,KAAK,CAAC;AACxB,wBAAI,GAAG;AACL,gCAAU,EAAE,UAAU,IAAI,IAAI,CAAC,IAAI;AAAA,oBACrC,OAAO;AACL,4BAAM,MACJ,iBAAiB,IAAI,sBAAsB,CAAC;AAAA,oBAChD;AAAA,kBACF;AAAA,gBACF;AAKA,oBAAI,IAAI,eAAe,IAAI,QAAQ,GAAG;AACpC,sBAAI,IAAI;AACR,sBAAI,MAAM,CAAC,CAAC,GAAG;AACb,wBAAI,GAAG;AACL,0BAAI,OAAO,UAAU,eAAe,WAClC,OAAO,mBAAmB,OAAO,cAAc;AAC/C,iCAAS;AAAA,sBACX,OAAO;AACL,iCAAS,CAAC;AACV,8BAAM,MACJ,iBAAiB,oBAAoB;AAAA,sBACzC;AAAA,oBACF,OAAO;AACL,+BAAS;AAAA,oBACX;AAAA,kBACF,OAAO;AACL,0BAAM,MACJ,iBAAiB,IAAI,yBAAyB,CAAC;AAAA,kBACnD;AAAA,gBACF;AAIA,oBAAI,IAAI,eAAe,IAAI,aAAa,GAAG;AACzC,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,GAAG,CAAC;AACnB,gCAAc;AAAA,gBAChB;AAIA,oBAAI,IAAI,eAAe,IAAI,eAAe,GAAG;AAC3C,sBAAI,IAAI;AACR,2BAAS,GAAG,GAAG,KAAK,CAAC;AACrB,kCAAgB;AAAA,gBAClB;AAIA,oBAAI,IAAI,eAAe,IAAI,QAAQ,GAAG;AACpC,sBAAI,IAAI;AACR,sBAAI,OAAO,KAAK;AAAU,6BAAS;AAAA;AAC9B,0BAAM,MACT,iBAAiB,IAAI,qBAAqB,CAAC;AAAA,gBAC/C;AAIA,oBAAI,IAAI,eAAe,IAAI,UAAU,GAAG;AACtC,sBAAI,IAAI;AAIR,sBAAI,OAAO,KAAK,YAAY,CAAC,wBAAwB,KAAK,CAAC,GAAG;AAC5D,qDAAiC,EAAE,MAAM,GAAG,EAAE,KAAK;AACnD,+BAAW;AAAA,kBACb,OAAO;AACL,0BAAM,MACJ,iBAAiB,IAAI,eAAe,CAAC;AAAA,kBACzC;AAAA,gBACF;AAAA,cAEF,OAAO;AAGL,sBAAM,MACJ,iBAAiB,sBAAsB,GAAG;AAAA,cAC9C;AAAA,YACF;AAEA,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA,gBAAgB,CAAC,YAAY,UAAU;AAAA,cACvC,OAAO,CAAC,SAAS,OAAO;AAAA,cACxB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAYA,UAAAA,WAAU,cAAc,SAAU,GAAG;AACnC,gBAAI,CAAC,KAAK,EAAE,iBAAiB;AAAM,qBAAO;AAC1C,gBAAI,CAACA,WAAU;AAAO,qBAAO;AAE7B,gBAAI,GAAG,GACL,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE;AAER;AAAK,kBAAI,CAAC,EAAE,SAAS,KAAK,CAAC,KAAK,kBAAkB;AAEhD,qBAAK,MAAM,KAAK,MAAM,OAAO,KAAK,CAAC,OAAO,KAAK,OAAO,MAAM,UAAU,CAAC,GAAG;AAGxE,sBAAI,EAAE,OAAO,GAAG;AACd,wBAAI,MAAM,KAAK,EAAE,WAAW;AAAG,6BAAO;AACtC,0BAAM;AAAA,kBACR;AAGA,uBAAK,IAAI,KAAK;AACd,sBAAI,IAAI;AAAG,yBAAK;AAIhB,sBAAI,OAAO,EAAE,EAAE,EAAE,UAAU,GAAG;AAE5B,yBAAK,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC7B,0BAAI,EAAE;AACN,0BAAI,IAAI,KAAK,KAAK,QAAQ,MAAM,UAAU,CAAC;AAAG,8BAAM;AAAA,oBACtD;AAGA,wBAAI,MAAM;AAAG,6BAAO;AAAA,kBACtB;AAAA,gBACF;AAAA,cAGF,WAAW,MAAM,QAAQ,MAAM,SAAS,MAAM,QAAQ,MAAM,KAAK,MAAM,KAAK;AAC1E,uBAAO;AAAA,cACT;AAEA,kBAAM,MACH,iBAAiB,wBAAwB,CAAC;AAAA,UAC/C;AAQA,UAAAA,WAAU,UAAUA,WAAU,MAAM,WAAY;AAC9C,mBAAO,SAAS,WAAW,EAAE,EAAE;AAAA,UACjC;AAQA,UAAAA,WAAU,UAAUA,WAAU,MAAM,WAAY;AAC9C,mBAAO,SAAS,WAAW,EAAE,EAAE;AAAA,UACjC;AAaA,UAAAA,WAAU,SAAU,WAAY;AAC9B,gBAAI,UAAU;AAMd,gBAAI,iBAAkB,KAAK,OAAO,IAAI,UAAW,UAC9C,WAAY;AAAE,qBAAO,UAAU,KAAK,OAAO,IAAI,OAAO;AAAA,YAAG,IACzD,WAAY;AAAE,sBAAS,KAAK,OAAO,IAAI,aAAa,KAAK,WACxD,KAAK,OAAO,IAAI,UAAW;AAAA,YAAI;AAEnC,mBAAO,SAAU,IAAI;AACnB,kBAAI,GAAG,GAAG,GAAG,GAAG,GACd,IAAI,GACJ,IAAI,CAAC,GACL,OAAO,IAAIA,WAAUC,IAAG;AAE1B,kBAAI,MAAM;AAAM,qBAAK;AAAA;AAChB,yBAAS,IAAI,GAAG,GAAG;AAExB,kBAAI,SAAS,KAAK,QAAQ;AAE1B,kBAAI,QAAQ;AAGV,oBAAI,OAAO,iBAAiB;AAE1B,sBAAI,OAAO,gBAAgB,IAAI,YAAY,KAAK,CAAC,CAAC;AAElD,yBAAO,IAAI,KAAI;AAQb,wBAAI,EAAE,KAAK,UAAW,EAAE,IAAI,OAAO;AAMnC,wBAAI,KAAK,MAAM;AACb,0BAAI,OAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC;AAC7C,wBAAE,KAAK,EAAE;AACT,wBAAE,IAAI,KAAK,EAAE;AAAA,oBACf,OAAO;AAIL,wBAAE,KAAK,IAAI,IAAI;AACf,2BAAK;AAAA,oBACP;AAAA,kBACF;AACA,sBAAI,IAAI;AAAA,gBAGV,WAAW,OAAO,aAAa;AAG7B,sBAAI,OAAO,YAAY,KAAK,CAAC;AAE7B,yBAAO,IAAI,KAAI;AAMb,yBAAM,EAAE,KAAK,MAAM,kBAAoB,EAAE,IAAI,KAAK,gBAC9C,EAAE,IAAI,KAAK,aAAgB,EAAE,IAAI,KAAK,YACtC,EAAE,IAAI,MAAM,OAAO,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI;AAE9C,wBAAI,KAAK,MAAM;AACb,6BAAO,YAAY,CAAC,EAAE,KAAK,GAAG,CAAC;AAAA,oBACjC,OAAO;AAGL,wBAAE,KAAK,IAAI,IAAI;AACf,2BAAK;AAAA,oBACP;AAAA,kBACF;AACA,sBAAI,IAAI;AAAA,gBACV,OAAO;AACL,2BAAS;AACT,wBAAM,MACJ,iBAAiB,oBAAoB;AAAA,gBACzC;AAAA,cACF;AAGA,kBAAI,CAAC,QAAQ;AAEX,uBAAO,IAAI,KAAI;AACb,sBAAI,eAAe;AACnB,sBAAI,IAAI;AAAM,sBAAE,OAAO,IAAI;AAAA,gBAC7B;AAAA,cACF;AAEA,kBAAI,EAAE,EAAE;AACR,oBAAM;AAGN,kBAAI,KAAK,IAAI;AACX,oBAAI,SAAS,WAAW;AACxB,kBAAE,KAAK,UAAU,IAAI,CAAC,IAAI;AAAA,cAC5B;AAGA,qBAAO,EAAE,OAAO,GAAG,EAAE,IAAI,GAAG;AAAI;AAGhC,kBAAI,IAAI,GAAG;AACT,oBAAI,CAAC,IAAI,CAAC;AAAA,cACZ,OAAO;AAGL,qBAAK,IAAI,IAAK,EAAE,OAAO,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,KAAK;AAAS;AAGxD,qBAAK,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAG5C,oBAAI,IAAI;AAAU,uBAAK,WAAW;AAAA,cACpC;AAEA,mBAAK,IAAI;AACT,mBAAK,IAAI;AACT,qBAAO;AAAA,YACT;AAAA,UACF,EAAG;AAQH,UAAAD,WAAU,MAAM,WAAY;AAC1B,gBAAI,IAAI,GACN,OAAO,WACP,MAAM,IAAIA,WAAU,KAAK,EAAE;AAC7B,mBAAO,IAAI,KAAK;AAAS,oBAAM,IAAI,KAAK,KAAK,IAAI;AACjD,mBAAO;AAAA,UACT;AAOA,wBAAe,WAAY;AACzB,gBAAI,UAAU;AAOd,qBAAS,UAAU,KAAK,QAAQ,SAAS,UAAU;AACjD,kBAAI,GACF,MAAM,CAAC,CAAC,GACR,MACA,IAAI,GACJ,MAAM,IAAI;AAEZ,qBAAO,IAAI,OAAM;AACf,qBAAK,OAAO,IAAI,QAAQ,QAAQ,IAAI,SAAS;AAAO;AAEpD,oBAAI,MAAM,SAAS,QAAQ,IAAI,OAAO,GAAG,CAAC;AAE1C,qBAAK,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAE/B,sBAAI,IAAI,KAAK,UAAU,GAAG;AACxB,wBAAI,IAAI,IAAI,MAAM;AAAM,0BAAI,IAAI,KAAK;AACrC,wBAAI,IAAI,MAAM,IAAI,KAAK,UAAU;AACjC,wBAAI,MAAM;AAAA,kBACZ;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO,IAAI,QAAQ;AAAA,YACrB;AAKA,mBAAO,SAAU,KAAK,QAAQ,SAASE,OAAM,kBAAkB;AAC7D,kBAAI,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAC/B,IAAI,IAAI,QAAQ,GAAG,GACnB,KAAK,gBACL,KAAK;AAGP,kBAAI,KAAK,GAAG;AACV,oBAAI;AAGJ,gCAAgB;AAChB,sBAAM,IAAI,QAAQ,KAAK,EAAE;AACzB,oBAAI,IAAIF,WAAU,MAAM;AACxB,oBAAI,EAAE,IAAI,IAAI,SAAS,CAAC;AACxB,gCAAgB;AAKhB,kBAAE,IAAI;AAAA,kBAAU,aAAa,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG;AAAA,kBACxD;AAAA,kBAAI;AAAA,kBAAS;AAAA,gBAAO;AACrB,kBAAE,IAAI,EAAE,EAAE;AAAA,cACZ;AAIA,mBAAK,UAAU,KAAK,QAAQ,SAAS,oBACjC,WAAW,UAAU,YACrB,WAAW,SAAS,SAAS;AAGjC,kBAAI,IAAI,GAAG;AAGX,qBAAO,GAAG,EAAE,MAAM,GAAG,GAAG,IAAI;AAAE;AAG9B,kBAAI,CAAC,GAAG;AAAI,uBAAO,SAAS,OAAO,CAAC;AAGpC,kBAAI,IAAI,GAAG;AACT,kBAAE;AAAA,cACJ,OAAO;AACL,kBAAE,IAAI;AACN,kBAAE,IAAI;AAGN,kBAAE,IAAIE;AACN,oBAAI,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO;AAC7B,qBAAK,EAAE;AACP,oBAAI,EAAE;AACN,oBAAI,EAAE;AAAA,cACR;AAKA,kBAAI,IAAI,KAAK;AAGb,kBAAI,GAAG;AAIP,kBAAI,UAAU;AACd,kBAAI,KAAK,IAAI,KAAK,GAAG,IAAI,MAAM;AAE/B,kBAAI,KAAK,KAAK,KAAK,QAAQ,OAAO,MAAM,KAAK,OAAO,EAAE,IAAI,IAAI,IAAI,MAC1D,IAAI,KAAK,KAAK,MAAK,MAAM,KAAK,KAAK,MAAM,KAAK,GAAG,IAAI,KAAK,KAC3D,OAAO,EAAE,IAAI,IAAI,IAAI;AAK5B,kBAAI,IAAI,KAAK,CAAC,GAAG,IAAI;AAGnB,sBAAM,IAAI,aAAa,SAAS,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,OAAO,CAAC,CAAC,IAAI,SAAS,OAAO,CAAC;AAAA,cACzF,OAAO;AAGL,mBAAG,SAAS;AAGZ,oBAAI,GAAG;AAGL,uBAAK,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,WAAU;AACpC,uBAAG,KAAK;AAER,wBAAI,CAAC,GAAG;AACN,wBAAE;AACF,2BAAK,CAAC,CAAC,EAAE,OAAO,EAAE;AAAA,oBACpB;AAAA,kBACF;AAAA,gBACF;AAGA,qBAAK,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAE;AAAI;AAG9B,qBAAK,IAAI,GAAG,MAAM,IAAI,KAAK,GAAG,OAAO,SAAS,OAAO,GAAG,IAAI;AAAE;AAG9D,sBAAM,aAAa,KAAK,GAAG,SAAS,OAAO,CAAC,CAAC;AAAA,cAC/C;AAGA,qBAAO;AAAA,YACT;AAAA,UACF,EAAG;AAIH,gBAAO,WAAY;AAGjB,qBAAS,SAAS,GAAG,GAAG,MAAM;AAC5B,kBAAI,GAAG,MAAM,KAAK,KAChB,QAAQ,GACR,IAAI,EAAE,QACN,MAAM,IAAI,WACV,MAAM,IAAI,YAAY;AAExB,mBAAK,IAAI,EAAE,MAAM,GAAG,OAAM;AACxB,sBAAM,EAAE,KAAK;AACb,sBAAM,EAAE,KAAK,YAAY;AACzB,oBAAI,MAAM,MAAM,MAAM;AACtB,uBAAO,MAAM,MAAQ,IAAI,YAAa,YAAa;AACnD,yBAAS,OAAO,OAAO,MAAM,IAAI,YAAY,KAAK,MAAM;AACxD,kBAAE,KAAK,OAAO;AAAA,cAChB;AAEA,kBAAI;AAAO,oBAAI,CAAC,KAAK,EAAE,OAAO,CAAC;AAE/B,qBAAO;AAAA,YACT;AAEA,qBAASC,SAAQ,GAAG,GAAG,IAAI,IAAI;AAC7B,kBAAI,GAAG;AAEP,kBAAI,MAAM,IAAI;AACZ,sBAAM,KAAK,KAAK,IAAI;AAAA,cACtB,OAAO;AAEL,qBAAK,IAAI,MAAM,GAAG,IAAI,IAAI,KAAK;AAE7B,sBAAI,EAAE,MAAM,EAAE,IAAI;AAChB,0BAAM,EAAE,KAAK,EAAE,KAAK,IAAI;AACxB;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO;AAAA,YACT;AAEA,qBAAS,SAAS,GAAG,GAAG,IAAI,MAAM;AAChC,kBAAI,IAAI;AAGR,qBAAO,QAAO;AACZ,kBAAE,OAAO;AACT,oBAAI,EAAE,MAAM,EAAE,MAAM,IAAI;AACxB,kBAAE,MAAM,IAAI,OAAO,EAAE,MAAM,EAAE;AAAA,cAC/B;AAGA,qBAAO,CAAC,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,OAAO,GAAG,CAAC;AAAE;AAAA,YAC/C;AAGA,mBAAO,SAAU,GAAG,GAAG,IAAI,IAAI,MAAM;AACnC,kBAAI,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,OAAO,GAAG,IAAI,KAAK,MAAM,MAAM,IAAI,IAAI,KACnE,IAAI,IACJ,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,IACrB,KAAK,EAAE,GACP,KAAK,EAAE;AAGT,kBAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI;AAElC,uBAAO,IAAIH;AAAA,kBAGV,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,MAGnD,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI;AAAA,gBACzC;AAAA,cACD;AAEA,kBAAI,IAAIA,WAAU,CAAC;AACnB,mBAAK,EAAE,IAAI,CAAC;AACZ,kBAAI,EAAE,IAAI,EAAE;AACZ,kBAAI,KAAK,IAAI;AAEb,kBAAI,CAAC,MAAM;AACT,uBAAO;AACP,oBAAI,SAAS,EAAE,IAAI,QAAQ,IAAI,SAAS,EAAE,IAAI,QAAQ;AACtD,oBAAI,IAAI,WAAW;AAAA,cACrB;AAIA,mBAAK,IAAI,GAAG,GAAG,OAAO,GAAG,MAAM,IAAI;AAAI;AAEvC,kBAAI,GAAG,MAAM,GAAG,MAAM;AAAI;AAE1B,kBAAI,IAAI,GAAG;AACT,mBAAG,KAAK,CAAC;AACT,uBAAO;AAAA,cACT,OAAO;AACL,qBAAK,GAAG;AACR,qBAAK,GAAG;AACR,oBAAI;AACJ,qBAAK;AAIL,oBAAI,UAAU,QAAQ,GAAG,KAAK,EAAE;AAIhC,oBAAI,IAAI,GAAG;AACT,uBAAK,SAAS,IAAI,GAAG,IAAI;AACzB,uBAAK,SAAS,IAAI,GAAG,IAAI;AACzB,uBAAK,GAAG;AACR,uBAAK,GAAG;AAAA,gBACV;AAEA,qBAAK;AACL,sBAAM,GAAG,MAAM,GAAG,EAAE;AACpB,uBAAO,IAAI;AAGX,uBAAO,OAAO,IAAI,IAAI,UAAU;AAAE;AAClC,qBAAK,GAAG,MAAM;AACd,qBAAK,CAAC,CAAC,EAAE,OAAO,EAAE;AAClB,sBAAM,GAAG;AACT,oBAAI,GAAG,MAAM,OAAO;AAAG;AAIvB,mBAAG;AACD,sBAAI;AAGJ,wBAAMG,SAAQ,IAAI,KAAK,IAAI,IAAI;AAG/B,sBAAI,MAAM,GAAG;AAIX,2BAAO,IAAI;AACX,wBAAI,MAAM;AAAM,6BAAO,OAAO,QAAQ,IAAI,MAAM;AAGhD,wBAAI,UAAU,OAAO,GAAG;AAaxB,wBAAI,IAAI,GAAG;AAGT,0BAAI,KAAK;AAAM,4BAAI,OAAO;AAG1B,6BAAO,SAAS,IAAI,GAAG,IAAI;AAC3B,8BAAQ,KAAK;AACb,6BAAO,IAAI;AAMX,6BAAOA,SAAQ,MAAM,KAAK,OAAO,IAAI,KAAK,GAAG;AAC3C;AAGA,iCAAS,MAAM,KAAK,QAAQ,KAAK,IAAI,OAAO,IAAI;AAChD,gCAAQ,KAAK;AACb,8BAAM;AAAA,sBACR;AAAA,oBACF,OAAO;AAML,0BAAI,KAAK,GAAG;AAGV,8BAAM,IAAI;AAAA,sBACZ;AAGA,6BAAO,GAAG,MAAM;AAChB,8BAAQ,KAAK;AAAA,oBACf;AAEA,wBAAI,QAAQ;AAAM,6BAAO,CAAC,CAAC,EAAE,OAAO,IAAI;AAGxC,6BAAS,KAAK,MAAM,MAAM,IAAI;AAC9B,2BAAO,IAAI;AAGX,wBAAI,OAAO,IAAI;AAMb,6BAAOA,SAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,GAAG;AACrC;AAGA,iCAAS,KAAK,KAAK,OAAO,KAAK,IAAI,MAAM,IAAI;AAC7C,+BAAO,IAAI;AAAA,sBACb;AAAA,oBACF;AAAA,kBACF,WAAW,QAAQ,GAAG;AACpB;AACA,0BAAM,CAAC,CAAC;AAAA,kBACV;AAGA,qBAAG,OAAO;AAGV,sBAAI,IAAI,IAAI;AACV,wBAAI,UAAU,GAAG,OAAO;AAAA,kBAC1B,OAAO;AACL,0BAAM,CAAC,GAAG,GAAG;AACb,2BAAO;AAAA,kBACT;AAAA,gBACF,UAAU,OAAO,MAAM,IAAI,MAAM,SAAS;AAE1C,uBAAO,IAAI,MAAM;AAGjB,oBAAI,CAAC,GAAG;AAAI,qBAAG,OAAO,GAAG,CAAC;AAAA,cAC5B;AAEA,kBAAI,QAAQ,MAAM;AAGhB,qBAAK,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAE7C,sBAAM,GAAG,MAAM,EAAE,IAAI,IAAI,IAAI,WAAW,KAAK,GAAG,IAAI,IAAI;AAAA,cAG1D,OAAO;AACL,kBAAE,IAAI;AACN,kBAAE,IAAI,CAAC;AAAA,cACT;AAEA,qBAAO;AAAA,YACT;AAAA,UACF,EAAG;AAYH,mBAAS,OAAO,GAAG,GAAG,IAAI,IAAI;AAC5B,gBAAI,IAAI,GAAG,IAAI,KAAK;AAEpB,gBAAI,MAAM;AAAM,mBAAK;AAAA;AAChB,uBAAS,IAAI,GAAG,CAAC;AAEtB,gBAAI,CAAC,EAAE;AAAG,qBAAO,EAAE,SAAS;AAE5B,iBAAK,EAAE,EAAE;AACT,iBAAK,EAAE;AAEP,gBAAI,KAAK,MAAM;AACb,oBAAM,cAAc,EAAE,CAAC;AACvB,oBAAM,MAAM,KAAK,MAAM,MAAM,MAAM,cAAc,MAAM,cACpD,cAAc,KAAK,EAAE,IACrB,aAAa,KAAK,IAAI,GAAG;AAAA,YAC9B,OAAO;AACL,kBAAI,MAAM,IAAIH,WAAU,CAAC,GAAG,GAAG,EAAE;AAGjC,kBAAI,EAAE;AAEN,oBAAM,cAAc,EAAE,CAAC;AACvB,oBAAM,IAAI;AAOV,kBAAI,MAAM,KAAK,MAAM,MAAM,KAAK,KAAK,KAAK,aAAa;AAGrD,uBAAO,MAAM,GAAG,OAAO,KAAK;AAAM;AAClC,sBAAM,cAAc,KAAK,CAAC;AAAA,cAG5B,OAAO;AACL,qBAAK;AACL,sBAAM,aAAa,KAAK,GAAG,GAAG;AAG9B,oBAAI,IAAI,IAAI,KAAK;AACf,sBAAI,EAAE,IAAI;AAAG,yBAAK,OAAO,KAAK,KAAK,OAAO;AAAI;AAAA,gBAChD,OAAO;AACL,uBAAK,IAAI;AACT,sBAAI,IAAI,GAAG;AACT,wBAAI,IAAI,KAAK;AAAK,6BAAO;AACzB,2BAAO,KAAK,OAAO;AAAI;AAAA,kBACzB;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,mBAAO,EAAE,IAAI,KAAK,KAAK,MAAM,MAAM;AAAA,UACrC;AAIA,mBAAS,SAAS,MAAM,QAAQ;AAC9B,gBAAI,GACF,IAAI,GACJ,IAAI,IAAIA,WAAU,KAAK,EAAE;AAE3B,mBAAO,IAAI,KAAK,QAAQ,KAAK;AAC3B,kBAAI,IAAIA,WAAU,KAAK,EAAE;AAGzB,kBAAI,CAAC,EAAE,GAAG;AACR,oBAAI;AACJ;AAAA,cACF,WAAW,OAAO,KAAK,GAAG,CAAC,GAAG;AAC5B,oBAAI;AAAA,cACN;AAAA,YACF;AAEA,mBAAO;AAAA,UACT;AAOA,mBAAS,UAAU,GAAG,GAAG,GAAG;AAC1B,gBAAI,IAAI,GACN,IAAI,EAAE;AAGR,mBAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI;AAAE;AAGxB,iBAAK,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAGrC,iBAAK,IAAI,IAAI,IAAI,WAAW,KAAK,SAAS;AAGxC,gBAAE,IAAI,EAAE,IAAI;AAAA,YAGd,WAAW,IAAI,SAAS;AAGtB,gBAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,YAChB,OAAO;AACL,gBAAE,IAAI;AACN,gBAAE,IAAI;AAAA,YACR;AAEA,mBAAO;AAAA,UACT;AAIA,yBAAgB,WAAY;AAC1B,gBAAI,aAAa,+BACf,WAAW,eACX,YAAY,eACZ,kBAAkB,sBAClB,mBAAmB;AAErB,mBAAO,SAAU,GAAG,KAAK,OAAO,GAAG;AACjC,kBAAI,MACF,IAAI,QAAQ,MAAM,IAAI,QAAQ,kBAAkB,EAAE;AAGpD,kBAAI,gBAAgB,KAAK,CAAC,GAAG;AAC3B,kBAAE,IAAI,MAAM,CAAC,IAAI,OAAO,IAAI,IAAI,KAAK;AAAA,cACvC,OAAO;AACL,oBAAI,CAAC,OAAO;AAGV,sBAAI,EAAE,QAAQ,YAAY,SAAU,GAAG,IAAI,IAAI;AAC7C,4BAAQ,KAAK,GAAG,YAAY,MAAM,MAAM,KAAK,MAAM,MAAM,IAAI;AAC7D,2BAAO,CAAC,KAAK,KAAK,OAAO,KAAK;AAAA,kBAChC,CAAC;AAED,sBAAI,GAAG;AACL,2BAAO;AAGP,wBAAI,EAAE,QAAQ,UAAU,IAAI,EAAE,QAAQ,WAAW,MAAM;AAAA,kBACzD;AAEA,sBAAI,OAAO;AAAG,2BAAO,IAAIA,WAAU,GAAG,IAAI;AAAA,gBAC5C;AAIA,oBAAIA,WAAU,OAAO;AACnB,wBAAM,MACH,iBAAiB,WAAW,IAAI,WAAW,IAAI,MAAM,cAAc,GAAG;AAAA,gBAC3E;AAGA,kBAAE,IAAI;AAAA,cACR;AAEA,gBAAE,IAAI,EAAE,IAAI;AAAA,YACd;AAAA,UACF,EAAG;AAOH,mBAAS,MAAM,GAAG,IAAI,IAAI,GAAG;AAC3B,gBAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IACrB,KAAK,EAAE,GACP,SAAS;AAGX,gBAAI,IAAI;AAQN,mBAAK;AAGH,qBAAK,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAC7C,oBAAI,KAAK;AAGT,oBAAI,IAAI,GAAG;AACT,uBAAK;AACL,sBAAI;AACJ,sBAAI,GAAG,KAAK;AAGZ,uBAAK,IAAI,OAAO,IAAI,IAAI,KAAK,KAAK;AAAA,gBACpC,OAAO;AACL,uBAAK,UAAU,IAAI,KAAK,QAAQ;AAEhC,sBAAI,MAAM,GAAG,QAAQ;AAEnB,wBAAI,GAAG;AAGL,6BAAO,GAAG,UAAU,IAAI,GAAG,KAAK,CAAC;AAAE;AACnC,0BAAI,KAAK;AACT,0BAAI;AACJ,2BAAK;AACL,0BAAI,IAAI,WAAW;AAAA,oBACrB,OAAO;AACL,4BAAM;AAAA,oBACR;AAAA,kBACF,OAAO;AACL,wBAAI,IAAI,GAAG;AAGX,yBAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI;AAAI;AAGlC,yBAAK;AAIL,wBAAI,IAAI,WAAW;AAGnB,yBAAK,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,KAAK,KAAK;AAAA,kBAChD;AAAA,gBACF;AAEA,oBAAI,KAAK,KAAK,KAKb,GAAG,KAAK,MAAM,SAAS,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI;AAEvD,oBAAI,KAAK,KACL,MAAM,OAAO,MAAM,KAAK,OAAO,EAAE,IAAI,IAAI,IAAI,MAC9C,KAAK,KAAK,MAAM,MAAM,MAAM,KAAK,KAAK,MAAM,MAG3C,IAAI,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,KAAM,KAC7D,OAAO,EAAE,IAAI,IAAI,IAAI;AAExB,oBAAI,KAAK,KAAK,CAAC,GAAG,IAAI;AACpB,qBAAG,SAAS;AAEZ,sBAAI,GAAG;AAGL,0BAAM,EAAE,IAAI;AAGZ,uBAAG,KAAK,QAAQ,WAAW,KAAK,YAAY;AAC5C,sBAAE,IAAI,CAAC,MAAM;AAAA,kBACf,OAAO;AAGL,uBAAG,KAAK,EAAE,IAAI;AAAA,kBAChB;AAEA,yBAAO;AAAA,gBACT;AAGA,oBAAI,KAAK,GAAG;AACV,qBAAG,SAAS;AACZ,sBAAI;AACJ;AAAA,gBACF,OAAO;AACL,qBAAG,SAAS,KAAK;AACjB,sBAAI,OAAO,WAAW;AAItB,qBAAG,MAAM,IAAI,IAAI,UAAU,IAAI,OAAO,IAAI,KAAK,OAAO,EAAE,IAAI,IAAI;AAAA,gBAClE;AAGA,oBAAI,GAAG;AAEL,6BAAU;AAGR,wBAAI,MAAM,GAAG;AAGX,2BAAK,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAC7C,0BAAI,GAAG,MAAM;AACb,2BAAK,IAAI,GAAG,KAAK,IAAI,KAAK,IAAI;AAAI;AAGlC,0BAAI,KAAK,GAAG;AACV,0BAAE;AACF,4BAAI,GAAG,MAAM;AAAM,6BAAG,KAAK;AAAA,sBAC7B;AAEA;AAAA,oBACF,OAAO;AACL,yBAAG,OAAO;AACV,0BAAI,GAAG,OAAO;AAAM;AACpB,yBAAG,QAAQ;AACX,0BAAI;AAAA,oBACN;AAAA,kBACF;AAAA,gBACF;AAGA,qBAAK,IAAI,GAAG,QAAQ,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI;AAAE;AAAA,cAC9C;AAGA,kBAAI,EAAE,IAAI,SAAS;AACjB,kBAAE,IAAI,EAAE,IAAI;AAAA,cAGd,WAAW,EAAE,IAAI,SAAS;AACxB,kBAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,cAChB;AAAA,YACF;AAEA,mBAAO;AAAA,UACT;AAGA,mBAAS,QAAQ,GAAG;AAClB,gBAAI,KACF,IAAI,EAAE;AAER,gBAAI,MAAM;AAAM,qBAAO,EAAE,SAAS;AAElC,kBAAM,cAAc,EAAE,CAAC;AAEvB,kBAAM,KAAK,cAAc,KAAK,aAC1B,cAAc,KAAK,CAAC,IACpB,aAAa,KAAK,GAAG,GAAG;AAE5B,mBAAO,EAAE,IAAI,IAAI,MAAM,MAAM;AAAA,UAC/B;AASA,YAAE,gBAAgB,EAAE,MAAM,WAAY;AACpC,gBAAI,IAAI,IAAIA,WAAU,IAAI;AAC1B,gBAAI,EAAE,IAAI;AAAG,gBAAE,IAAI;AACnB,mBAAO;AAAA,UACT;AAUA,YAAE,aAAa,SAAU,GAAG,GAAG;AAC7B,mBAAO,QAAQ,MAAM,IAAIA,WAAU,GAAG,CAAC,CAAC;AAAA,UAC1C;AAgBA,YAAE,gBAAgB,EAAE,KAAK,SAAU,IAAI,IAAI;AACzC,gBAAI,GAAG,GAAG,GACR,IAAI;AAEN,gBAAI,MAAM,MAAM;AACd,uBAAS,IAAI,GAAG,GAAG;AACnB,kBAAI,MAAM;AAAM,qBAAK;AAAA;AAChB,yBAAS,IAAI,GAAG,CAAC;AAEtB,qBAAO,MAAM,IAAIA,WAAU,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,EAAE;AAAA,YACjD;AAEA,gBAAI,EAAE,IAAI,EAAE;AAAI,qBAAO;AACvB,kBAAM,IAAI,EAAE,SAAS,KAAK,SAAS,KAAK,IAAI,QAAQ,KAAK;AAGzD,gBAAI,IAAI,EAAE;AAAI,qBAAO,IAAI,MAAM,GAAG,KAAK,IAAI;AAAI;AAC/C,gBAAI,IAAI;AAAG,kBAAI;AAEf,mBAAO;AAAA,UACT;AAuBA,YAAE,YAAY,EAAE,MAAM,SAAU,GAAG,GAAG;AACpC,mBAAO,IAAI,MAAM,IAAIA,WAAU,GAAG,CAAC,GAAG,gBAAgB,aAAa;AAAA,UACrE;AAOA,YAAE,qBAAqB,EAAE,OAAO,SAAU,GAAG,GAAG;AAC9C,mBAAO,IAAI,MAAM,IAAIA,WAAU,GAAG,CAAC,GAAG,GAAG,CAAC;AAAA,UAC5C;AAkBA,YAAE,kBAAkB,EAAE,MAAM,SAAU,GAAG,GAAG;AAC1C,gBAAI,MAAM,UAAU,GAAG,GAAG,MAAM,QAAQ,QAAQ,QAAQ,GACtD,IAAI;AAEN,gBAAI,IAAIA,WAAU,CAAC;AAGnB,gBAAI,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG;AACzB,oBAAM,MACH,iBAAiB,8BAA8B,QAAQ,CAAC,CAAC;AAAA,YAC9D;AAEA,gBAAI,KAAK;AAAM,kBAAI,IAAIA,WAAU,CAAC;AAGlC,qBAAS,EAAE,IAAI;AAGf,gBAAI,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI;AAIhF,kBAAI,IAAIA,WAAU,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC5E,qBAAO,IAAI,EAAE,IAAI,CAAC,IAAI;AAAA,YACxB;AAEA,qBAAS,EAAE,IAAI;AAEf,gBAAI,GAAG;AAGL,kBAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE;AAAG,uBAAO,IAAIA,WAAU,GAAG;AAElD,yBAAW,CAAC,UAAU,EAAE,UAAU,KAAK,EAAE,UAAU;AAEnD,kBAAI;AAAU,oBAAI,EAAE,IAAI,CAAC;AAAA,YAI3B,WAAW,EAAE,IAAI,MAAM,EAAE,IAAI,KAAK,EAAE,IAAI,OAAO,EAAE,KAAK,IAElD,EAAE,EAAE,KAAK,KAAK,UAAU,EAAE,EAAE,MAAM,OAElC,EAAE,EAAE,KAAK,QAAQ,UAAU,EAAE,EAAE,MAAM,aAAa;AAGpD,kBAAI,EAAE,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK;AAG/B,kBAAI,EAAE,IAAI;AAAI,oBAAI,IAAI;AAGtB,qBAAO,IAAIA,WAAU,SAAS,IAAI,IAAI,CAAC;AAAA,YAEzC,WAAW,eAAe;AAKxB,kBAAI,SAAS,gBAAgB,WAAW,CAAC;AAAA,YAC3C;AAEA,gBAAI,QAAQ;AACV,qBAAO,IAAIA,WAAU,GAAG;AACxB,kBAAI;AAAQ,kBAAE,IAAI;AAClB,uBAAS,MAAM,CAAC;AAAA,YAClB,OAAO;AACL,kBAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxB,uBAAS,IAAI;AAAA,YACf;AAEA,gBAAI,IAAIA,WAAUC,IAAG;AAGrB,uBAAU;AAER,kBAAI,QAAQ;AACV,oBAAI,EAAE,MAAM,CAAC;AACb,oBAAI,CAAC,EAAE;AAAG;AAEV,oBAAI,GAAG;AACL,sBAAI,EAAE,EAAE,SAAS;AAAG,sBAAE,EAAE,SAAS;AAAA,gBACnC,WAAW,UAAU;AACnB,sBAAI,EAAE,IAAI,CAAC;AAAA,gBACb;AAAA,cACF;AAEA,kBAAI,GAAG;AACL,oBAAI,UAAU,IAAI,CAAC;AACnB,oBAAI,MAAM;AAAG;AACb,yBAAS,IAAI;AAAA,cACf,OAAO;AACL,oBAAI,EAAE,MAAM,IAAI;AAChB,sBAAM,GAAG,EAAE,IAAI,GAAG,CAAC;AAEnB,oBAAI,EAAE,IAAI,IAAI;AACZ,2BAAS,MAAM,CAAC;AAAA,gBAClB,OAAO;AACL,sBAAI,CAAC,QAAQ,CAAC;AACd,sBAAI,MAAM;AAAG;AACb,2BAAS,IAAI;AAAA,gBACf;AAAA,cACF;AAEA,kBAAI,EAAE,MAAM,CAAC;AAEb,kBAAI,GAAG;AACL,oBAAI,EAAE,KAAK,EAAE,EAAE,SAAS;AAAG,oBAAE,EAAE,SAAS;AAAA,cAC1C,WAAW,UAAU;AACnB,oBAAI,EAAE,IAAI,CAAC;AAAA,cACb;AAAA,YACF;AAEA,gBAAI;AAAU,qBAAO;AACrB,gBAAI;AAAQ,kBAAIA,KAAI,IAAI,CAAC;AAEzB,mBAAO,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,GAAG,eAAe,eAAe,IAAI,IAAI;AAAA,UAC3E;AAWA,YAAE,eAAe,SAAU,IAAI;AAC7B,gBAAI,IAAI,IAAID,WAAU,IAAI;AAC1B,gBAAI,MAAM;AAAM,mBAAK;AAAA;AAChB,uBAAS,IAAI,GAAG,CAAC;AACtB,mBAAO,MAAM,GAAG,EAAE,IAAI,GAAG,EAAE;AAAA,UAC7B;AAOA,YAAE,YAAY,EAAE,KAAK,SAAU,GAAG,GAAG;AACnC,mBAAO,QAAQ,MAAM,IAAIA,WAAU,GAAG,CAAC,CAAC,MAAM;AAAA,UAChD;AAMA,YAAE,WAAW,WAAY;AACvB,mBAAO,CAAC,CAAC,KAAK;AAAA,UAChB;AAOA,YAAE,gBAAgB,EAAE,KAAK,SAAU,GAAG,GAAG;AACvC,mBAAO,QAAQ,MAAM,IAAIA,WAAU,GAAG,CAAC,CAAC,IAAI;AAAA,UAC9C;AAOA,YAAE,yBAAyB,EAAE,MAAM,SAAU,GAAG,GAAG;AACjD,oBAAQ,IAAI,QAAQ,MAAM,IAAIA,WAAU,GAAG,CAAC,CAAC,OAAO,KAAK,MAAM;AAAA,UAEjE;AAMA,YAAE,YAAY,WAAY;AACxB,mBAAO,CAAC,CAAC,KAAK,KAAK,SAAS,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE,SAAS;AAAA,UACnE;AAOA,YAAE,aAAa,EAAE,KAAK,SAAU,GAAG,GAAG;AACpC,mBAAO,QAAQ,MAAM,IAAIA,WAAU,GAAG,CAAC,CAAC,IAAI;AAAA,UAC9C;AAOA,YAAE,sBAAsB,EAAE,MAAM,SAAU,GAAG,GAAG;AAC9C,oBAAQ,IAAI,QAAQ,MAAM,IAAIA,WAAU,GAAG,CAAC,CAAC,OAAO,MAAM,MAAM;AAAA,UAClE;AAMA,YAAE,QAAQ,WAAY;AACpB,mBAAO,CAAC,KAAK;AAAA,UACf;AAMA,YAAE,aAAa,WAAY;AACzB,mBAAO,KAAK,IAAI;AAAA,UAClB;AAMA,YAAE,aAAa,WAAY;AACzB,mBAAO,KAAK,IAAI;AAAA,UAClB;AAMA,YAAE,SAAS,WAAY;AACrB,mBAAO,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE,MAAM;AAAA,UAClC;AAuBA,YAAE,QAAQ,SAAU,GAAG,GAAG;AACxB,gBAAI,GAAG,GAAG,GAAG,MACX,IAAI,MACJ,IAAI,EAAE;AAER,gBAAI,IAAIA,WAAU,GAAG,CAAC;AACtB,gBAAI,EAAE;AAGN,gBAAI,CAAC,KAAK,CAAC;AAAG,qBAAO,IAAIA,WAAU,GAAG;AAGtC,gBAAI,KAAK,GAAG;AACV,gBAAE,IAAI,CAAC;AACP,qBAAO,EAAE,KAAK,CAAC;AAAA,YACjB;AAEA,gBAAI,KAAK,EAAE,IAAI,UACb,KAAK,EAAE,IAAI,UACX,KAAK,EAAE,GACP,KAAK,EAAE;AAET,gBAAI,CAAC,MAAM,CAAC,IAAI;AAGd,kBAAI,CAAC,MAAM,CAAC;AAAI,uBAAO,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,IAAIA,WAAU,KAAK,IAAI,GAAG;AAGtE,kBAAI,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI;AAGpB,uBAAO,GAAG,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,IAAIA,WAAU,GAAG,KAAK,IAGpD,iBAAiB,IAAI,KAAK,CAAC;AAAA,cAC9B;AAAA,YACF;AAEA,iBAAK,SAAS,EAAE;AAChB,iBAAK,SAAS,EAAE;AAChB,iBAAK,GAAG,MAAM;AAGd,gBAAI,IAAI,KAAK,IAAI;AAEf,kBAAI,OAAO,IAAI,GAAG;AAChB,oBAAI,CAAC;AACL,oBAAI;AAAA,cACN,OAAO;AACL,qBAAK;AACL,oBAAI;AAAA,cACN;AAEA,gBAAE,QAAQ;AAGV,mBAAK,IAAI,GAAG,KAAK,EAAE,KAAK,CAAC;AAAE;AAC3B,gBAAE,QAAQ;AAAA,YACZ,OAAO;AAGL,mBAAK,QAAQ,IAAI,GAAG,WAAW,IAAI,GAAG,WAAW,IAAI;AAErD,mBAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;AAE1B,oBAAI,GAAG,MAAM,GAAG,IAAI;AAClB,yBAAO,GAAG,KAAK,GAAG;AAClB;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAGA,gBAAI;AAAM,kBAAI,IAAI,KAAK,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC,EAAE;AAE5C,iBAAK,IAAI,GAAG,WAAW,IAAI,GAAG;AAI9B,gBAAI,IAAI;AAAG,qBAAO,KAAK,GAAG,OAAO;AAAE;AACnC,gBAAI,OAAO;AAGX,mBAAO,IAAI,KAAI;AAEb,kBAAI,GAAG,EAAE,KAAK,GAAG,IAAI;AACnB,qBAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,GAAG,KAAK;AAAE;AACrC,kBAAE,GAAG;AACL,mBAAG,MAAM;AAAA,cACX;AAEA,iBAAG,MAAM,GAAG;AAAA,YACd;AAGA,mBAAO,GAAG,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,GAAG,EAAE;AAAG;AAGzC,gBAAI,CAAC,GAAG,IAAI;AAIV,gBAAE,IAAI,iBAAiB,IAAI,KAAK;AAChC,gBAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AACd,qBAAO;AAAA,YACT;AAIA,mBAAO,UAAU,GAAG,IAAI,EAAE;AAAA,UAC5B;AAwBA,YAAE,SAAS,EAAE,MAAM,SAAU,GAAG,GAAG;AACjC,gBAAI,GAAG,GACL,IAAI;AAEN,gBAAI,IAAIA,WAAU,GAAG,CAAC;AAGtB,gBAAI,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI;AAClC,qBAAO,IAAIA,WAAU,GAAG;AAAA,YAG1B,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI;AACjC,qBAAO,IAAIA,WAAU,CAAC;AAAA,YACxB;AAEA,gBAAI,eAAe,GAAG;AAIpB,kBAAI,EAAE;AACN,gBAAE,IAAI;AACN,kBAAI,IAAI,GAAG,GAAG,GAAG,CAAC;AAClB,gBAAE,IAAI;AACN,gBAAE,KAAK;AAAA,YACT,OAAO;AACL,kBAAI,IAAI,GAAG,GAAG,GAAG,WAAW;AAAA,YAC9B;AAEA,gBAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAGtB,gBAAI,CAAC,EAAE,EAAE,MAAM,eAAe;AAAG,gBAAE,IAAI,EAAE;AAEzC,mBAAO;AAAA,UACT;AAuBA,YAAE,eAAe,EAAE,QAAQ,SAAU,GAAG,GAAG;AACzC,gBAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAClD,MAAM,UACN,IAAI,MACJ,KAAK,EAAE,GACP,MAAM,IAAI,IAAIA,WAAU,GAAG,CAAC,GAAG;AAGjC,gBAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI;AAGlC,kBAAI,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI;AAC9D,kBAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAAA,cACpB,OAAO;AACL,kBAAE,KAAK,EAAE;AAGT,oBAAI,CAAC,MAAM,CAAC,IAAI;AACd,oBAAE,IAAI,EAAE,IAAI;AAAA,gBAGd,OAAO;AACL,oBAAE,IAAI,CAAC,CAAC;AACR,oBAAE,IAAI;AAAA,gBACR;AAAA,cACF;AAEA,qBAAO;AAAA,YACT;AAEA,gBAAI,SAAS,EAAE,IAAI,QAAQ,IAAI,SAAS,EAAE,IAAI,QAAQ;AACtD,cAAE,KAAK,EAAE;AACT,kBAAM,GAAG;AACT,kBAAM,GAAG;AAGT,gBAAI,MAAM;AAAK,mBAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,MAAM;AAGpE,iBAAK,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;AAAE;AAE7C,mBAAO;AACP,uBAAW;AAEX,iBAAK,IAAI,KAAK,EAAE,KAAK,KAAI;AACvB,kBAAI;AACJ,oBAAM,GAAG,KAAK;AACd,oBAAM,GAAG,KAAK,WAAW;AAEzB,mBAAK,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,KAAI;AAC/B,sBAAM,GAAG,EAAE,KAAK;AAChB,sBAAM,GAAG,KAAK,WAAW;AACzB,oBAAI,MAAM,MAAM,MAAM;AACtB,sBAAM,MAAM,MAAQ,IAAI,WAAY,WAAY,GAAG,KAAK;AACxD,qBAAK,MAAM,OAAO,MAAM,IAAI,WAAW,KAAK,MAAM;AAClD,mBAAG,OAAO,MAAM;AAAA,cAClB;AAEA,iBAAG,KAAK;AAAA,YACV;AAEA,gBAAI,GAAG;AACL,gBAAE;AAAA,YACJ,OAAO;AACL,iBAAG,OAAO,GAAG,CAAC;AAAA,YAChB;AAEA,mBAAO,UAAU,GAAG,IAAI,CAAC;AAAA,UAC3B;AAOA,YAAE,UAAU,WAAY;AACtB,gBAAI,IAAI,IAAIA,WAAU,IAAI;AAC1B,cAAE,IAAI,CAAC,EAAE,KAAK;AACd,mBAAO;AAAA,UACT;AAuBA,YAAE,OAAO,SAAU,GAAG,GAAG;AACvB,gBAAI,GACF,IAAI,MACJ,IAAI,EAAE;AAER,gBAAI,IAAIA,WAAU,GAAG,CAAC;AACtB,gBAAI,EAAE;AAGN,gBAAI,CAAC,KAAK,CAAC;AAAG,qBAAO,IAAIA,WAAU,GAAG;AAGrC,gBAAI,KAAK,GAAG;AACX,gBAAE,IAAI,CAAC;AACP,qBAAO,EAAE,MAAM,CAAC;AAAA,YAClB;AAEA,gBAAI,KAAK,EAAE,IAAI,UACb,KAAK,EAAE,IAAI,UACX,KAAK,EAAE,GACP,KAAK,EAAE;AAET,gBAAI,CAAC,MAAM,CAAC,IAAI;AAGd,kBAAI,CAAC,MAAM,CAAC;AAAI,uBAAO,IAAIA,WAAU,IAAI,CAAC;AAI1C,kBAAI,CAAC,GAAG,MAAM,CAAC,GAAG;AAAI,uBAAO,GAAG,KAAK,IAAI,IAAIA,WAAU,GAAG,KAAK,IAAI,IAAI,CAAC;AAAA,YAC1E;AAEA,iBAAK,SAAS,EAAE;AAChB,iBAAK,SAAS,EAAE;AAChB,iBAAK,GAAG,MAAM;AAGd,gBAAI,IAAI,KAAK,IAAI;AACf,kBAAI,IAAI,GAAG;AACT,qBAAK;AACL,oBAAI;AAAA,cACN,OAAO;AACL,oBAAI,CAAC;AACL,oBAAI;AAAA,cACN;AAEA,gBAAE,QAAQ;AACV,qBAAO,KAAK,EAAE,KAAK,CAAC;AAAE;AACtB,gBAAE,QAAQ;AAAA,YACZ;AAEA,gBAAI,GAAG;AACP,gBAAI,GAAG;AAGP,gBAAI,IAAI,IAAI;AAAG,kBAAI,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI;AAG5C,iBAAK,IAAI,GAAG,KAAI;AACd,mBAAK,GAAG,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,OAAO;AAC3C,iBAAG,KAAK,SAAS,GAAG,KAAK,IAAI,GAAG,KAAK;AAAA,YACvC;AAEA,gBAAI,GAAG;AACL,mBAAK,CAAC,CAAC,EAAE,OAAO,EAAE;AAClB,gBAAE;AAAA,YACJ;AAIA,mBAAO,UAAU,GAAG,IAAI,EAAE;AAAA,UAC5B;AAkBA,YAAE,YAAY,EAAE,KAAK,SAAU,IAAI,IAAI;AACrC,gBAAI,GAAG,GAAG,GACR,IAAI;AAEN,gBAAI,MAAM,QAAQ,OAAO,CAAC,CAAC,IAAI;AAC7B,uBAAS,IAAI,GAAG,GAAG;AACnB,kBAAI,MAAM;AAAM,qBAAK;AAAA;AAChB,yBAAS,IAAI,GAAG,CAAC;AAEtB,qBAAO,MAAM,IAAIA,WAAU,CAAC,GAAG,IAAI,EAAE;AAAA,YACvC;AAEA,gBAAI,EAAE,IAAI,EAAE;AAAI,qBAAO;AACvB,gBAAI,EAAE,SAAS;AACf,gBAAI,IAAI,WAAW;AAEnB,gBAAI,IAAI,EAAE,IAAI;AAGZ,qBAAO,IAAI,MAAM,GAAG,KAAK,IAAI;AAAI;AAGjC,mBAAK,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI;AAAI;AAAA,YACvC;AAEA,gBAAI,MAAM,EAAE,IAAI,IAAI;AAAG,kBAAI,EAAE,IAAI;AAEjC,mBAAO;AAAA,UACT;AAWA,YAAE,YAAY,SAAU,GAAG;AACzB,qBAAS,GAAG,CAAC,kBAAkB,gBAAgB;AAC/C,mBAAO,KAAK,MAAM,OAAO,CAAC;AAAA,UAC5B;AAcA,YAAE,aAAa,EAAE,OAAO,WAAY;AAClC,gBAAI,GAAG,GAAG,GAAG,KAAK,GAChB,IAAI,MACJ,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE,GACN,KAAK,iBAAiB,GACtB,OAAO,IAAIA,WAAU,KAAK;AAG5B,gBAAI,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI;AAC1B,qBAAO,IAAIA,WAAU,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,MAAM,IAAI,IAAI,IAAI,CAAC;AAAA,YACxE;AAGA,gBAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;AAIzB,gBAAI,KAAK,KAAK,KAAK,IAAI,GAAG;AACxB,kBAAI,cAAc,CAAC;AACnB,mBAAK,EAAE,SAAS,KAAK,KAAK;AAAG,qBAAK;AAClC,kBAAI,KAAK,KAAK,CAAC,CAAC;AAChB,kBAAI,UAAU,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,IAAI;AAE1C,kBAAI,KAAK,IAAI,GAAG;AACd,oBAAI,OAAO;AAAA,cACb,OAAO;AACL,oBAAI,EAAE,cAAc;AACpB,oBAAI,EAAE,MAAM,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC,IAAI;AAAA,cACvC;AAEA,kBAAI,IAAIA,WAAU,CAAC;AAAA,YACrB,OAAO;AACL,kBAAI,IAAIA,WAAU,IAAI,EAAE;AAAA,YAC1B;AAMA,gBAAI,EAAE,EAAE,IAAI;AACV,kBAAI,EAAE;AACN,kBAAI,IAAI;AACR,kBAAI,IAAI;AAAG,oBAAI;AAGf,yBAAU;AACR,oBAAI;AACJ,oBAAI,KAAK,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AAEvC,oBAAI,cAAc,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,IAAI,cAAc,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG;AAK3E,sBAAI,EAAE,IAAI;AAAG,sBAAE;AACf,sBAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;AAKxB,sBAAI,KAAK,UAAU,CAAC,OAAO,KAAK,QAAQ;AAItC,wBAAI,CAAC,KAAK;AACR,4BAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG,CAAC;AAEpC,0BAAI,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG;AACpB,4BAAI;AACJ;AAAA,sBACF;AAAA,oBACF;AAEA,0BAAM;AACN,yBAAK;AACL,0BAAM;AAAA,kBACR,OAAO;AAIL,wBAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK;AAG7C,4BAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG,CAAC;AACpC,0BAAI,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC;AAAA,oBACtB;AAEA;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,mBAAO,MAAM,GAAG,EAAE,IAAI,iBAAiB,GAAG,eAAe,CAAC;AAAA,UAC5D;AAYA,YAAE,gBAAgB,SAAU,IAAI,IAAI;AAClC,gBAAI,MAAM,MAAM;AACd,uBAAS,IAAI,GAAG,GAAG;AACnB;AAAA,YACF;AACA,mBAAO,OAAO,MAAM,IAAI,IAAI,CAAC;AAAA,UAC/B;AAeA,YAAE,UAAU,SAAU,IAAI,IAAI;AAC5B,gBAAI,MAAM,MAAM;AACd,uBAAS,IAAI,GAAG,GAAG;AACnB,mBAAK,KAAK,KAAK,IAAI;AAAA,YACrB;AACA,mBAAO,OAAO,MAAM,IAAI,EAAE;AAAA,UAC5B;AA4BA,YAAE,WAAW,SAAU,IAAI,IAAII,SAAQ;AACrC,gBAAI,KACF,IAAI;AAEN,gBAAIA,WAAU,MAAM;AAClB,kBAAI,MAAM,QAAQ,MAAM,OAAO,MAAM,UAAU;AAC7C,gBAAAA,UAAS;AACT,qBAAK;AAAA,cACP,WAAW,MAAM,OAAO,MAAM,UAAU;AACtC,gBAAAA,UAAS;AACT,qBAAK,KAAK;AAAA,cACZ,OAAO;AACL,gBAAAA,UAAS;AAAA,cACX;AAAA,YACF,WAAW,OAAOA,WAAU,UAAU;AACpC,oBAAM,MACH,iBAAiB,6BAA6BA,OAAM;AAAA,YACzD;AAEA,kBAAM,EAAE,QAAQ,IAAI,EAAE;AAEtB,gBAAI,EAAE,GAAG;AACP,kBAAI,GACF,MAAM,IAAI,MAAM,GAAG,GACnB,KAAK,CAACA,QAAO,WACb,KAAK,CAACA,QAAO,oBACb,iBAAiBA,QAAO,kBAAkB,IAC1C,UAAU,IAAI,IACd,eAAe,IAAI,IACnB,QAAQ,EAAE,IAAI,GACd,YAAY,QAAQ,QAAQ,MAAM,CAAC,IAAI,SACvC,MAAM,UAAU;AAElB,kBAAI;AAAI,oBAAI,IAAI,KAAK,IAAI,KAAK,GAAG,OAAO;AAExC,kBAAI,KAAK,KAAK,MAAM,GAAG;AACrB,oBAAI,MAAM,MAAM;AAChB,0BAAU,UAAU,OAAO,GAAG,CAAC;AAC/B,uBAAO,IAAI,KAAK,KAAK;AAAI,6BAAW,iBAAiB,UAAU,OAAO,GAAG,EAAE;AAC3E,oBAAI,KAAK;AAAG,6BAAW,iBAAiB,UAAU,MAAM,CAAC;AACzD,oBAAI;AAAO,4BAAU,MAAM;AAAA,cAC7B;AAEA,oBAAM,eACH,WAAWA,QAAO,oBAAoB,QAAQ,KAAK,CAACA,QAAO,qBAC1D,aAAa;AAAA,gBAAQ,IAAI,OAAO,SAAS,KAAK,QAAQ,GAAG;AAAA,gBAC1D,QAAQA,QAAO,0BAA0B;AAAA,cAAG,IAC3C,gBACD;AAAA,YACL;AAEA,oBAAQA,QAAO,UAAU,MAAM,OAAOA,QAAO,UAAU;AAAA,UACzD;AAcA,YAAE,aAAa,SAAU,IAAI;AAC3B,gBAAI,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,GAAG,GAAG,GAC1C,IAAI,MACJ,KAAK,EAAE;AAET,gBAAI,MAAM,MAAM;AACd,kBAAI,IAAIJ,WAAU,EAAE;AAGpB,kBAAI,CAAC,EAAE,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,MAAM,EAAE,GAAGC,IAAG,GAAG;AACrD,sBAAM,MACH,iBAAiB,eACf,EAAE,UAAU,IAAI,mBAAmB,sBAAsB,QAAQ,CAAC,CAAC;AAAA,cAC1E;AAAA,YACF;AAEA,gBAAI,CAAC;AAAI,qBAAO,IAAID,WAAU,CAAC;AAE/B,gBAAI,IAAIA,WAAUC,IAAG;AACrB,iBAAK,KAAK,IAAID,WAAUC,IAAG;AAC3B,iBAAK,KAAK,IAAID,WAAUC,IAAG;AAC3B,gBAAI,cAAc,EAAE;AAIpB,gBAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI;AAC3B,cAAE,EAAE,KAAK,UAAU,MAAM,IAAI,YAAY,IAAI,WAAW,MAAM;AAC9D,iBAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,IAAK,IAAI,IAAI,IAAI,KAAM;AAErD,kBAAM;AACN,sBAAU,IAAI;AACd,gBAAI,IAAID,WAAU,CAAC;AAGnB,eAAG,EAAE,KAAK;AAEV,uBAAW;AACT,kBAAI,IAAI,GAAG,GAAG,GAAG,CAAC;AAClB,mBAAK,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;AACxB,kBAAI,GAAG,WAAW,EAAE,KAAK;AAAG;AAC5B,mBAAK;AACL,mBAAK;AACL,mBAAK,GAAG,KAAK,EAAE,MAAM,KAAK,EAAE,CAAC;AAC7B,mBAAK;AACL,kBAAI,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC,CAAC;AAC3B,kBAAI;AAAA,YACN;AAEA,iBAAK,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC;AAC/B,iBAAK,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC;AACzB,iBAAK,GAAG,KAAK,GAAG,MAAM,EAAE,CAAC;AACzB,eAAG,IAAI,GAAG,IAAI,EAAE;AAChB,gBAAI,IAAI;AAGR,gBAAI,IAAI,IAAI,IAAI,GAAG,aAAa,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE;AAAA,cAC7C,IAAI,IAAI,IAAI,GAAG,aAAa,EAAE,MAAM,CAAC,EAAE,IAAI;AAAA,YAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAE1E,sBAAU;AAEV,mBAAO;AAAA,UACT;AAMA,YAAE,WAAW,WAAY;AACvB,mBAAO,CAAC,QAAQ,IAAI;AAAA,UACtB;AAcA,YAAE,cAAc,SAAU,IAAI,IAAI;AAChC,gBAAI,MAAM;AAAM,uBAAS,IAAI,GAAG,GAAG;AACnC,mBAAO,OAAO,MAAM,IAAI,IAAI,CAAC;AAAA,UAC/B;AAcA,YAAE,WAAW,SAAU,GAAG;AACxB,gBAAI,KACF,IAAI,MACJ,IAAI,EAAE,GACN,IAAI,EAAE;AAGR,gBAAI,MAAM,MAAM;AACd,kBAAI,GAAG;AACL,sBAAM;AACN,oBAAI,IAAI;AAAG,wBAAM,MAAM;AAAA,cACzB,OAAO;AACL,sBAAM;AAAA,cACR;AAAA,YACF,OAAO;AACL,kBAAI,KAAK,MAAM;AACb,sBAAM,KAAK,cAAc,KAAK,aAC3B,cAAc,cAAc,EAAE,CAAC,GAAG,CAAC,IACnC,aAAa,cAAc,EAAE,CAAC,GAAG,GAAG,GAAG;AAAA,cAC5C,WAAW,MAAM,MAAM,gCAAgC;AACrD,oBAAI,MAAM,IAAIA,WAAU,CAAC,GAAG,iBAAiB,IAAI,GAAG,aAAa;AACjE,sBAAM,aAAa,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG;AAAA,cACjD,OAAO;AACL,yBAAS,GAAG,GAAG,SAAS,QAAQ,MAAM;AACtC,sBAAM,YAAY,aAAa,cAAc,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI;AAAA,cAC5E;AAEA,kBAAI,IAAI,KAAK,EAAE,EAAE;AAAI,sBAAM,MAAM;AAAA,YACnC;AAEA,mBAAO;AAAA,UACT;AAOA,YAAE,UAAU,EAAE,SAAS,WAAY;AACjC,mBAAO,QAAQ,IAAI;AAAA,UACrB;AAGA,YAAE,eAAe;AAEjB,cAAI,gBAAgB;AAAM,YAAAA,WAAU,IAAI,YAAY;AAEpD,iBAAOA;AAAA,QACT;AASA,iBAAS,SAAS,GAAG;AACnB,cAAI,IAAI,IAAI;AACZ,iBAAO,IAAI,KAAK,MAAM,IAAI,IAAI,IAAI;AAAA,QACpC;AAIA,iBAAS,cAAc,GAAG;AACxB,cAAI,GAAG,GACL,IAAI,GACJ,IAAI,EAAE,QACN,IAAI,EAAE,KAAK;AAEb,iBAAO,IAAI,KAAI;AACb,gBAAI,EAAE,OAAO;AACb,gBAAI,WAAW,EAAE;AACjB,mBAAO,KAAK,IAAI,MAAM;AAAE;AACxB,iBAAK;AAAA,UACP;AAGA,eAAK,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,MAAM;AAAI;AAE7C,iBAAO,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC;AAAA,QAC9B;AAIA,iBAAS,QAAQ,GAAG,GAAG;AACrB,cAAI,GAAG,GACL,KAAK,EAAE,GACP,KAAK,EAAE,GACP,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE,GACN,IAAI,EAAE;AAGR,cAAI,CAAC,KAAK,CAAC;AAAG,mBAAO;AAErB,cAAI,MAAM,CAAC,GAAG;AACd,cAAI,MAAM,CAAC,GAAG;AAGd,cAAI,KAAK;AAAG,mBAAO,IAAI,IAAI,IAAI,CAAC,IAAI;AAGpC,cAAI,KAAK;AAAG,mBAAO;AAEnB,cAAI,IAAI;AACR,cAAI,KAAK;AAGT,cAAI,CAAC,MAAM,CAAC;AAAI,mBAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;AAG7C,cAAI,CAAC;AAAG,mBAAO,IAAI,IAAI,IAAI,IAAI;AAE/B,eAAK,IAAI,GAAG,WAAW,IAAI,GAAG,UAAU,IAAI;AAG5C,eAAK,IAAI,GAAG,IAAI,GAAG;AAAK,gBAAI,GAAG,MAAM,GAAG;AAAI,qBAAO,GAAG,KAAK,GAAG,KAAK,IAAI,IAAI;AAG3E,iBAAO,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;AAAA,QACtC;AAMA,iBAAS,SAAS,GAAG,KAAK,KAAK,MAAM;AACnC,cAAI,IAAI,OAAO,IAAI,OAAO,MAAM,UAAU,CAAC,GAAG;AAC5C,kBAAM,MACJ,kBAAkB,QAAQ,eAAe,OAAO,KAAK,WAClD,IAAI,OAAO,IAAI,MAAM,oBAAoB,sBACzC,+BAA+B,OAAO,CAAC,CAAC;AAAA,UAC/C;AAAA,QACF;AAIA,iBAAS,MAAM,GAAG;AAChB,cAAI,IAAI,EAAE,EAAE,SAAS;AACrB,iBAAO,SAAS,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE,EAAE,KAAK,KAAK;AAAA,QACxD;AAGA,iBAAS,cAAc,KAAK,GAAG;AAC7B,kBAAQ,IAAI,SAAS,IAAI,IAAI,OAAO,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,QAC5D,IAAI,IAAI,MAAM,QAAQ;AAAA,QAC1B;AAGA,iBAAS,aAAa,KAAK,GAAG,GAAG;AAC/B,cAAI,KAAK;AAGT,cAAI,IAAI,GAAG;AAGT,iBAAK,KAAK,IAAI,KAAK,EAAE,GAAG,MAAM;AAAE;AAChC,kBAAM,KAAK;AAAA,UAGb,OAAO;AACL,kBAAM,IAAI;AAGV,gBAAI,EAAE,IAAI,KAAK;AACb,mBAAK,KAAK,GAAG,KAAK,KAAK,EAAE,GAAG,MAAM;AAAE;AACpC,qBAAO;AAAA,YACT,WAAW,IAAI,KAAK;AAClB,oBAAM,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC;AAAA,YAC3C;AAAA,UACF;AAEA,iBAAO;AAAA,QACT;AAMA,oBAAY,MAAM;AAClB,kBAAU,aAAa,UAAU,YAAY;AAG7C,YAAI,OAAO,UAAU,cAAc,OAAO,KAAK;AAC7C,iBAAO,WAAY;AAAE,mBAAO;AAAA,UAAW,CAAC;AAAA,QAG1C,WAAW,OAAO,UAAU,eAAe,OAAO,SAAS;AACzD,iBAAO,UAAU;AAAA,QAGnB,OAAO;AACL,cAAI,CAAC,cAAc;AACjB,2BAAe,OAAO,QAAQ,eAAe,OAAO,OAAO;AAAA,UAC7D;AAEA,uBAAa,YAAY;AAAA,QAC3B;AAAA,MACF,GAAG,OAAI;AAAA;AAAA;;;ACv1FP;AAAA;AAAA,UAAI,YAAY;AAmKhB,UAAIK,QAAO,OAAO;AAElB,OAAC,WAAY;AACT;AAEA,iBAAS,EAAE,GAAG;AAEV,iBAAO,IAAI,KAAK,MAAM,IAAI;AAAA,QAC9B;AAEA,YAAI,KAAK,4GACL,YAAY,4HACZ,KACA,QACA,OAAO;AAAA,UACH,MAAM;AAAA,UACN,KAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAM;AAAA,UACN,MAAM;AAAA,QACV,GACA;AAGJ,iBAAS,MAAM,QAAQ;AAOnB,oBAAU,YAAY;AACtB,iBAAO,UAAU,KAAK,MAAM,IAAI,MAAM,OAAO,QAAQ,WAAW,SAAU,GAAG;AACzE,gBAAI,IAAI,KAAK;AACb,mBAAO,OAAO,MAAM,WACd,IACA,SAAS,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE;AAAA,UAClE,CAAC,IAAI,MAAM,MAAM,SAAS;AAAA,QAC9B;AAGA,iBAAS,IAAI,KAAK,QAAQ;AAItB,cAAI,GACA,GACA,GACA,QACA,OAAO,KACP,SACA,QAAQ,OAAO,MACf,cAAc,SAAS,SAAS,iBAAiB,aAAa,UAAU,YAAY,KAAK;AAI7F,cAAI,SAAS,OAAO,UAAU,YACtB,OAAO,MAAM,WAAW,YAAY;AACxC,oBAAQ,MAAM,OAAO,GAAG;AAAA,UAC5B;AAKA,cAAI,OAAO,QAAQ,YAAY;AAC3B,oBAAQ,IAAI,KAAK,QAAQ,KAAK,KAAK;AAAA,UACvC;AAIA,kBAAQ,OAAO,OAAO;AAAA,YACtB,KAAK;AACD,kBAAI,aAAa;AACb,uBAAO;AAAA,cACX,OAAO;AACH,uBAAO,MAAM,KAAK;AAAA,cACtB;AAAA,YAEJ,KAAK;AAID,qBAAO,SAAS,KAAK,IAAI,OAAO,KAAK,IAAI;AAAA,YAE7C,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAMD,qBAAO,OAAO,KAAK;AAAA,YAKvB,KAAK;AAKD,kBAAI,CAAC,OAAO;AACR,uBAAO;AAAA,cACX;AAIA,qBAAO;AACP,wBAAU,CAAC;AAIX,kBAAI,OAAO,UAAU,SAAS,MAAM,KAAK,MAAM,kBAAkB;AAK7D,yBAAS,MAAM;AACf,qBAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC5B,0BAAQ,KAAK,IAAI,GAAG,KAAK,KAAK;AAAA,gBAClC;AAKA,oBAAI,QAAQ,WAAW,IACjB,OACA,MACA,QAAQ,MAAM,QAAQ,KAAK,QAAQ,GAAG,IAAI,OAAO,OAAO,MACxD,MAAM,QAAQ,KAAK,GAAG,IAAI;AAChC,sBAAM;AACN,uBAAO;AAAA,cACX;AAIA,kBAAI,OAAO,OAAO,QAAQ,UAAU;AAChC,yBAAS,IAAI;AACb,qBAAK,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAC5B,sBAAI,OAAO,IAAI,OAAO,UAAU;AAC5B,wBAAI,IAAI;AACR,wBAAI,IAAI,GAAG,KAAK;AAChB,wBAAI,GAAG;AACH,8BAAQ,KAAK,MAAM,CAAC,KAAK,MAAM,OAAO,OAAO,CAAC;AAAA,oBAClD;AAAA,kBACJ;AAAA,gBACJ;AAAA,cACJ,OAAO;AAIH,uBAAO,KAAK,KAAK,EAAE,QAAQ,SAASC,IAAG;AACnC,sBAAIC,KAAI,IAAID,IAAG,KAAK;AACpB,sBAAIC,IAAG;AACH,4BAAQ,KAAK,MAAMD,EAAC,KAAK,MAAM,OAAO,OAAOC,EAAC;AAAA,kBAClD;AAAA,gBACJ,CAAC;AAAA,cACL;AAKA,kBAAI,QAAQ,WAAW,IACjB,OACA,MACA,QAAQ,MAAM,QAAQ,KAAK,QAAQ,GAAG,IAAI,OAAO,OAAO,MACxD,MAAM,QAAQ,KAAK,GAAG,IAAI;AAChC,oBAAM;AACN,qBAAO;AAAA,UACX;AAAA,QACJ;AAIA,YAAI,OAAOF,MAAK,cAAc,YAAY;AACtC,UAAAA,MAAK,YAAY,SAAU,OAAO,UAAU,OAAO;AAQ/C,gBAAI;AACJ,kBAAM;AACN,qBAAS;AAKT,gBAAI,OAAO,UAAU,UAAU;AAC3B,mBAAK,IAAI,GAAG,IAAI,OAAO,KAAK,GAAG;AAC3B,0BAAU;AAAA,cACd;AAAA,YAIJ,WAAW,OAAO,UAAU,UAAU;AAClC,uBAAS;AAAA,YACb;AAKA,kBAAM;AACN,gBAAI,YAAY,OAAO,aAAa,eAC3B,OAAO,aAAa,YACrB,OAAO,SAAS,WAAW,WAAW;AAC1C,oBAAM,IAAI,MAAM,gBAAgB;AAAA,YACpC;AAKA,mBAAO,IAAI,IAAI,EAAC,IAAI,MAAK,CAAC;AAAA,UAC9B;AAAA,QACJ;AAAA,MACJ,GAAE;AAAA;AAAA;;;AC/XF;AAAA;AAAA,UAAI,YAAY;AAMhB,UAAM,iBAAiB;AACvB,UAAM,uBAAuB;AAgE7B,UAAI,aAAa,SAAU,SAAS;AAClC;AAWA,YAAI,WAAW;AAAA,UACb,QAAQ;AAAA,UACR,eAAe;AAAA,UACf,kBAAkB;AAAA,UAClB,iBAAiB;AAAA,UACjB,aAAa;AAAA,UACb,mBAAmB;AAAA,QACrB;AAGA,YAAI,YAAY,UAAa,YAAY,MAAM;AAC7C,cAAI,QAAQ,WAAW,MAAM;AAC3B,qBAAS,SAAS;AAAA,UACpB;AACA,cAAI,QAAQ,kBAAkB,MAAM;AAClC,qBAAS,gBAAgB;AAAA,UAC3B;AACA,mBAAS,mBACP,QAAQ,qBAAqB,OAAO,QAAQ,mBAAmB;AACjE,mBAAS,kBACP,QAAQ,oBAAoB,OAAO,QAAQ,kBAAkB;AAE/D,cAAI,OAAO,QAAQ,sBAAsB,aAAa;AACpD,gBACE,QAAQ,sBAAsB,WAC9B,QAAQ,sBAAsB,YAC9B,QAAQ,sBAAsB,YAC9B;AACA,uBAAS,oBAAoB,QAAQ;AAAA,YACvC,OAAO;AACL,oBAAM,IAAI;AAAA,gBACR,mGAAmG,QAAQ;AAAA,cAC7G;AAAA,YACF;AAAA,UACF;AAEA,cAAI,OAAO,QAAQ,gBAAgB,aAAa;AAC9C,gBACE,QAAQ,gBAAgB,WACxB,QAAQ,gBAAgB,YACxB,QAAQ,gBAAgB,YACxB;AACA,uBAAS,cAAc,QAAQ;AAAA,YACjC,OAAO;AACL,oBAAM,IAAI;AAAA,gBACR,6FAA6F,QAAQ;AAAA,cACvG;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,YAAI,IACF,IACA,UAAU;AAAA,UACR,KAAK;AAAA,UACL,MAAM;AAAA,UACN,KAAK;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,QACL,GACA,MACA,QAAQ,SAAU,GAAG;AAGnB,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,SAAS;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,QACF,GACA,OAAO,SAAU,GAAG;AAGlB,cAAI,KAAK,MAAM,IAAI;AACjB,kBAAM,eAAe,IAAI,mBAAmB,KAAK,GAAG;AAAA,UACtD;AAKA,eAAK,KAAK,OAAO,EAAE;AACnB,gBAAM;AACN,iBAAO;AAAA,QACT,GACA,SAAS,WAAY;AAGnB,cAAIG,SACFC,UAAS;AAEX,cAAI,OAAO,KAAK;AACd,YAAAA,UAAS;AACT,iBAAK,GAAG;AAAA,UACV;AACA,iBAAO,MAAM,OAAO,MAAM,KAAK;AAC7B,YAAAA,WAAU;AACV,iBAAK;AAAA,UACP;AACA,cAAI,OAAO,KAAK;AACd,YAAAA,WAAU;AACV,mBAAO,KAAK,KAAK,MAAM,OAAO,MAAM,KAAK;AACvC,cAAAA,WAAU;AAAA,YACZ;AAAA,UACF;AACA,cAAI,OAAO,OAAO,OAAO,KAAK;AAC5B,YAAAA,WAAU;AACV,iBAAK;AACL,gBAAI,OAAO,OAAO,OAAO,KAAK;AAC5B,cAAAA,WAAU;AACV,mBAAK;AAAA,YACP;AACA,mBAAO,MAAM,OAAO,MAAM,KAAK;AAC7B,cAAAA,WAAU;AACV,mBAAK;AAAA,YACP;AAAA,UACF;AACA,UAAAD,UAAS,CAACC;AACV,cAAI,CAAC,SAASD,OAAM,GAAG;AACrB,kBAAM,YAAY;AAAA,UACpB,OAAO;AACL,gBAAI,aAAa;AAAM,0BAAY;AAGnC,gBAAIC,QAAO,SAAS;AAClB,qBAAO,SAAS,gBACZA,UACA,SAAS,kBACT,OAAOA,OAAM,IACb,IAAI,UAAUA,OAAM;AAAA;AAExB,qBAAO,CAAC,SAAS,mBACbD,UACA,SAAS,kBACT,OAAOA,OAAM,IACb,IAAI,UAAUA,OAAM;AAAA,UAC5B;AAAA,QACF,GACA,SAAS,WAAY;AAGnB,cAAI,KACF,GACAC,UAAS,IACT;AAIF,cAAI,OAAO,KAAK;AACd,gBAAI,UAAU;AACd,mBAAO,KAAK,GAAG;AACb,kBAAI,OAAO,KAAK;AACd,oBAAI,KAAK,IAAI;AAAS,kBAAAA,WAAU,KAAK,UAAU,SAAS,KAAK,CAAC;AAC9D,qBAAK;AACL,uBAAOA;AAAA,cACT;AACA,kBAAI,OAAO,MAAM;AACf,oBAAI,KAAK,IAAI;AAAS,kBAAAA,WAAU,KAAK,UAAU,SAAS,KAAK,CAAC;AAC9D,qBAAK;AACL,oBAAI,OAAO,KAAK;AACd,0BAAQ;AACR,uBAAK,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AACzB,0BAAM,SAAS,KAAK,GAAG,EAAE;AACzB,wBAAI,CAAC,SAAS,GAAG,GAAG;AAClB;AAAA,oBACF;AACA,4BAAQ,QAAQ,KAAK;AAAA,kBACvB;AACA,kBAAAA,WAAU,OAAO,aAAa,KAAK;AAAA,gBACrC,WAAW,OAAO,QAAQ,QAAQ,UAAU;AAC1C,kBAAAA,WAAU,QAAQ;AAAA,gBACpB,OAAO;AACL;AAAA,gBACF;AACA,0BAAU;AAAA,cACZ;AAAA,YACF;AAAA,UACF;AACA,gBAAM,YAAY;AAAA,QACpB,GACA,QAAQ,WAAY;AAGlB,iBAAO,MAAM,MAAM,KAAK;AACtB,iBAAK;AAAA,UACP;AAAA,QACF,GACA,OAAO,WAAY;AAGjB,kBAAQ,IAAI;AAAA,YACV,KAAK;AACH,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,qBAAO;AAAA,YACT,KAAK;AACH,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,qBAAO;AAAA,YACT,KAAK;AACH,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,mBAAK,GAAG;AACR,qBAAO;AAAA,UACX;AACA,gBAAM,iBAAiB,KAAK,GAAG;AAAA,QACjC,GACA,OACA,QAAQ,WAAY;AAGlB,cAAIC,SAAQ,CAAC;AAEb,cAAI,OAAO,KAAK;AACd,iBAAK,GAAG;AACR,kBAAM;AACN,gBAAI,OAAO,KAAK;AACd,mBAAK,GAAG;AACR,qBAAOA;AAAA,YACT;AACA,mBAAO,IAAI;AACT,cAAAA,OAAM,KAAK,MAAM,CAAC;AAClB,oBAAM;AACN,kBAAI,OAAO,KAAK;AACd,qBAAK,GAAG;AACR,uBAAOA;AAAA,cACT;AACA,mBAAK,GAAG;AACR,oBAAM;AAAA,YACR;AAAA,UACF;AACA,gBAAM,WAAW;AAAA,QACnB,GACA,SAAS,WAAY;AAGnB,cAAI,KACFC,UAAS,uBAAO,OAAO,IAAI;AAE7B,cAAI,OAAO,KAAK;AACd,iBAAK,GAAG;AACR,kBAAM;AACN,gBAAI,OAAO,KAAK;AACd,mBAAK,GAAG;AACR,qBAAOA;AAAA,YACT;AACA,mBAAO,IAAI;AACT,oBAAM,OAAO;AACb,oBAAM;AACN,mBAAK,GAAG;AACR,kBACE,SAAS,WAAW,QACpB,OAAO,eAAe,KAAKA,SAAQ,GAAG,GACtC;AACA,sBAAM,oBAAoB,MAAM,GAAG;AAAA,cACrC;AAEA,kBAAI,eAAe,KAAK,GAAG,MAAM,MAAM;AACrC,oBAAI,SAAS,gBAAgB,SAAS;AACpC,wBAAM,8CAA8C;AAAA,gBACtD,WAAW,SAAS,gBAAgB,UAAU;AAC5C,wBAAM;AAAA,gBACR,OAAO;AACL,kBAAAA,QAAO,OAAO,MAAM;AAAA,gBACtB;AAAA,cACF,WAAW,qBAAqB,KAAK,GAAG,MAAM,MAAM;AAClD,oBAAI,SAAS,sBAAsB,SAAS;AAC1C,wBAAM,gDAAgD;AAAA,gBACxD,WAAW,SAAS,sBAAsB,UAAU;AAClD,wBAAM;AAAA,gBACR,OAAO;AACL,kBAAAA,QAAO,OAAO,MAAM;AAAA,gBACtB;AAAA,cACF,OAAO;AACL,gBAAAA,QAAO,OAAO,MAAM;AAAA,cACtB;AAEA,oBAAM;AACN,kBAAI,OAAO,KAAK;AACd,qBAAK,GAAG;AACR,uBAAOA;AAAA,cACT;AACA,mBAAK,GAAG;AACR,oBAAM;AAAA,YACR;AAAA,UACF;AACA,gBAAM,YAAY;AAAA,QACpB;AAEF,gBAAQ,WAAY;AAIlB,gBAAM;AACN,kBAAQ,IAAI;AAAA,YACV,KAAK;AACH,qBAAO,OAAO;AAAA,YAChB,KAAK;AACH,qBAAO,MAAM;AAAA,YACf,KAAK;AACH,qBAAO,OAAO;AAAA,YAChB,KAAK;AACH,qBAAO,OAAO;AAAA,YAChB;AACE,qBAAO,MAAM,OAAO,MAAM,MAAM,OAAO,IAAI,KAAK;AAAA,UACpD;AAAA,QACF;AAKA,eAAO,SAAU,QAAQ,SAAS;AAChC,cAAI;AAEJ,iBAAO,SAAS;AAChB,eAAK;AACL,eAAK;AACL,mBAAS,MAAM;AACf,gBAAM;AACN,cAAI,IAAI;AACN,kBAAM,cAAc;AAAA,UACtB;AAQA,iBAAO,OAAO,YAAY,aACrB,SAAS,KAAK,QAAQ,KAAK;AAC1B,gBAAI,GACF,GACAC,SAAQ,OAAO;AACjB,gBAAIA,UAAS,OAAOA,WAAU,UAAU;AACtC,qBAAO,KAAKA,MAAK,EAAE,QAAQ,SAAUC,IAAG;AACtC,oBAAI,KAAKD,QAAOC,EAAC;AACjB,oBAAI,MAAM,QAAW;AACnB,kBAAAD,OAAMC,MAAK;AAAA,gBACb,OAAO;AACL,yBAAOD,OAAMC;AAAA,gBACf;AAAA,cACF,CAAC;AAAA,YACH;AACA,mBAAO,QAAQ,KAAK,QAAQ,KAAKD,MAAK;AAAA,UACxC,EAAG,EAAE,IAAI,OAAO,GAAG,EAAE,IACrB;AAAA,QACN;AAAA,MACF;AAEA,aAAO,UAAU;AAAA;AAAA;;;AC1bjB;AAAA;AAAA,UAAI,iBAAiB,oBAA8B;AACnD,UAAI,aAAiB;AAErB,aAAO,UAAU,SAAS,SAAS;AAC/B,eAAQ;AAAA,UACJ,OAAO,WAAW,OAAO;AAAA,UACzB,WAAW;AAAA,QACf;AAAA,MACJ;AAEA,aAAO,QAAQ,QAAQ,WAAW;AAClC,aAAO,QAAQ,YAAY;AAAA;AAAA;;;ACX3B;AAAA;AAAA,OAAC,SAAU,MAAM,SAAS,YAAY;AACpC,YAAI,OAAO,WAAW,eAAe,OAAO;AAAS,iBAAO,UAAU,WAAW;AAAA,iBACxE,OAAO,WAAW,cAAc,OAAO;AAAK,iBAAO,UAAU;AAAA;AACjE,kBAAQ,QAAQ,WAAW;AAAA,MAClC,GAAG,WAAW,SAAM,WAAY;AAE9B,iBAAS,UAAW,UAAU;AAC5B,cAAI,cAAc,CAAC;AACnB,cAAI,SAAS,WAAW,GAAG;AAAE,mBAAO;AAAA,UAAI;AAExC,cAAI,OAAO,SAAS,OAAO,UAAU;AACnC,kBAAM,IAAI,UAAU,oCAAoC,SAAS,EAAE;AAAA,UACrE;AAGA,cAAI,SAAS,GAAG,MAAM,cAAc,KAAK,SAAS,SAAS,GAAG;AAC5D,gBAAI,QAAQ,SAAS,MAAM;AAC3B,qBAAS,KAAK,QAAQ,SAAS;AAAA,UACjC;AAGA,cAAI,SAAS,GAAG,MAAM,cAAc,GAAG;AACrC,qBAAS,KAAK,SAAS,GAAG,QAAQ,iBAAiB,QAAQ;AAAA,UAC7D,OAAO;AACL,qBAAS,KAAK,SAAS,GAAG,QAAQ,iBAAiB,OAAO;AAAA,UAC5D;AAEA,mBAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,gBAAI,YAAY,SAAS;AAEzB,gBAAI,OAAO,cAAc,UAAU;AACjC,oBAAM,IAAI,UAAU,oCAAoC,SAAS;AAAA,YACnE;AAEA,gBAAI,cAAc,IAAI;AAAE;AAAA,YAAU;AAElC,gBAAI,IAAI,GAAG;AAET,0BAAY,UAAU,QAAQ,UAAU,EAAE;AAAA,YAC5C;AACA,gBAAI,IAAI,SAAS,SAAS,GAAG;AAE3B,0BAAY,UAAU,QAAQ,UAAU,EAAE;AAAA,YAC5C,OAAO;AAEL,0BAAY,UAAU,QAAQ,UAAU,GAAG;AAAA,YAC7C;AAEA,wBAAY,KAAK,SAAS;AAAA,UAE5B;AAEA,cAAI,MAAM,YAAY,KAAK,GAAG;AAI9B,gBAAM,IAAI,QAAQ,mBAAmB,IAAI;AAGzC,cAAI,QAAQ,IAAI,MAAM,GAAG;AACzB,gBAAM,MAAM,MAAM,KAAK,MAAM,SAAS,IAAI,MAAK,MAAM,MAAM,KAAK,GAAG;AAEnE,iBAAO;AAAA,QACT;AAEA,eAAO,WAAY;AACjB,cAAI;AAEJ,cAAI,OAAO,UAAU,OAAO,UAAU;AACpC,oBAAQ,UAAU;AAAA,UACpB,OAAO;AACL,oBAAQ,CAAC,EAAE,MAAM,KAAK,SAAS;AAAA,UACjC;AAEA,iBAAO,UAAU,KAAK;AAAA,QACxB;AAAA,MAEF,CAAC;AAAA;AAAA;;;AC7ED;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,MAAAE,aAAe;AACf,MAAAC,8BAAmB;;;ACDnB,gCAA4B;AAE5B,MAAO,wBAAS,OAAO,WAAW,eAAe,OAAO,SACrD,OAAO,WAAW,eAAe,OAAO,SACzC,wBAAAC;;;ACJF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,sBAA0B;AAC1B,qBAA2B;AAC3B,MAAAC,8BAAmB;;;ACJnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAe;AACf,mCAAmB;;;ACDnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACO,MAAM,aAAa,OAAO,WAAW;AAE5C,MAAM,cAAc;AAEb,WAAS,oBAAoB,OAA4B;AAC9D,WAAO,IAAI,WAAW,KAAK,EAAE,OAAO,CAAC,MAAM,SAAS,OAAO,OAAO,aAAa,IAAI,GAAG,EAAE;AAAA,EAC1F;AAEO,WAAS,cAAc,GAAwB;AACpD,WAAO,aAAa,KAAK,oBAAoB,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,SAAS,QAAQ;AAAA,EACrF;AAEO,WAAS,QAAQ,QAAoB;AAC1C,WAAO,CAAC,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA,EACxE;AAOO,WAAS,gBAAgB,KAAqB;AACnD,WAAO,IAAI,QAAQ,OAAO,EAAE;AAAA,EAC9B;AAEO,WAAS,aAAa,KAAqB;AAChD,WAAO,KAAK,gBAAgB,GAAG;AAAA,EACjC;AAEA,WAAS,UAAU,KAAa,QAAgB,MAAe,UAAU,aAAqB;AAC5F,UAAM,OAAO,SAAS,IAAI;AAC1B,QAAI,SAAS;AACb,QAAI,OAAO,GAAG;AACZ,YAAM,MAAM,QAAQ,OAAO,IAAI;AAC/B,eAAS,OAAO,MAAM,MAAM,MAAM;AAAA,IACpC;AACA,WAAO;AAAA,EACT;AAEO,WAAS,QAAQ,KAAa,QAAgB,UAAU,aAAqB;AAClF,WAAO,UAAU,KAAK,QAAQ,MAAM,OAAO;AAAA,EAC7C;AAEO,WAAS,eAAe,QAAgB,WAAW,GAAW;AACnE,UAAM,YAAY,SAAS;AAC3B,WAAO,aAAc,SAAS,aAAa,WAAY,WAAW,WAAW;AAAA,EAC/E;AAEO,WAAS,cAAc,KAAa,WAAW,GAAG,UAAU,aAAqB;AACtF,WAAO,QAAQ,KAAK,eAAe,IAAI,QAAQ,QAAQ,GAAG,OAAO;AAAA,EACnE;AAEO,WAAS,YAAY,KAAqB;AAC/C,UAAM,gBAAgB,GAAG;AACzB,UAAM,cAAc,KAAK,CAAC;AAC1B,QAAI,KAAK;AACP,YAAM,aAAa,GAAG;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAGO,WAAS,YAAY,KAAyB;AACnD,WAAO,IAAI,YAAY,EAAE,OAAO,GAAG;AAAA,EACrC;;;AD1DO,WAAS,MAAM,KAAsB;AAC1C,WAAO,iBAAiB,KAAK,GAAG;AAAA,EAClC;AAEO,WAAS,KAAK,QAAsB,MAAuB;AAChE,QAAI,OAAO,WAAW,UAAU;AAE9B,eAAS,OAAO,YAAY;AAAA,IAC9B;AACA,QAAI,OAAO,WAAW,YAAY,MAAM,MAAM,KAAK,CAAC;AAClD,aAAO,IAAI,UAAAC,QAAG,gBAAgB,MAAM,GAAG,KAAK;AAC9C,WAAO,IAAI,UAAAA,QAAG,QAAQ,IAAI;AAAA,EAC5B;AAEO,WAAS,MAAM,QAAoB;AACxC,WAAO,aAAa,OAAO,SAAS,KAAK,CAAC;AAAA,EAC5C;AAEO,WAAS,mBAAmB,KAAqB;AACtD,WAAO,KAAK,KAAK,IAAI,QAAQ,OAAO,EAAE,GAAG,EAAE,SAAS;AAAA,EACtD;AAEO,WAAS,OAAO,KAA2B;AAChD,QAAI,UAAAA,QAAG,KAAK,GAAG,GAAG;AAChB,aAAO,IAAI,SAAS;AAAA,IACtB;AACA,WAAO,KAAK,GAAG,EAAE,SAAS;AAAA,EAC5B;AAQO,WAAS,cACd,OACA,YACA,YACA,YAAY,IACZ;AACA,UAAM,gBAAgB,cAAc,KAAK,mBAAmB,WAAW;AACvE,UAAM,UAAU,KAAK,KAAK;AAC1B,mCAAAC;AAAA,MACE,QAAQ,IAAI,KAAK,UAAU,CAAC,KAAK,QAAQ,GAAG,KAAK,UAAU,CAAC;AAAA,MAC5D,yBAAyB;AAAA,IAC3B;AAAA,EACF;AAEO,WAAS,sCAAsC,aAAuC;AAC3F,WAAO,YAAY,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;AAAA,EACpD;AAEO,WAAS,0CAA0C,aAAuC;AAC/F,WAAO,YAAY,IAAI,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC,CAAC;AAAA,EAC9C;AAEO,MAAM,sBAAsB,CAAC,UAAkB,QAAQ,KAAK,KAAK;AACjE,MAAM,cAAc,CAAC,UAAkB,MAAM,KAAK,KAAK,CAAC;AAExD,WAAS,iBAAiB,OAAe;AAC9C,QAAI,MAAM,KAAK,GAAG;AAChB,aAAO,mBAAmB,KAAK;AAAA,IACjC;AACA,QAAI,oBAAoB,KAAK,GAAG;AAC9B,aAAO;AAAA,IACT;AACA,UAAM,IAAI,MAAM,GAAG,oDAAoD;AAAA,EACzE;AAEO,WAAS,aAAa,OAAe;AAC1C,QAAI,MAAM,KAAK,GAAG;AAChB,aAAO;AAAA,IACT;AACA,QAAI,oBAAoB,KAAK,GAAG;AAC9B,aAAO,YAAY,KAAK;AAAA,IAC1B;AACA,UAAM,IAAI,MAAM,GAAG,oDAAoD;AAAA,EACzE;AAEO,WAAS,kBAAkB,OAAsB;AACtD,WAAO,MAAM,IAAI,CAAC,OAAO,aAAa,EAAE,CAAC;AAAA,EAC3C;AAEO,MAAM,cAAc,CAAC,WAA4B,CAAC,OAAO,SAAS;;;ADvFlE,MAAM,OAAO,KAAK,CAAC;AACnB,MAAM,MAAM,KAAK,CAAC;AAClB,MAAM,MAAM,KAAK,CAAC;AAClB,MAAM,WAAW,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG;AAC3C,MAAM,WAAW,IAAI,IAAI,KAAK,GAAG,CAAC;AAElC,MAAK,kBAAL,kBAAKC,qBAAL;AACL,IAAAA,iBAAA,aAAU;AACV,IAAAA,iBAAA,aAAU;AACV,IAAAA,iBAAA,cAAW;AAHD,WAAAA;AAAA,KAAA;AAKL,MAAK,wBAAL,kBAAKC,2BAAL;AACL,IAAAA,uBAAA,aAAU;AACV,IAAAA,uBAAA,YAAS;AACT,IAAAA,uBAAA,oBAAiB;AACjB,IAAAA,uBAAA,YAAS;AACT,IAAAA,uBAAA,gBAAa;AALH,WAAAA;AAAA,KAAA;AAQL,MAAM,MAAM;AAAA,IACjB,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AAMO,MAAM,cAAc;AACpB,MAAM,YAAY;AAClB,MAAM,aAAa;AACnB,MAAM,WAAW;AACjB,MAAM,QAAQ;AACd,MAAM,OAAO;AACb,MAAM,gBAAgB;AACtB,MAAM,kBAAkB;AAAA,IAC7B;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA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","names":["module","exports","assert","BN","Buffer","toString","allocate","self","comb10MulTo","prime","assert","global","err","hash","assert","hexToBytes","require_utils","hexToBytes","require_bn","module","exports","assert","BN","Buffer","toString","self","comb10MulTo","prime","require_utils","toHex","require_utils","BN","cachedProperty","crypto","BN","assert","zero","BN","assert","obj","BN","BN","assert","require_utils","assert","toHex","assert","require_common","common","require__","common","assert","require__","require__","common","assert","require__","common","assert","curves","assert","curve","assert","BN","assert","ec","sign","verify","BN","assert","BN","curves","assert","EC","genKeyPair","sign","verify","e","require_key","assert","sign","verify","require_signature","BN","assert","toHex","curves","assert","sign","verify","hash","elliptic","BigNumber","ONE","sign","compare","format","JSON","k","v","number","string","array","object","value","k","import_bn","import_minimalistic_assert","isomorphicFetch","import_minimalistic_assert","BN","assert","StarknetChainId","TransactionHashPrefix","import_minimalistic_assert","elliptic","hashJS","assert","assert","version","Json","rank","import_url_join","urljoin","CustomError","urljoin","err","assert","BN","import_minimalistic_assert","assert","version","version","LogLevel","ErrorCode","version","error","version","version"]}