{"version":3,"file":"index.iife.js","sources":["../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/rollup-plugin-node-builtins/src/es6/empty.js","../node_modules/tweetnacl/nacl-fast.js","../node_modules/rollup-plugin-node-globals/src/global.js","../node_modules/buffer-es6/base64.js","../node_modules/buffer-es6/ieee754.js","../node_modules/buffer-es6/isArray.js","../node_modules/buffer-es6/index.js","../src/util/to-buffer.js","../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","../node_modules/@babel/runtime/regenerator/index.js","../node_modules/@babel/runtime/helpers/asyncToGenerator.js","../node_modules/bn.js/lib/bn.js","../node_modules/safe-buffer/index.js","../node_modules/base-x/index.js","../node_modules/bs58/index.js","../node_modules/crypto-hash/browser.js","../src/publickey.js","../src/account.js","../node_modules/process-es6/browser.js","../node_modules/rollup-plugin-node-builtins/src/es6/inherits.js","../node_modules/rollup-plugin-node-builtins/src/es6/util.js","../node_modules/rollup-plugin-node-builtins/src/es6/assert.js","../node_modules/buffer-layout/lib/Layout.js","../src/timing.js","../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/iterableToArray.js","../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/toConsumableArray.js","../src/layout.js","../src/util/shortvec-encoding.js","../src/message.js","../src/transaction.js","../src/sysvar.js","../node_modules/rollup-plugin-node-builtins/src/es6/punycode.js","../node_modules/rollup-plugin-node-builtins/src/es6/qs.js","../node_modules/rollup-plugin-node-builtins/src/es6/url.js","../node_modules/node-fetch/browser.js","../node_modules/uuid/lib/rng-browser.js","../node_modules/uuid/lib/bytesToUuid.js","../node_modules/uuid/v4.js","../node_modules/jayson/lib/generateRequest.js","../node_modules/jayson/lib/client/browser/index.js","../node_modules/superstruct/lib/index.es.js","../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../node_modules/@babel/runtime/helpers/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/inherits.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/getPrototypeOf.js","../node_modules/eventemitter3/index.js","../node_modules/rpc-websockets/dist/lib/client/websocket.browser.js","../node_modules/ms/index.js","../node_modules/debug/src/debug.js","../node_modules/debug/src/browser.js","../node_modules/101/exists.js","../node_modules/101/is-object.js","../node_modules/101/is-function.js","../node_modules/101/not.js","../node_modules/assert-args/lib/is-optional-key.js","../node_modules/assert-args/lib/is-spread-key.js","../node_modules/101/is-integer.js","../node_modules/101/is-string.js","../node_modules/assert-args/lib/assert-type.js","../node_modules/is-capitalized/index.js","../node_modules/is-class/is-class.js","../node_modules/assert-args/lib/is-class.js","../node_modules/assert-args/lib/starts-with-vowel.js","../node_modules/compound-subject/compound-subject.js","../node_modules/101/is-empty.js","../node_modules/assert-args/lib/multi-validate.js","../node_modules/assert-args/lib/validate.js","../node_modules/assert-args/index.js","../node_modules/circular-json/build/circular-json.node.js","../node_modules/rpc-websockets/dist/lib/client.js","../node_modules/rpc-websockets/dist/index.browser.js","../src/fee-calculator.js","../src/nonce-account.js","../src/util/sleep.js","../src/connection.js","../src/util/send-and-confirm-transaction.js","../src/instruction.js","../src/system-program.js","../src/loader.js","../src/bpf-loader.js","../src/stake-program.js","../src/validator-info.js","../src/vote-account.js","../src/util/send-and-confirm-raw-transaction.js","../src/util/cluster.js","../src/index.js"],"sourcesContent":["function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","export default {};\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar 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 crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\nexport function toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nexport function fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","\nexport function read (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexport function write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nexport default Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\nimport * as base64 from './base64'\nimport * as ieee754 from './ieee754'\nimport isArray from './isArray'\n\nexport var INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : true\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength()\nexport {_kMaxLength as kMaxLength};\nfunction typedArraySupport () {\n return true;\n // rollup issues\n // try {\n // var arr = new Uint8Array(1)\n // arr.__proto__ = {\n // __proto__: Uint8Array.prototype,\n // foo: function () { return 42 }\n // }\n // return arr.foo() === 42 && // typed array instances can be augmented\n // typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n // arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n // } catch (e) {\n // return false\n // }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nexport function Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n // Object.defineProperty(Buffer, Symbol.species, {\n // value: null,\n // configurable: true\n // })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nexport function SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nexport function isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n","// @flow\n\nexport const toBuffer = (arr: Buffer | Uint8Array | Array): Buffer => {\n if (arr instanceof Buffer) {\n return arr;\n } else if (arr instanceof Uint8Array) {\n return Buffer.from(arr.buffer, arr.byteOffset, arr.byteLength);\n } else {\n return Buffer.from(arr);\n }\n};\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = require(\"regenerator-runtime\");\n","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","(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 Buffer = require('buffer').Buffer;\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 }\n\n if (base === 16) {\n this._parseHex(number, start);\n } else {\n this._parseBase(number, base, start);\n }\n\n if (number[0] === '-') {\n this.negative = 1;\n }\n\n this._strip();\n\n if (endian !== 'le') return;\n\n this._initArray(this.toArray(), base, endian);\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 parseHex (str, start, end) {\n var r = 0;\n var len = Math.min(str.length, end);\n var z = 0;\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n var b;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n b = c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n\n r |= b;\n z |= b;\n }\n\n assert(!(z & 0xf0), 'Invalid character in ' + str);\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start) {\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 var j, w;\n // Scan 24-bit chunks and add them to the number\n var off = 0;\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n w = parseHex(number, i, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n if (i + 6 !== start) {\n w = parseHex(number, start, i + 6);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\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\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 ? '';\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.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","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// base-x encoding\n// Forked from https://github.com/cryptocoinjs/bs58\n// Originally written by Mike Hearn for BitcoinJ\n// Copyright (c) 2011 Google Inc\n// Ported to JavaScript by Stefan Thomas\n// Merged Buffer refactorings from base58-native by Stephen Pair\n// Copyright (c) 2013 BitPay Inc\n\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function base (ALPHABET) {\n var ALPHABET_MAP = {}\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n\n // pre-compute lookup table\n for (var z = 0; z < ALPHABET.length; z++) {\n var x = ALPHABET.charAt(z)\n\n if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')\n ALPHABET_MAP[x] = z\n }\n\n function encode (source) {\n if (source.length === 0) return ''\n\n var digits = [0]\n for (var i = 0; i < source.length; ++i) {\n for (var j = 0, carry = source[i]; j < digits.length; ++j) {\n carry += digits[j] << 8\n digits[j] = carry % BASE\n carry = (carry / BASE) | 0\n }\n\n while (carry > 0) {\n digits.push(carry % BASE)\n carry = (carry / BASE) | 0\n }\n }\n\n var string = ''\n\n // deal with leading zeros\n for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER\n // convert digits to a string\n for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]\n\n return string\n }\n\n function decodeUnsafe (string) {\n if (typeof string !== 'string') throw new TypeError('Expected String')\n if (string.length === 0) return Buffer.allocUnsafe(0)\n\n var bytes = [0]\n for (var i = 0; i < string.length; i++) {\n var value = ALPHABET_MAP[string[i]]\n if (value === undefined) return\n\n for (var j = 0, carry = value; j < bytes.length; ++j) {\n carry += bytes[j] * BASE\n bytes[j] = carry & 0xff\n carry >>= 8\n }\n\n while (carry > 0) {\n bytes.push(carry & 0xff)\n carry >>= 8\n }\n }\n\n // deal with leading zeros\n for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {\n bytes.push(0)\n }\n\n return Buffer.from(bytes.reverse())\n }\n\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) return buffer\n\n throw new Error('Non-base' + BASE + ' character')\n }\n\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\n","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","/* eslint-env browser */\n/* global globalThis:readonly */\n'use strict';\n\n// Ponyfill for `globalThis`\nconst _globalThis = (() => {\n\tif (typeof globalThis !== 'undefined') {\n\t\treturn globalThis;\n\t}\n\n\tif (typeof self !== 'undefined') {\n\t\treturn self;\n\t}\n\n\t/* istanbul ignore next */\n\tif (typeof window !== 'undefined') {\n\t\treturn window;\n\t}\n\n\t/* istanbul ignore next */\n\tif (typeof global !== 'undefined') {\n\t\treturn global;\n\t}\n})();\n\nconst bufferToHex = buffer => {\n\tconst view = new DataView(buffer);\n\n\tlet hexCodes = '';\n\tfor (let i = 0; i < view.byteLength; i += 4) {\n\t\thexCodes += view.getUint32(i).toString(16).padStart(8, '0');\n\t}\n\n\treturn hexCodes;\n};\n\nconst create = algorithm => async (buffer, options) => {\n\tif (typeof buffer === 'string') {\n\t\tbuffer = new _globalThis.TextEncoder().encode(buffer);\n\t}\n\n\toptions = {\n\t\toutputFormat: 'hex',\n\t\t...options\n\t};\n\n\tconst hash = await _globalThis.crypto.subtle.digest(algorithm, buffer);\n\n\treturn options.outputFormat === 'hex' ? bufferToHex(hash) : hash;\n};\n\nexports.sha1 = create('SHA-1');\nexports.sha256 = create('SHA-256');\nexports.sha384 = create('SHA-384');\nexports.sha512 = create('SHA-512');\n","// @flow\n\nimport BN from 'bn.js';\nimport bs58 from 'bs58';\nimport nacl from 'tweetnacl';\nimport {sha256} from 'crypto-hash';\n\n//$FlowFixMe\nlet naclLowLevel = nacl.lowlevel;\n\ntype PublicKeyNonce = [PublicKey, number]; // This type exists to workaround an esdoc parse error\n\n/**\n * A public key\n */\nexport class PublicKey {\n _bn: BN;\n\n /**\n * Create a new PublicKey object\n */\n constructor(value: number | string | Buffer | Uint8Array | Array) {\n if (typeof value === 'string') {\n // assume base 58 encoding by default\n const decoded = bs58.decode(value);\n if (decoded.length != 32) {\n throw new Error(`Invalid public key input`);\n }\n this._bn = new BN(decoded);\n } else {\n this._bn = new BN(value);\n }\n\n if (this._bn.byteLength() > 32) {\n throw new Error(`Invalid public key input`);\n }\n }\n\n /**\n * Checks if two publicKeys are equal\n */\n equals(publicKey: PublicKey): boolean {\n return this._bn.eq(publicKey._bn);\n }\n\n /**\n * Return the base-58 representation of the public key\n */\n toBase58(): string {\n return bs58.encode(this.toBuffer());\n }\n\n /**\n * Return the Buffer representation of the public key\n */\n toBuffer(): Buffer {\n const b = this._bn.toArrayLike(Buffer);\n if (b.length === 32) {\n return b;\n }\n\n const zeroPad = Buffer.alloc(32);\n b.copy(zeroPad, 32 - b.length);\n return zeroPad;\n }\n\n /**\n * Returns a string representation of the public key\n */\n toString(): string {\n return this.toBase58();\n }\n\n /**\n * Derive a public key from another key, a seed, and a program ID.\n */\n static async createWithSeed(\n fromPublicKey: PublicKey,\n seed: string,\n programId: PublicKey,\n ): Promise {\n const buffer = Buffer.concat([\n fromPublicKey.toBuffer(),\n Buffer.from(seed),\n programId.toBuffer(),\n ]);\n const hash = await sha256(new Uint8Array(buffer));\n return new PublicKey(Buffer.from(hash, 'hex'));\n }\n\n /**\n * Derive a program address from seeds and a program ID.\n */\n static async createProgramAddress(\n seeds: Array,\n programId: PublicKey,\n ): Promise {\n let buffer = Buffer.alloc(0);\n seeds.forEach(function (seed) {\n buffer = Buffer.concat([buffer, Buffer.from(seed)]);\n });\n buffer = Buffer.concat([\n buffer,\n programId.toBuffer(),\n Buffer.from('ProgramDerivedAddress'),\n ]);\n let hash = await sha256(new Uint8Array(buffer));\n let publicKeyBytes = new BN(hash, 16).toArray();\n if (is_on_curve(publicKeyBytes)) {\n throw new Error(`Invalid seeds, address must fall off the curve`);\n }\n return new PublicKey(publicKeyBytes);\n }\n\n /**\n * Find a valid program address\n *\n * Valid program addresses must fall off the ed25519 curve. This function\n * iterates a nonce until it finds one that when combined with the seeds\n * results in a valid program address.\n */\n static async findProgramAddress(\n seeds: Array,\n programId: PublicKey,\n ): Promise {\n let nonce = 255;\n let address;\n while (nonce != 0) {\n try {\n const seedsWithNonce = seeds.concat(Buffer.from([nonce]));\n address = await this.createProgramAddress(seedsWithNonce, programId);\n } catch (err) {\n nonce--;\n continue;\n }\n return [address, nonce];\n }\n throw new Error(`Unable to find a viable program address nonce`);\n }\n}\n\n// Check that a pubkey is on the curve.\n// This function and its dependents were sourced from:\n// https://github.com/dchest/tweetnacl-js/blob/f1ec050ceae0861f34280e62498b1d3ed9c350c6/nacl.js#L792\nfunction is_on_curve(p) {\n var r = [\n naclLowLevel.gf(),\n naclLowLevel.gf(),\n naclLowLevel.gf(),\n naclLowLevel.gf(),\n ];\n\n var t = naclLowLevel.gf(),\n chk = naclLowLevel.gf(),\n num = naclLowLevel.gf(),\n den = naclLowLevel.gf(),\n den2 = naclLowLevel.gf(),\n den4 = naclLowLevel.gf(),\n den6 = naclLowLevel.gf();\n\n naclLowLevel.set25519(r[2], gf1);\n naclLowLevel.unpack25519(r[1], p);\n naclLowLevel.S(num, r[1]);\n naclLowLevel.M(den, num, naclLowLevel.D);\n naclLowLevel.Z(num, num, r[2]);\n naclLowLevel.A(den, r[2], den);\n\n naclLowLevel.S(den2, den);\n naclLowLevel.S(den4, den2);\n naclLowLevel.M(den6, den4, den2);\n naclLowLevel.M(t, den6, num);\n naclLowLevel.M(t, t, den);\n\n naclLowLevel.pow2523(t, t);\n naclLowLevel.M(t, t, num);\n naclLowLevel.M(t, t, den);\n naclLowLevel.M(t, t, den);\n naclLowLevel.M(r[0], t, den);\n\n naclLowLevel.S(chk, r[0]);\n naclLowLevel.M(chk, chk, den);\n if (neq25519(chk, num)) naclLowLevel.M(r[0], r[0], I);\n\n naclLowLevel.S(chk, r[0]);\n naclLowLevel.M(chk, chk, den);\n if (neq25519(chk, num)) return 0;\n return 1;\n}\nlet gf1 = naclLowLevel.gf([1]);\nlet I = naclLowLevel.gf([\n 0xa0b0,\n 0x4a0e,\n 0x1b27,\n 0xc4ee,\n 0xe478,\n 0xad2f,\n 0x1806,\n 0x2f43,\n 0xd7a7,\n 0x3dfb,\n 0x0099,\n 0x2b4d,\n 0xdf0b,\n 0x4fc1,\n 0x2480,\n 0x2b83,\n]);\nfunction neq25519(a, b) {\n var c = new Uint8Array(32),\n d = new Uint8Array(32);\n naclLowLevel.pack25519(c, a);\n naclLowLevel.pack25519(d, b);\n return naclLowLevel.crypto_verify_32(c, 0, d, 0);\n}\n","// @flow\nimport nacl from 'tweetnacl';\nimport type {KeyPair} from 'tweetnacl';\n\nimport {toBuffer} from './util/to-buffer';\nimport {PublicKey} from './publickey';\n\n/**\n * An account key pair (public and secret keys).\n */\nexport class Account {\n _keypair: KeyPair;\n\n /**\n * Create a new Account object\n *\n * If the secretKey parameter is not provided a new key pair is randomly\n * created for the account\n *\n * @param secretKey Secret key for the account\n */\n constructor(secretKey?: Buffer | Uint8Array | Array) {\n if (secretKey) {\n this._keypair = nacl.sign.keyPair.fromSecretKey(toBuffer(secretKey));\n } else {\n this._keypair = nacl.sign.keyPair();\n }\n }\n\n /**\n * The public key for this account\n */\n get publicKey(): PublicKey {\n return new PublicKey(this._keypair.publicKey);\n }\n\n /**\n * The **unencrypted** secret key for this account\n */\n get secretKey(): Buffer {\n return this._keypair.secretKey;\n }\n}\n","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nexport function nextTick(fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nexport function uptime() {\n var currentTime = new Date();\n var dif = currentTime - startTime;\n return dif / 1000;\n}\n\nexport default {\n nextTick: nextTick,\n title: title,\n browser: browser,\n env: env,\n argv: argv,\n version: version,\n versions: versions,\n on: on,\n addListener: addListener,\n once: once,\n off: off,\n removeListener: removeListener,\n removeAllListeners: removeAllListeners,\n emit: emit,\n binding: binding,\n cwd: cwd,\n chdir: chdir,\n umask: umask,\n hrtime: hrtime,\n platform: platform,\n release: release,\n config: config,\n uptime: uptime\n};\n","\nvar inherits;\nif (typeof Object.create === 'function'){\n inherits = function inherits(ctor, superCtor) {\n // implementation from standard node.js 'util' module\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} else {\n inherits = 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}\nexport default inherits;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\nimport process from 'process';\nvar formatRegExp = /%[sdj%]/g;\nexport function format(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexport function deprecate(fn, msg) {\n // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexport function debuglog(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = 0;\n debugs[set] = function() {\n var msg = format.apply(null, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nexport function inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n _extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexport function isArray(ar) {\n return Array.isArray(ar);\n}\n\nexport function isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nexport function isNull(arg) {\n return arg === null;\n}\n\nexport function isNullOrUndefined(arg) {\n return arg == null;\n}\n\nexport function isNumber(arg) {\n return typeof arg === 'number';\n}\n\nexport function isString(arg) {\n return typeof arg === 'string';\n}\n\nexport function isSymbol(arg) {\n return typeof arg === 'symbol';\n}\n\nexport function isUndefined(arg) {\n return arg === void 0;\n}\n\nexport function isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nexport function isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nexport function isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nexport function isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nexport function isFunction(arg) {\n return typeof arg === 'function';\n}\n\nexport function isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\n\nexport function isBuffer(maybeBuf) {\n return Buffer.isBuffer(maybeBuf);\n}\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexport function log() {\n console.log('%s - %s', timestamp(), format.apply(null, arguments));\n}\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nimport inherits from './inherits';\nexport {inherits}\n\nexport function _extend(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport default {\n inherits: inherits,\n _extend: _extend,\n log: log,\n isBuffer: isBuffer,\n isPrimitive: isPrimitive,\n isFunction: isFunction,\n isError: isError,\n isDate: isDate,\n isObject: isObject,\n isRegExp: isRegExp,\n isUndefined: isUndefined,\n isSymbol: isSymbol,\n isString: isString,\n isNumber: isNumber,\n isNullOrUndefined: isNullOrUndefined,\n isNull: isNull,\n isBoolean: isBoolean,\n isArray: isArray,\n inspect: inspect,\n deprecate: deprecate,\n format: format,\n debuglog: debuglog\n}\n","\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n// based on node assert, original notice:\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nimport {isBuffer} from 'buffer';\nimport {isPrimitive, inherits, isError, isFunction, isRegExp, isDate, inspect as utilInspect} from 'util';\nvar pSlice = Array.prototype.slice;\nvar _functionsHaveNames;\nfunction functionsHaveNames() {\n if (typeof _functionsHaveNames !== 'undefined') {\n return _functionsHaveNames;\n }\n return _functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n }());\n}\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nfunction assert(value, message) {\n if (!value) fail(value, true, message, '==', ok);\n}\nexport default assert;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!isFunction(func)) {\n return;\n }\n if (functionsHaveNames()) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = AssertionError;\nexport function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n}\n\n// assert.AssertionError instanceof Error\ninherits(AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames() || !isFunction(something)) {\n return utilInspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nexport function fail(actual, expected, message, operator, stackStartFunction) {\n throw new AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nexport function ok(value, message) {\n if (!value) fail(value, true, message, '==', ok);\n}\nassert.ok = ok;\nexport {ok as assert};\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\nassert.equal = equal;\nexport function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', equal);\n}\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\nassert.notEqual = notEqual;\nexport function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', notEqual);\n }\n}\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\nassert.deepEqual = deepEqual;\nexport function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', deepEqual);\n }\n}\nassert.deepStrictEqual = deepStrictEqual;\nexport function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', deepStrictEqual);\n }\n}\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (isDate(actual) && isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (isRegExp(actual) && isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (isPrimitive(a) || isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\nassert.notDeepEqual = notDeepEqual;\nexport function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', notDeepEqual);\n }\n}\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nexport function notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\nassert.strictEqual = strictEqual;\nexport function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', strictEqual);\n }\n}\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\nassert.notStrictEqual = notStrictEqual;\nexport function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', notStrictEqual);\n }\n}\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\nassert.throws = throws;\nexport function throws(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n}\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = doesNotThrow;\nexport function doesNotThrow(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n}\n\nassert.ifError = ifError;\nexport function ifError(err) {\n if (err) throw err;\n}\n","/* The MIT License (MIT)\n *\n * Copyright 2015-2018 Peter A. Bigot\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/**\n * Support for translating between Buffer instances and JavaScript\n * native types.\n *\n * {@link module:Layout~Layout|Layout} is the basis of a class\n * hierarchy that associates property names with sequences of encoded\n * bytes.\n *\n * Layouts are supported for these scalar (numeric) types:\n * * {@link module:Layout~UInt|Unsigned integers in little-endian\n * format} with {@link module:Layout.u8|8-bit}, {@link\n * module:Layout.u16|16-bit}, {@link module:Layout.u24|24-bit},\n * {@link module:Layout.u32|32-bit}, {@link\n * module:Layout.u40|40-bit}, and {@link module:Layout.u48|48-bit}\n * representation ranges;\n * * {@link module:Layout~UIntBE|Unsigned integers in big-endian\n * format} with {@link module:Layout.u16be|16-bit}, {@link\n * module:Layout.u24be|24-bit}, {@link module:Layout.u32be|32-bit},\n * {@link module:Layout.u40be|40-bit}, and {@link\n * module:Layout.u48be|48-bit} representation ranges;\n * * {@link module:Layout~Int|Signed integers in little-endian\n * format} with {@link module:Layout.s8|8-bit}, {@link\n * module:Layout.s16|16-bit}, {@link module:Layout.s24|24-bit},\n * {@link module:Layout.s32|32-bit}, {@link\n * module:Layout.s40|40-bit}, and {@link module:Layout.s48|48-bit}\n * representation ranges;\n * * {@link module:Layout~IntBE|Signed integers in big-endian format}\n * with {@link module:Layout.s16be|16-bit}, {@link\n * module:Layout.s24be|24-bit}, {@link module:Layout.s32be|32-bit},\n * {@link module:Layout.s40be|40-bit}, and {@link\n * module:Layout.s48be|48-bit} representation ranges;\n * * 64-bit integral values that decode to an exact (if magnitude is\n * less than 2^53) or nearby integral Number in {@link\n * module:Layout.nu64|unsigned little-endian}, {@link\n * module:Layout.nu64be|unsigned big-endian}, {@link\n * module:Layout.ns64|signed little-endian}, and {@link\n * module:Layout.ns64be|unsigned big-endian} encodings;\n * * 32-bit floating point values with {@link\n * module:Layout.f32|little-endian} and {@link\n * module:Layout.f32be|big-endian} representations;\n * * 64-bit floating point values with {@link\n * module:Layout.f64|little-endian} and {@link\n * module:Layout.f64be|big-endian} representations;\n * * {@link module:Layout.const|Constants} that take no space in the\n * encoded expression.\n *\n * and for these aggregate types:\n * * {@link module:Layout.seq|Sequence}s of instances of a {@link\n * module:Layout~Layout|Layout}, with JavaScript representation as\n * an Array and constant or data-dependent {@link\n * module:Layout~Sequence#count|length};\n * * {@link module:Layout.struct|Structure}s that aggregate a\n * heterogeneous sequence of {@link module:Layout~Layout|Layout}\n * instances, with JavaScript representation as an Object;\n * * {@link module:Layout.union|Union}s that support multiple {@link\n * module:Layout~VariantLayout|variant layouts} over a fixed\n * (padded) or variable (not padded) span of bytes, using an\n * unsigned integer at the start of the data or a separate {@link\n * module:Layout.unionLayoutDiscriminator|layout element} to\n * determine which layout to use when interpreting the buffer\n * contents;\n * * {@link module:Layout.bits|BitStructure}s that contain a sequence\n * of individual {@link\n * module:Layout~BitStructure#addField|BitField}s packed into an 8,\n * 16, 24, or 32-bit unsigned integer starting at the least- or\n * most-significant bit;\n * * {@link module:Layout.cstr|C strings} of varying length;\n * * {@link module:Layout.blob|Blobs} of fixed- or variable-{@link\n * module:Layout~Blob#length|length} raw data.\n *\n * All {@link module:Layout~Layout|Layout} instances are immutable\n * after construction, to prevent internal state from becoming\n * inconsistent.\n *\n * @local Layout\n * @local ExternalLayout\n * @local GreedyCount\n * @local OffsetLayout\n * @local UInt\n * @local UIntBE\n * @local Int\n * @local IntBE\n * @local NearUInt64\n * @local NearUInt64BE\n * @local NearInt64\n * @local NearInt64BE\n * @local Float\n * @local FloatBE\n * @local Double\n * @local DoubleBE\n * @local Sequence\n * @local Structure\n * @local UnionDiscriminator\n * @local UnionLayoutDiscriminator\n * @local Union\n * @local VariantLayout\n * @local BitStructure\n * @local BitField\n * @local Boolean\n * @local Blob\n * @local CString\n * @local Constant\n * @local bindConstructorLayout\n * @module Layout\n * @license MIT\n * @author Peter A. Bigot\n * @see {@link https://github.com/pabigot/buffer-layout|buffer-layout on GitHub}\n */\n\n'use strict';\n\nconst assert = require('assert');\n\n/**\n * Base class for layout objects.\n *\n * **NOTE** This is an abstract base class; you can create instances\n * if it amuses you, but they won't support the {@link\n * Layout#encode|encode} or {@link Layout#decode|decode} functions.\n *\n * @param {Number} span - Initializer for {@link Layout#span|span}. The\n * parameter must be an integer; a negative value signifies that the\n * span is {@link Layout#getSpan|value-specific}.\n *\n * @param {string} [property] - Initializer for {@link\n * Layout#property|property}.\n *\n * @abstract\n */\nclass Layout {\n constructor(span, property) {\n if (!Number.isInteger(span)) {\n throw new TypeError('span must be an integer');\n }\n\n /** The span of the layout in bytes.\n *\n * Positive values are generally expected.\n *\n * Zero will only appear in {@link Constant}s and in {@link\n * Sequence}s where the {@link Sequence#count|count} is zero.\n *\n * A negative value indicates that the span is value-specific, and\n * must be obtained using {@link Layout#getSpan|getSpan}. */\n this.span = span;\n\n /** The property name used when this layout is represented in an\n * Object.\n *\n * Used only for layouts that {@link Layout#decode|decode} to Object\n * instances. If left undefined the span of the unnamed layout will\n * be treated as padding: it will not be mutated by {@link\n * Layout#encode|encode} nor represented as a property in the\n * decoded Object. */\n this.property = property;\n }\n\n /** Function to create an Object into which decoded properties will\n * be written.\n *\n * Used only for layouts that {@link Layout#decode|decode} to Object\n * instances, which means:\n * * {@link Structure}\n * * {@link Union}\n * * {@link VariantLayout}\n * * {@link BitStructure}\n *\n * If left undefined the JavaScript representation of these layouts\n * will be Object instances.\n *\n * See {@link bindConstructorLayout}.\n */\n makeDestinationObject() {\n return {};\n }\n\n /**\n * Decode from a Buffer into an JavaScript value.\n *\n * @param {Buffer} b - the buffer from which encoded data is read.\n *\n * @param {Number} [offset] - the offset at which the encoded data\n * starts. If absent a zero offset is inferred.\n *\n * @returns {(Number|Array|Object)} - the value of the decoded data.\n *\n * @abstract\n */\n decode(b, offset) {\n throw new Error('Layout is abstract');\n }\n\n /**\n * Encode a JavaScript value into a Buffer.\n *\n * @param {(Number|Array|Object)} src - the value to be encoded into\n * the buffer. The type accepted depends on the (sub-)type of {@link\n * Layout}.\n *\n * @param {Buffer} b - the buffer into which encoded data will be\n * written.\n *\n * @param {Number} [offset] - the offset at which the encoded data\n * starts. If absent a zero offset is inferred.\n *\n * @returns {Number} - the number of bytes encoded, including the\n * space skipped for internal padding, but excluding data such as\n * {@link Sequence#count|lengths} when stored {@link\n * ExternalLayout|externally}. This is the adjustment to `offset`\n * producing the offset where data for the next layout would be\n * written.\n *\n * @abstract\n */\n encode(src, b, offset) {\n throw new Error('Layout is abstract');\n }\n\n /**\n * Calculate the span of a specific instance of a layout.\n *\n * @param {Buffer} b - the buffer that contains an encoded instance.\n *\n * @param {Number} [offset] - the offset at which the encoded instance\n * starts. If absent a zero offset is inferred.\n *\n * @return {Number} - the number of bytes covered by the layout\n * instance. If this method is not overridden in a subclass the\n * definition-time constant {@link Layout#span|span} will be\n * returned.\n *\n * @throws {RangeError} - if the length of the value cannot be\n * determined.\n */\n getSpan(b, offset) {\n if (0 > this.span) {\n throw new RangeError('indeterminate span');\n }\n return this.span;\n }\n\n /**\n * Replicate the layout using a new property.\n *\n * This function must be used to get a structurally-equivalent layout\n * with a different name since all {@link Layout} instances are\n * immutable.\n *\n * **NOTE** This is a shallow copy. All fields except {@link\n * Layout#property|property} are strictly equal to the origin layout.\n *\n * @param {String} property - the value for {@link\n * Layout#property|property} in the replica.\n *\n * @returns {Layout} - the copy with {@link Layout#property|property}\n * set to `property`.\n */\n replicate(property) {\n const rv = Object.create(this.constructor.prototype);\n Object.assign(rv, this);\n rv.property = property;\n return rv;\n }\n\n /**\n * Create an object from layout properties and an array of values.\n *\n * **NOTE** This function returns `undefined` if invoked on a layout\n * that does not return its value as an Object. Objects are\n * returned for things that are a {@link Structure}, which includes\n * {@link VariantLayout|variant layouts} if they are structures, and\n * excludes {@link Union}s. If you want this feature for a union\n * you must use {@link Union.getVariant|getVariant} to select the\n * desired layout.\n *\n * @param {Array} values - an array of values that correspond to the\n * default order for properties. As with {@link Layout#decode|decode}\n * layout elements that have no property name are skipped when\n * iterating over the array values. Only the top-level properties are\n * assigned; arguments are not assigned to properties of contained\n * layouts. Any unused values are ignored.\n *\n * @return {(Object|undefined)}\n */\n fromArray(values) {\n return undefined;\n }\n}\nexports.Layout = Layout;\n\n/* Provide text that carries a name (such as for a function that will\n * be throwing an error) annotated with the property of a given layout\n * (such as one for which the value was unacceptable).\n *\n * @ignore */\nfunction nameWithProperty(name, lo) {\n if (lo.property) {\n return name + '[' + lo.property + ']';\n }\n return name;\n}\nexports.nameWithProperty = nameWithProperty;\n\n/**\n * Augment a class so that instances can be encoded/decoded using a\n * given layout.\n *\n * Calling this function couples `Class` with `layout` in several ways:\n *\n * * `Class.layout_` becomes a static member property equal to `layout`;\n * * `layout.boundConstructor_` becomes a static member property equal\n * to `Class`;\n * * The {@link Layout#makeDestinationObject|makeDestinationObject()}\n * property of `layout` is set to a function that returns a `new\n * Class()`;\n * * `Class.decode(b, offset)` becomes a static member function that\n * delegates to {@link Layout#decode|layout.decode}. The\n * synthesized function may be captured and extended.\n * * `Class.prototype.encode(b, offset)` provides an instance member\n * function that delegates to {@link Layout#encode|layout.encode}\n * with `src` set to `this`. The synthesized function may be\n * captured and extended, but when the extension is invoked `this`\n * must be explicitly bound to the instance.\n *\n * @param {class} Class - a JavaScript class with a nullary\n * constructor.\n *\n * @param {Layout} layout - the {@link Layout} instance used to encode\n * instances of `Class`.\n */\nfunction bindConstructorLayout(Class, layout) {\n if ('function' !== typeof Class) {\n throw new TypeError('Class must be constructor');\n }\n if (Class.hasOwnProperty('layout_')) {\n throw new Error('Class is already bound to a layout');\n }\n if (!(layout && (layout instanceof Layout))) {\n throw new TypeError('layout must be a Layout');\n }\n if (layout.hasOwnProperty('boundConstructor_')) {\n throw new Error('layout is already bound to a constructor');\n }\n Class.layout_ = layout;\n layout.boundConstructor_ = Class;\n layout.makeDestinationObject = (() => new Class());\n Object.defineProperty(Class.prototype, 'encode', {\n value: function(b, offset) {\n return layout.encode(this, b, offset);\n },\n writable: true,\n });\n Object.defineProperty(Class, 'decode', {\n value: function(b, offset) {\n return layout.decode(b, offset);\n },\n writable: true,\n });\n}\nexports.bindConstructorLayout = bindConstructorLayout;\n\n/**\n * An object that behaves like a layout but does not consume space\n * within its containing layout.\n *\n * This is primarily used to obtain metadata about a member, such as a\n * {@link OffsetLayout} that can provide data about a {@link\n * Layout#getSpan|value-specific span}.\n *\n * **NOTE** This is an abstract base class; you can create instances\n * if it amuses you, but they won't support {@link\n * ExternalLayout#isCount|isCount} or other {@link Layout} functions.\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @abstract\n * @augments {Layout}\n */\nclass ExternalLayout extends Layout {\n /**\n * Return `true` iff the external layout decodes to an unsigned\n * integer layout.\n *\n * In that case it can be used as the source of {@link\n * Sequence#count|Sequence counts}, {@link Blob#length|Blob lengths},\n * or as {@link UnionLayoutDiscriminator#layout|external union\n * discriminators}.\n *\n * @abstract\n */\n isCount() {\n throw new Error('ExternalLayout is abstract');\n }\n}\n\n/**\n * An {@link ExternalLayout} that determines its {@link\n * Layout#decode|value} based on offset into and length of the buffer\n * on which it is invoked.\n *\n * *Factory*: {@link module:Layout.greedy|greedy}\n *\n * @param {Number} [elementSpan] - initializer for {@link\n * GreedyCount#elementSpan|elementSpan}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {ExternalLayout}\n */\nclass GreedyCount extends ExternalLayout {\n constructor(elementSpan, property) {\n if (undefined === elementSpan) {\n elementSpan = 1;\n }\n if ((!Number.isInteger(elementSpan)) || (0 >= elementSpan)) {\n throw new TypeError('elementSpan must be a (positive) integer');\n }\n super(-1, property);\n\n /** The layout for individual elements of the sequence. The value\n * must be a positive integer. If not provided, the value will be\n * 1. */\n this.elementSpan = elementSpan;\n }\n\n /** @override */\n isCount() {\n return true;\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const rem = b.length - offset;\n return Math.floor(rem / this.elementSpan);\n }\n\n /** @override */\n encode(src, b, offset) {\n return 0;\n }\n}\n\n/**\n * An {@link ExternalLayout} that supports accessing a {@link Layout}\n * at a fixed offset from the start of another Layout. The offset may\n * be before, within, or after the base layout.\n *\n * *Factory*: {@link module:Layout.offset|offset}\n *\n * @param {Layout} layout - initializer for {@link\n * OffsetLayout#layout|layout}, modulo `property`.\n *\n * @param {Number} [offset] - Initializes {@link\n * OffsetLayout#offset|offset}. Defaults to zero.\n *\n * @param {string} [property] - Optional new property name for a\n * {@link Layout#replicate| replica} of `layout` to be used as {@link\n * OffsetLayout#layout|layout}. If not provided the `layout` is used\n * unchanged.\n *\n * @augments {Layout}\n */\nclass OffsetLayout extends ExternalLayout {\n constructor(layout, offset, property) {\n if (!(layout instanceof Layout)) {\n throw new TypeError('layout must be a Layout');\n }\n\n if (undefined === offset) {\n offset = 0;\n } else if (!Number.isInteger(offset)) {\n throw new TypeError('offset must be integer or undefined');\n }\n\n super(layout.span, property || layout.property);\n\n /** The subordinated layout. */\n this.layout = layout;\n\n /** The location of {@link OffsetLayout#layout} relative to the\n * start of another layout.\n *\n * The value may be positive or negative, but an error will thrown\n * if at the point of use it goes outside the span of the Buffer\n * being accessed. */\n this.offset = offset;\n }\n\n /** @override */\n isCount() {\n return ((this.layout instanceof UInt)\n || (this.layout instanceof UIntBE));\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return this.layout.decode(b, offset + this.offset);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return this.layout.encode(src, b, offset + this.offset);\n }\n}\n\n/**\n * Represent an unsigned integer in little-endian format.\n *\n * *Factory*: {@link module:Layout.u8|u8}, {@link\n * module:Layout.u16|u16}, {@link module:Layout.u24|u24}, {@link\n * module:Layout.u32|u32}, {@link module:Layout.u40|u40}, {@link\n * module:Layout.u48|u48}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass UInt extends Layout {\n constructor(span, property) {\n super(span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readUIntLE(offset, this.span);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeUIntLE(src, offset, this.span);\n return this.span;\n }\n}\n\n/**\n * Represent an unsigned integer in big-endian format.\n *\n * *Factory*: {@link module:Layout.u8be|u8be}, {@link\n * module:Layout.u16be|u16be}, {@link module:Layout.u24be|u24be},\n * {@link module:Layout.u32be|u32be}, {@link\n * module:Layout.u40be|u40be}, {@link module:Layout.u48be|u48be}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass UIntBE extends Layout {\n constructor(span, property) {\n super( span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readUIntBE(offset, this.span);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeUIntBE(src, offset, this.span);\n return this.span;\n }\n}\n\n/**\n * Represent a signed integer in little-endian format.\n *\n * *Factory*: {@link module:Layout.s8|s8}, {@link\n * module:Layout.s16|s16}, {@link module:Layout.s24|s24}, {@link\n * module:Layout.s32|s32}, {@link module:Layout.s40|s40}, {@link\n * module:Layout.s48|s48}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Int extends Layout {\n constructor(span, property) {\n super(span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readIntLE(offset, this.span);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeIntLE(src, offset, this.span);\n return this.span;\n }\n}\n\n/**\n * Represent a signed integer in big-endian format.\n *\n * *Factory*: {@link module:Layout.s8be|s8be}, {@link\n * module:Layout.s16be|s16be}, {@link module:Layout.s24be|s24be},\n * {@link module:Layout.s32be|s32be}, {@link\n * module:Layout.s40be|s40be}, {@link module:Layout.s48be|s48be}\n *\n * @param {Number} span - initializer for {@link Layout#span|span}.\n * The parameter can range from 1 through 6.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass IntBE extends Layout {\n constructor(span, property) {\n super(span, property);\n if (6 < this.span) {\n throw new RangeError('span must not exceed 6 bytes');\n }\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readIntBE(offset, this.span);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeIntBE(src, offset, this.span);\n return this.span;\n }\n}\n\nconst V2E32 = Math.pow(2, 32);\n\n/* True modulus high and low 32-bit words, where low word is always\n * non-negative. */\nfunction divmodInt64(src) {\n const hi32 = Math.floor(src / V2E32);\n const lo32 = src - (hi32 * V2E32);\n // assert.equal(roundedInt64(hi32, lo32), src);\n // assert(0 <= lo32);\n return {hi32, lo32};\n}\n/* Reconstruct Number from quotient and non-negative remainder */\nfunction roundedInt64(hi32, lo32) {\n return hi32 * V2E32 + lo32;\n}\n\n/**\n * Represent an unsigned 64-bit integer in little-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.nu64|nu64}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearUInt64 extends Layout {\n constructor(property) {\n super(8, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const lo32 = b.readUInt32LE(offset);\n const hi32 = b.readUInt32LE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const split = divmodInt64(src);\n b.writeUInt32LE(split.lo32, offset);\n b.writeUInt32LE(split.hi32, offset + 4);\n return 8;\n }\n}\n\n/**\n * Represent an unsigned 64-bit integer in big-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.nu64be|nu64be}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearUInt64BE extends Layout {\n constructor(property) {\n super(8, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const hi32 = b.readUInt32BE(offset);\n const lo32 = b.readUInt32BE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const split = divmodInt64(src);\n b.writeUInt32BE(split.hi32, offset);\n b.writeUInt32BE(split.lo32, offset + 4);\n return 8;\n }\n}\n\n/**\n * Represent a signed 64-bit integer in little-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.ns64|ns64}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearInt64 extends Layout {\n constructor(property) {\n super(8, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const lo32 = b.readUInt32LE(offset);\n const hi32 = b.readInt32LE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const split = divmodInt64(src);\n b.writeUInt32LE(split.lo32, offset);\n b.writeInt32LE(split.hi32, offset + 4);\n return 8;\n }\n}\n\n/**\n * Represent a signed 64-bit integer in big-endian format when\n * encoded and as a near integral JavaScript Number when decoded.\n *\n * *Factory*: {@link module:Layout.ns64be|ns64be}\n *\n * **NOTE** Values with magnitude greater than 2^52 may not decode to\n * the exact value of the encoded representation.\n *\n * @augments {Layout}\n */\nclass NearInt64BE extends Layout {\n constructor(property) {\n super(8, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const hi32 = b.readInt32BE(offset);\n const lo32 = b.readUInt32BE(offset + 4);\n return roundedInt64(hi32, lo32);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const split = divmodInt64(src);\n b.writeInt32BE(split.hi32, offset);\n b.writeUInt32BE(split.lo32, offset + 4);\n return 8;\n }\n}\n\n/**\n * Represent a 32-bit floating point number in little-endian format.\n *\n * *Factory*: {@link module:Layout.f32|f32}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Float extends Layout {\n constructor(property) {\n super(4, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readFloatLE(offset);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeFloatLE(src, offset);\n return 4;\n }\n}\n\n/**\n * Represent a 32-bit floating point number in big-endian format.\n *\n * *Factory*: {@link module:Layout.f32be|f32be}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass FloatBE extends Layout {\n constructor(property) {\n super(4, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readFloatBE(offset);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeFloatBE(src, offset);\n return 4;\n }\n}\n\n/**\n * Represent a 64-bit floating point number in little-endian format.\n *\n * *Factory*: {@link module:Layout.f64|f64}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Double extends Layout {\n constructor(property) {\n super(8, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readDoubleLE(offset);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeDoubleLE(src, offset);\n return 8;\n }\n}\n\n/**\n * Represent a 64-bit floating point number in big-endian format.\n *\n * *Factory*: {@link module:Layout.f64be|f64be}\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass DoubleBE extends Layout {\n constructor(property) {\n super(8, property);\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n return b.readDoubleBE(offset);\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n b.writeDoubleBE(src, offset);\n return 8;\n }\n}\n\n/**\n * Represent a contiguous sequence of a specific layout as an Array.\n *\n * *Factory*: {@link module:Layout.seq|seq}\n *\n * @param {Layout} elementLayout - initializer for {@link\n * Sequence#elementLayout|elementLayout}.\n *\n * @param {(Number|ExternalLayout)} count - initializer for {@link\n * Sequence#count|count}. The parameter must be either a positive\n * integer or an instance of {@link ExternalLayout}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Sequence extends Layout {\n constructor(elementLayout, count, property) {\n if (!(elementLayout instanceof Layout)) {\n throw new TypeError('elementLayout must be a Layout');\n }\n if (!(((count instanceof ExternalLayout) && count.isCount())\n || (Number.isInteger(count) && (0 <= count)))) {\n throw new TypeError('count must be non-negative integer '\n + 'or an unsigned integer ExternalLayout');\n }\n let span = -1;\n if ((!(count instanceof ExternalLayout))\n && (0 < elementLayout.span)) {\n span = count * elementLayout.span;\n }\n\n super(span, property);\n\n /** The layout for individual elements of the sequence. */\n this.elementLayout = elementLayout;\n\n /** The number of elements in the sequence.\n *\n * This will be either a non-negative integer or an instance of\n * {@link ExternalLayout} for which {@link\n * ExternalLayout#isCount|isCount()} is `true`. */\n this.count = count;\n }\n\n /** @override */\n getSpan(b, offset) {\n if (0 <= this.span) {\n return this.span;\n }\n if (undefined === offset) {\n offset = 0;\n }\n let span = 0;\n let count = this.count;\n if (count instanceof ExternalLayout) {\n count = count.decode(b, offset);\n }\n if (0 < this.elementLayout.span) {\n span = count * this.elementLayout.span;\n } else {\n let idx = 0;\n while (idx < count) {\n span += this.elementLayout.getSpan(b, offset + span);\n ++idx;\n }\n }\n return span;\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const rv = [];\n let i = 0;\n let count = this.count;\n if (count instanceof ExternalLayout) {\n count = count.decode(b, offset);\n }\n while (i < count) {\n rv.push(this.elementLayout.decode(b, offset));\n offset += this.elementLayout.getSpan(b, offset);\n i += 1;\n }\n return rv;\n }\n\n /** Implement {@link Layout#encode|encode} for {@link Sequence}.\n *\n * **NOTE** If `src` is shorter than {@link Sequence#count|count} then\n * the unused space in the buffer is left unchanged. If `src` is\n * longer than {@link Sequence#count|count} the unneeded elements are\n * ignored.\n *\n * **NOTE** If {@link Layout#count|count} is an instance of {@link\n * ExternalLayout} then the length of `src` will be encoded as the\n * count after `src` is encoded. */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const elo = this.elementLayout;\n const span = src.reduce((span, v) => {\n return span + elo.encode(v, b, offset + span);\n }, 0);\n if (this.count instanceof ExternalLayout) {\n this.count.encode(src.length, b, offset);\n }\n return span;\n }\n}\n\n/**\n * Represent a contiguous sequence of arbitrary layout elements as an\n * Object.\n *\n * *Factory*: {@link module:Layout.struct|struct}\n *\n * **NOTE** The {@link Layout#span|span} of the structure is variable\n * if any layout in {@link Structure#fields|fields} has a variable\n * span. When {@link Layout#encode|encoding} we must have a value for\n * all variable-length fields, or we wouldn't be able to figure out\n * how much space to use for storage. We can only identify the value\n * for a field when it has a {@link Layout#property|property}. As\n * such, although a structure may contain both unnamed fields and\n * variable-length fields, it cannot contain an unnamed\n * variable-length field.\n *\n * @param {Layout[]} fields - initializer for {@link\n * Structure#fields|fields}. An error is raised if this contains a\n * variable-length field for which a {@link Layout#property|property}\n * is not defined.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @param {Boolean} [decodePrefixes] - initializer for {@link\n * Structure#decodePrefixes|property}.\n *\n * @throws {Error} - if `fields` contains an unnamed variable-length\n * layout.\n *\n * @augments {Layout}\n */\nclass Structure extends Layout {\n constructor(fields, property, decodePrefixes) {\n if (!(Array.isArray(fields)\n && fields.reduce((acc, v) => acc && (v instanceof Layout), true))) {\n throw new TypeError('fields must be array of Layout instances');\n }\n if (('boolean' === typeof property)\n && (undefined === decodePrefixes)) {\n decodePrefixes = property;\n property = undefined;\n }\n\n /* Verify absence of unnamed variable-length fields. */\n for (const fd of fields) {\n if ((0 > fd.span)\n && (undefined === fd.property)) {\n throw new Error('fields cannot contain unnamed variable-length layout');\n }\n }\n\n let span = -1;\n try {\n span = fields.reduce((span, fd) => span + fd.getSpan(), 0);\n } catch (e) {\n }\n super(span, property);\n\n /** The sequence of {@link Layout} values that comprise the\n * structure.\n *\n * The individual elements need not be the same type, and may be\n * either scalar or aggregate layouts. If a member layout leaves\n * its {@link Layout#property|property} undefined the\n * corresponding region of the buffer associated with the element\n * will not be mutated.\n *\n * @type {Layout[]} */\n this.fields = fields;\n\n /** Control behavior of {@link Layout#decode|decode()} given short\n * buffers.\n *\n * In some situations a structure many be extended with additional\n * fields over time, with older installations providing only a\n * prefix of the full structure. If this property is `true`\n * decoding will accept those buffers and leave subsequent fields\n * undefined, as long as the buffer ends at a field boundary.\n * Defaults to `false`. */\n this.decodePrefixes = !!decodePrefixes;\n }\n\n /** @override */\n getSpan(b, offset) {\n if (0 <= this.span) {\n return this.span;\n }\n if (undefined === offset) {\n offset = 0;\n }\n let span = 0;\n try {\n span = this.fields.reduce((span, fd) => {\n const fsp = fd.getSpan(b, offset);\n offset += fsp;\n return span + fsp;\n }, 0);\n } catch (e) {\n throw new RangeError('indeterminate span');\n }\n return span;\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const dest = this.makeDestinationObject();\n for (const fd of this.fields) {\n if (undefined !== fd.property) {\n dest[fd.property] = fd.decode(b, offset);\n }\n offset += fd.getSpan(b, offset);\n if (this.decodePrefixes\n && (b.length === offset)) {\n break;\n }\n }\n return dest;\n }\n\n /** Implement {@link Layout#encode|encode} for {@link Structure}.\n *\n * If `src` is missing a property for a member with a defined {@link\n * Layout#property|property} the corresponding region of the buffer is\n * left unmodified. */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const firstOffset = offset;\n let lastOffset = 0;\n let lastWrote = 0;\n for (const fd of this.fields) {\n let span = fd.span;\n lastWrote = (0 < span) ? span : 0;\n if (undefined === fd.property) {\n /* By construction the field must be fixed-length (because\n * unnamed variable-length fields are disallowed when\n * encoding). But check it anyway. */\n assert(0 < span);\n } else {\n const fv = src[fd.property];\n if (undefined !== fv) {\n lastWrote = fd.encode(fv, b, offset);\n if (0 > span) {\n /* Read the as-encoded span, which is not necessarily the\n * same as what we wrote. */\n span = fd.getSpan(b, offset);\n }\n }\n }\n lastOffset = offset;\n offset += span;\n }\n /* Use (lastOffset + lastWrote) instead of offset because the last\n * item may have had a dynamic length and we don't want to include\n * the padding between it and the end of the space reserved for\n * it. */\n return (lastOffset + lastWrote) - firstOffset;\n }\n\n /** @override */\n fromArray(values) {\n const dest = this.makeDestinationObject();\n for (const fd of this.fields) {\n if ((undefined !== fd.property)\n && (0 < values.length)) {\n dest[fd.property] = values.shift();\n }\n }\n return dest;\n }\n\n /**\n * Get access to the layout of a given property.\n *\n * @param {String} property - the structure member of interest.\n *\n * @return {Layout} - the layout associated with `property`, or\n * undefined if there is no such property.\n */\n layoutFor(property) {\n if ('string' !== typeof property) {\n throw new TypeError('property must be string');\n }\n for (const fd of this.fields) {\n if (fd.property === property) {\n return fd;\n }\n }\n }\n\n /**\n * Get the offset of a structure member.\n *\n * @param {String} property - the structure member of interest.\n *\n * @return {Number} - the offset in bytes to the start of `property`\n * within the structure, or undefined if `property` is not a field\n * within the structure. If the property is a member but follows a\n * variable-length structure member a negative number will be\n * returned.\n */\n offsetOf(property) {\n if ('string' !== typeof property) {\n throw new TypeError('property must be string');\n }\n let offset = 0;\n for (const fd of this.fields) {\n if (fd.property === property) {\n return offset;\n }\n if (0 > fd.span) {\n offset = -1;\n } else if (0 <= offset) {\n offset += fd.span;\n }\n }\n }\n}\n\n/**\n * An object that can provide a {@link\n * Union#discriminator|discriminator} API for {@link Union}.\n *\n * **NOTE** This is an abstract base class; you can create instances\n * if it amuses you, but they won't support the {@link\n * UnionDiscriminator#encode|encode} or {@link\n * UnionDiscriminator#decode|decode} functions.\n *\n * @param {string} [property] - Default for {@link\n * UnionDiscriminator#property|property}.\n *\n * @abstract\n */\nclass UnionDiscriminator {\n constructor(property) {\n /** The {@link Layout#property|property} to be used when the\n * discriminator is referenced in isolation (generally when {@link\n * Union#decode|Union decode} cannot delegate to a specific\n * variant). */\n this.property = property;\n }\n\n /** Analog to {@link Layout#decode|Layout decode} for union discriminators.\n *\n * The implementation of this method need not reference the buffer if\n * variant information is available through other means. */\n decode() {\n throw new Error('UnionDiscriminator is abstract');\n }\n\n /** Analog to {@link Layout#decode|Layout encode} for union discriminators.\n *\n * The implementation of this method need not store the value if\n * variant information is maintained through other means. */\n encode() {\n throw new Error('UnionDiscriminator is abstract');\n }\n}\n\n/**\n * An object that can provide a {@link\n * UnionDiscriminator|discriminator API} for {@link Union} using an\n * unsigned integral {@link Layout} instance located either inside or\n * outside the union.\n *\n * @param {ExternalLayout} layout - initializes {@link\n * UnionLayoutDiscriminator#layout|layout}. Must satisfy {@link\n * ExternalLayout#isCount|isCount()}.\n *\n * @param {string} [property] - Default for {@link\n * UnionDiscriminator#property|property}, superseding the property\n * from `layout`, but defaulting to `variant` if neither `property`\n * nor layout provide a property name.\n *\n * @augments {UnionDiscriminator}\n */\nclass UnionLayoutDiscriminator extends UnionDiscriminator {\n constructor(layout, property) {\n if (!((layout instanceof ExternalLayout)\n && layout.isCount())) {\n throw new TypeError('layout must be an unsigned integer ExternalLayout');\n }\n\n super(property || layout.property || 'variant');\n\n /** The {@link ExternalLayout} used to access the discriminator\n * value. */\n this.layout = layout;\n }\n\n /** Delegate decoding to {@link UnionLayoutDiscriminator#layout|layout}. */\n decode(b, offset) {\n return this.layout.decode(b, offset);\n }\n\n /** Delegate encoding to {@link UnionLayoutDiscriminator#layout|layout}. */\n encode(src, b, offset) {\n return this.layout.encode(src, b, offset);\n }\n}\n\n/**\n * Represent any number of span-compatible layouts.\n *\n * *Factory*: {@link module:Layout.union|union}\n *\n * If the union has a {@link Union#defaultLayout|default layout} that\n * layout must have a non-negative {@link Layout#span|span}. The span\n * of a fixed-span union includes its {@link\n * Union#discriminator|discriminator} if the variant is a {@link\n * Union#usesPrefixDiscriminator|prefix of the union}, plus the span\n * of its {@link Union#defaultLayout|default layout}.\n *\n * If the union does not have a default layout then the encoded span\n * of the union depends on the encoded span of its variant (which may\n * be fixed or variable).\n *\n * {@link VariantLayout#layout|Variant layout}s are added through\n * {@link Union#addVariant|addVariant}. If the union has a default\n * layout, the span of the {@link VariantLayout#layout|layout\n * contained by the variant} must not exceed the span of the {@link\n * Union#defaultLayout|default layout} (minus the span of a {@link\n * Union#usesPrefixDiscriminator|prefix disriminator}, if used). The\n * span of the variant will equal the span of the union itself.\n *\n * The variant for a buffer can only be identified from the {@link\n * Union#discriminator|discriminator} {@link\n * UnionDiscriminator#property|property} (in the case of the {@link\n * Union#defaultLayout|default layout}), or by using {@link\n * Union#getVariant|getVariant} and examining the resulting {@link\n * VariantLayout} instance.\n *\n * A variant compatible with a JavaScript object can be identified\n * using {@link Union#getSourceVariant|getSourceVariant}.\n *\n * @param {(UnionDiscriminator|ExternalLayout|Layout)} discr - How to\n * identify the layout used to interpret the union contents. The\n * parameter must be an instance of {@link UnionDiscriminator}, an\n * {@link ExternalLayout} that satisfies {@link\n * ExternalLayout#isCount|isCount()}, or {@link UInt} (or {@link\n * UIntBE}). When a non-external layout element is passed the layout\n * appears at the start of the union. In all cases the (synthesized)\n * {@link UnionDiscriminator} instance is recorded as {@link\n * Union#discriminator|discriminator}.\n *\n * @param {(Layout|null)} defaultLayout - initializer for {@link\n * Union#defaultLayout|defaultLayout}. If absent defaults to `null`.\n * If `null` there is no default layout: the union has data-dependent\n * length and attempts to decode or encode unrecognized variants will\n * throw an exception. A {@link Layout} instance must have a\n * non-negative {@link Layout#span|span}, and if it lacks a {@link\n * Layout#property|property} the {@link\n * Union#defaultLayout|defaultLayout} will be a {@link\n * Layout#replicate|replica} with property `content`.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Union extends Layout {\n constructor(discr, defaultLayout, property) {\n const upv = ((discr instanceof UInt)\n || (discr instanceof UIntBE));\n if (upv) {\n discr = new UnionLayoutDiscriminator(new OffsetLayout(discr));\n } else if ((discr instanceof ExternalLayout)\n && discr.isCount()) {\n discr = new UnionLayoutDiscriminator(discr);\n } else if (!(discr instanceof UnionDiscriminator)) {\n throw new TypeError('discr must be a UnionDiscriminator '\n + 'or an unsigned integer layout');\n }\n if (undefined === defaultLayout) {\n defaultLayout = null;\n }\n if (!((null === defaultLayout)\n || (defaultLayout instanceof Layout))) {\n throw new TypeError('defaultLayout must be null or a Layout');\n }\n if (null !== defaultLayout) {\n if (0 > defaultLayout.span) {\n throw new Error('defaultLayout must have constant span');\n }\n if (undefined === defaultLayout.property) {\n defaultLayout = defaultLayout.replicate('content');\n }\n }\n\n /* The union span can be estimated only if there's a default\n * layout. The union spans its default layout, plus any prefix\n * variant layout. By construction both layouts, if present, have\n * non-negative span. */\n let span = -1;\n if (defaultLayout) {\n span = defaultLayout.span;\n if ((0 <= span) && upv) {\n span += discr.layout.span;\n }\n }\n super(span, property);\n\n /** The interface for the discriminator value in isolation.\n *\n * This a {@link UnionDiscriminator} either passed to the\n * constructor or synthesized from the `discr` constructor\n * argument. {@link\n * Union#usesPrefixDiscriminator|usesPrefixDiscriminator} will be\n * `true` iff the `discr` parameter was a non-offset {@link\n * Layout} instance. */\n this.discriminator = discr;\n\n /** `true` if the {@link Union#discriminator|discriminator} is the\n * first field in the union.\n *\n * If `false` the discriminator is obtained from somewhere\n * else. */\n this.usesPrefixDiscriminator = upv;\n\n /** The layout for non-discriminator content when the value of the\n * discriminator is not recognized.\n *\n * This is the value passed to the constructor. It is\n * structurally equivalent to the second component of {@link\n * Union#layout|layout} but may have a different property\n * name. */\n this.defaultLayout = defaultLayout;\n\n /** A registry of allowed variants.\n *\n * The keys are unsigned integers which should be compatible with\n * {@link Union.discriminator|discriminator}. The property value\n * is the corresponding {@link VariantLayout} instances assigned\n * to this union by {@link Union#addVariant|addVariant}.\n *\n * **NOTE** The registry remains mutable so that variants can be\n * {@link Union#addVariant|added} at any time. Users should not\n * manipulate the content of this property. */\n this.registry = {};\n\n /* Private variable used when invoking getSourceVariant */\n let boundGetSourceVariant = this.defaultGetSourceVariant.bind(this);\n\n /** Function to infer the variant selected by a source object.\n *\n * Defaults to {@link\n * Union#defaultGetSourceVariant|defaultGetSourceVariant} but may\n * be overridden using {@link\n * Union#configGetSourceVariant|configGetSourceVariant}.\n *\n * @param {Object} src - as with {@link\n * Union#defaultGetSourceVariant|defaultGetSourceVariant}.\n *\n * @returns {(undefined|VariantLayout)} The default variant\n * (`undefined`) or first registered variant that uses a property\n * available in `src`. */\n this.getSourceVariant = function(src) {\n return boundGetSourceVariant(src);\n };\n\n /** Function to override the implementation of {@link\n * Union#getSourceVariant|getSourceVariant}.\n *\n * Use this if the desired variant cannot be identified using the\n * algorithm of {@link\n * Union#defaultGetSourceVariant|defaultGetSourceVariant}.\n *\n * **NOTE** The provided function will be invoked bound to this\n * Union instance, providing local access to {@link\n * Union#registry|registry}.\n *\n * @param {Function} gsv - a function that follows the API of\n * {@link Union#defaultGetSourceVariant|defaultGetSourceVariant}. */\n this.configGetSourceVariant = function(gsv) {\n boundGetSourceVariant = gsv.bind(this);\n };\n }\n\n /** @override */\n getSpan(b, offset) {\n if (0 <= this.span) {\n return this.span;\n }\n if (undefined === offset) {\n offset = 0;\n }\n /* Default layouts always have non-negative span, so we don't have\n * one and we have to recognize the variant which will in turn\n * determine the span. */\n const vlo = this.getVariant(b, offset);\n if (!vlo) {\n throw new Error('unable to determine span for unrecognized variant');\n }\n return vlo.getSpan(b, offset);\n }\n\n /**\n * Method to infer a registered Union variant compatible with `src`.\n *\n * The first satisified rule in the following sequence defines the\n * return value:\n * * If `src` has properties matching the Union discriminator and\n * the default layout, `undefined` is returned regardless of the\n * value of the discriminator property (this ensures the default\n * layout will be used);\n * * If `src` has a property matching the Union discriminator, the\n * value of the discriminator identifies a registered variant, and\n * either (a) the variant has no layout, or (b) `src` has the\n * variant's property, then the variant is returned (because the\n * source satisfies the constraints of the variant it identifies);\n * * If `src` does not have a property matching the Union\n * discriminator, but does have a property matching a registered\n * variant, then the variant is returned (because the source\n * matches a variant without an explicit conflict);\n * * An error is thrown (because we either can't identify a variant,\n * or we were explicitly told the variant but can't satisfy it).\n *\n * @param {Object} src - an object presumed to be compatible with\n * the content of the Union.\n *\n * @return {(undefined|VariantLayout)} - as described above.\n *\n * @throws {Error} - if `src` cannot be associated with a default or\n * registered variant.\n */\n defaultGetSourceVariant(src) {\n if (src.hasOwnProperty(this.discriminator.property)) {\n if (this.defaultLayout\n && src.hasOwnProperty(this.defaultLayout.property)) {\n return undefined;\n }\n const vlo = this.registry[src[this.discriminator.property]];\n if (vlo\n && ((!vlo.layout)\n || src.hasOwnProperty(vlo.property))) {\n return vlo;\n }\n } else {\n for (const tag in this.registry) {\n const vlo = this.registry[tag];\n if (src.hasOwnProperty(vlo.property)) {\n return vlo;\n }\n }\n }\n throw new Error('unable to infer src variant');\n }\n\n /** Implement {@link Layout#decode|decode} for {@link Union}.\n *\n * If the variant is {@link Union#addVariant|registered} the return\n * value is an instance of that variant, with no explicit\n * discriminator. Otherwise the {@link Union#defaultLayout|default\n * layout} is used to decode the content. */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n let dest;\n const dlo = this.discriminator;\n const discr = dlo.decode(b, offset);\n let clo = this.registry[discr];\n if (undefined === clo) {\n let contentOffset = 0;\n clo = this.defaultLayout;\n if (this.usesPrefixDiscriminator) {\n contentOffset = dlo.layout.span;\n }\n dest = this.makeDestinationObject();\n dest[dlo.property] = discr;\n dest[clo.property] = this.defaultLayout.decode(b, offset + contentOffset);\n } else {\n dest = clo.decode(b, offset);\n }\n return dest;\n }\n\n /** Implement {@link Layout#encode|encode} for {@link Union}.\n *\n * This API assumes the `src` object is consistent with the union's\n * {@link Union#defaultLayout|default layout}. To encode variants\n * use the appropriate variant-specific {@link VariantLayout#encode}\n * method. */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const vlo = this.getSourceVariant(src);\n if (undefined === vlo) {\n const dlo = this.discriminator;\n const clo = this.defaultLayout;\n let contentOffset = 0;\n if (this.usesPrefixDiscriminator) {\n contentOffset = dlo.layout.span;\n }\n dlo.encode(src[dlo.property], b, offset);\n return contentOffset + clo.encode(src[clo.property], b,\n offset + contentOffset);\n }\n return vlo.encode(src, b, offset);\n }\n\n /** Register a new variant structure within a union. The newly\n * created variant is returned.\n *\n * @param {Number} variant - initializer for {@link\n * VariantLayout#variant|variant}.\n *\n * @param {Layout} layout - initializer for {@link\n * VariantLayout#layout|layout}.\n *\n * @param {String} property - initializer for {@link\n * Layout#property|property}.\n *\n * @return {VariantLayout} */\n addVariant(variant, layout, property) {\n const rv = new VariantLayout(this, variant, layout, property);\n this.registry[variant] = rv;\n return rv;\n }\n\n /**\n * Get the layout associated with a registered variant.\n *\n * If `vb` does not produce a registered variant the function returns\n * `undefined`.\n *\n * @param {(Number|Buffer)} vb - either the variant number, or a\n * buffer from which the discriminator is to be read.\n *\n * @param {Number} offset - offset into `vb` for the start of the\n * union. Used only when `vb` is an instance of {Buffer}.\n *\n * @return {({VariantLayout}|undefined)}\n */\n getVariant(vb, offset) {\n let variant = vb;\n if (vb instanceof Buffer) {\n if (undefined === offset) {\n offset = 0;\n }\n variant = this.discriminator.decode(vb, offset);\n }\n return this.registry[variant];\n }\n}\n\n/**\n * Represent a specific variant within a containing union.\n *\n * **NOTE** The {@link Layout#span|span} of the variant may include\n * the span of the {@link Union#discriminator|discriminator} used to\n * identify it, but values read and written using the variant strictly\n * conform to the content of {@link VariantLayout#layout|layout}.\n *\n * **NOTE** User code should not invoke this constructor directly. Use\n * the union {@link Union#addVariant|addVariant} helper method.\n *\n * @param {Union} union - initializer for {@link\n * VariantLayout#union|union}.\n *\n * @param {Number} variant - initializer for {@link\n * VariantLayout#variant|variant}.\n *\n * @param {Layout} [layout] - initializer for {@link\n * VariantLayout#layout|layout}. If absent the variant carries no\n * data.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}. Unlike many other layouts, variant\n * layouts normally include a property name so they can be identified\n * within their containing {@link Union}. The property identifier may\n * be absent only if `layout` is is absent.\n *\n * @augments {Layout}\n */\nclass VariantLayout extends Layout {\n constructor(union, variant, layout, property) {\n if (!(union instanceof Union)) {\n throw new TypeError('union must be a Union');\n }\n if ((!Number.isInteger(variant)) || (0 > variant)) {\n throw new TypeError('variant must be a (non-negative) integer');\n }\n if (('string' === typeof layout)\n && (undefined === property)) {\n property = layout;\n layout = null;\n }\n if (layout) {\n if (!(layout instanceof Layout)) {\n throw new TypeError('layout must be a Layout');\n }\n if ((null !== union.defaultLayout)\n && (0 <= layout.span)\n && (layout.span > union.defaultLayout.span)) {\n throw new Error('variant span exceeds span of containing union');\n }\n if ('string' !== typeof property) {\n throw new TypeError('variant must have a String property');\n }\n }\n let span = union.span;\n if (0 > union.span) {\n span = layout ? layout.span : 0;\n if ((0 <= span) && union.usesPrefixDiscriminator) {\n span += union.discriminator.layout.span;\n }\n }\n super(span, property);\n\n /** The {@link Union} to which this variant belongs. */\n this.union = union;\n\n /** The unsigned integral value identifying this variant within\n * the {@link Union#discriminator|discriminator} of the containing\n * union. */\n this.variant = variant;\n\n /** The {@link Layout} to be used when reading/writing the\n * non-discriminator part of the {@link\n * VariantLayout#union|union}. If `null` the variant carries no\n * data. */\n this.layout = layout || null;\n }\n\n /** @override */\n getSpan(b, offset) {\n if (0 <= this.span) {\n /* Will be equal to the containing union span if that is not\n * variable. */\n return this.span;\n }\n if (undefined === offset) {\n offset = 0;\n }\n let contentOffset = 0;\n if (this.union.usesPrefixDiscriminator) {\n contentOffset = this.union.discriminator.layout.span;\n }\n /* Span is defined solely by the variant (and prefix discriminator) */\n return contentOffset + this.layout.getSpan(b, offset + contentOffset);\n }\n\n /** @override */\n decode(b, offset) {\n const dest = this.makeDestinationObject();\n if (undefined === offset) {\n offset = 0;\n }\n if (this !== this.union.getVariant(b, offset)) {\n throw new Error('variant mismatch');\n }\n let contentOffset = 0;\n if (this.union.usesPrefixDiscriminator) {\n contentOffset = this.union.discriminator.layout.span;\n }\n if (this.layout) {\n dest[this.property] = this.layout.decode(b, offset + contentOffset);\n } else if (this.property) {\n dest[this.property] = true;\n } else if (this.union.usesPrefixDiscriminator) {\n dest[this.union.discriminator.property] = this.variant;\n }\n return dest;\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n let contentOffset = 0;\n if (this.union.usesPrefixDiscriminator) {\n contentOffset = this.union.discriminator.layout.span;\n }\n if (this.layout\n && (!src.hasOwnProperty(this.property))) {\n throw new TypeError('variant lacks property ' + this.property);\n }\n this.union.discriminator.encode(this.variant, b, offset);\n let span = contentOffset;\n if (this.layout) {\n this.layout.encode(src[this.property], b, offset + contentOffset);\n span += this.layout.getSpan(b, offset + contentOffset);\n if ((0 <= this.union.span)\n && (span > this.union.span)) {\n throw new Error('encoded variant overruns containing union');\n }\n }\n return span;\n }\n\n /** Delegate {@link Layout#fromArray|fromArray} to {@link\n * VariantLayout#layout|layout}. */\n fromArray(values) {\n if (this.layout) {\n return this.layout.fromArray(values);\n }\n }\n}\n\n/** JavaScript chose to define bitwise operations as operating on\n * signed 32-bit values in 2's complement form, meaning any integer\n * with bit 31 set is going to look negative. For right shifts that's\n * not a problem, because `>>>` is a logical shift, but for every\n * other bitwise operator we have to compensate for possible negative\n * results. */\nfunction fixBitwiseResult(v) {\n if (0 > v) {\n v += 0x100000000;\n }\n return v;\n}\n\n/**\n * Contain a sequence of bit fields as an unsigned integer.\n *\n * *Factory*: {@link module:Layout.bits|bits}\n *\n * This is a container element; within it there are {@link BitField}\n * instances that provide the extracted properties. The container\n * simply defines the aggregate representation and its bit ordering.\n * The representation is an object containing properties with numeric\n * or {@link Boolean} values.\n *\n * {@link BitField}s are added with the {@link\n * BitStructure#addField|addField} and {@link\n * BitStructure#addBoolean|addBoolean} methods.\n\n * @param {Layout} word - initializer for {@link\n * BitStructure#word|word}. The parameter must be an instance of\n * {@link UInt} (or {@link UIntBE}) that is no more than 4 bytes wide.\n *\n * @param {bool} [msb] - `true` if the bit numbering starts at the\n * most significant bit of the containing word; `false` (default) if\n * it starts at the least significant bit of the containing word. If\n * the parameter at this position is a string and `property` is\n * `undefined` the value of this argument will instead be used as the\n * value of `property`.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass BitStructure extends Layout {\n constructor(word, msb, property) {\n if (!((word instanceof UInt)\n || (word instanceof UIntBE))) {\n throw new TypeError('word must be a UInt or UIntBE layout');\n }\n if (('string' === typeof msb)\n && (undefined === property)) {\n property = msb;\n msb = undefined;\n }\n if (4 < word.span) {\n throw new RangeError('word cannot exceed 32 bits');\n }\n super(word.span, property);\n\n /** The layout used for the packed value. {@link BitField}\n * instances are packed sequentially depending on {@link\n * BitStructure#msb|msb}. */\n this.word = word;\n\n /** Whether the bit sequences are packed starting at the most\n * significant bit growing down (`true`), or the least significant\n * bit growing up (`false`).\n *\n * **NOTE** Regardless of this value, the least significant bit of\n * any {@link BitField} value is the least significant bit of the\n * corresponding section of the packed value. */\n this.msb = !!msb;\n\n /** The sequence of {@link BitField} layouts that comprise the\n * packed structure.\n *\n * **NOTE** The array remains mutable to allow fields to be {@link\n * BitStructure#addField|added} after construction. Users should\n * not manipulate the content of this property.*/\n this.fields = [];\n\n /* Storage for the value. Capture a variable instead of using an\n * instance property because we don't want anything to change the\n * value without going through the mutator. */\n let value = 0;\n this._packedSetValue = function(v) {\n value = fixBitwiseResult(v);\n return this;\n };\n this._packedGetValue = function() {\n return value;\n };\n }\n\n /** @override */\n decode(b, offset) {\n const dest = this.makeDestinationObject();\n if (undefined === offset) {\n offset = 0;\n }\n const value = this.word.decode(b, offset);\n this._packedSetValue(value);\n for (const fd of this.fields) {\n if (undefined !== fd.property) {\n dest[fd.property] = fd.decode(value);\n }\n }\n return dest;\n }\n\n /** Implement {@link Layout#encode|encode} for {@link BitStructure}.\n *\n * If `src` is missing a property for a member with a defined {@link\n * Layout#property|property} the corresponding region of the packed\n * value is left unmodified. Unused bits are also left unmodified. */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n const value = this.word.decode(b, offset);\n this._packedSetValue(value);\n for (const fd of this.fields) {\n if (undefined !== fd.property) {\n const fv = src[fd.property];\n if (undefined !== fv) {\n fd.encode(fv);\n }\n }\n }\n return this.word.encode(this._packedGetValue(), b, offset);\n }\n\n /** Register a new bitfield with a containing bit structure. The\n * resulting bitfield is returned.\n *\n * @param {Number} bits - initializer for {@link BitField#bits|bits}.\n *\n * @param {string} property - initializer for {@link\n * Layout#property|property}.\n *\n * @return {BitField} */\n addField(bits, property) {\n const bf = new BitField(this, bits, property);\n this.fields.push(bf);\n return bf;\n }\n\n /** As with {@link BitStructure#addField|addField} for single-bit\n * fields with `boolean` value representation.\n *\n * @param {string} property - initializer for {@link\n * Layout#property|property}.\n *\n * @return {Boolean} */\n addBoolean(property) {\n // This is my Boolean, not the Javascript one.\n // eslint-disable-next-line no-new-wrappers\n const bf = new Boolean(this, property);\n this.fields.push(bf);\n return bf;\n }\n\n /**\n * Get access to the bit field for a given property.\n *\n * @param {String} property - the bit field of interest.\n *\n * @return {BitField} - the field associated with `property`, or\n * undefined if there is no such property.\n */\n fieldFor(property) {\n if ('string' !== typeof property) {\n throw new TypeError('property must be string');\n }\n for (const fd of this.fields) {\n if (fd.property === property) {\n return fd;\n }\n }\n }\n}\n\n/**\n * Represent a sequence of bits within a {@link BitStructure}.\n *\n * All bit field values are represented as unsigned integers.\n *\n * **NOTE** User code should not invoke this constructor directly.\n * Use the container {@link BitStructure#addField|addField} helper\n * method.\n *\n * **NOTE** BitField instances are not instances of {@link Layout}\n * since {@link Layout#span|span} measures 8-bit units.\n *\n * @param {BitStructure} container - initializer for {@link\n * BitField#container|container}.\n *\n * @param {Number} bits - initializer for {@link BitField#bits|bits}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n */\nclass BitField {\n constructor(container, bits, property) {\n if (!(container instanceof BitStructure)) {\n throw new TypeError('container must be a BitStructure');\n }\n if ((!Number.isInteger(bits)) || (0 >= bits)) {\n throw new TypeError('bits must be positive integer');\n }\n const totalBits = 8 * container.span;\n const usedBits = container.fields.reduce((sum, fd) => sum + fd.bits, 0);\n if ((bits + usedBits) > totalBits) {\n throw new Error('bits too long for span remainder ('\n + (totalBits - usedBits) + ' of '\n + totalBits + ' remain)');\n }\n\n /** The {@link BitStructure} instance to which this bit field\n * belongs. */\n this.container = container;\n\n /** The span of this value in bits. */\n this.bits = bits;\n\n /** A mask of {@link BitField#bits|bits} bits isolating value bits\n * that fit within the field.\n *\n * That is, it masks a value that has not yet been shifted into\n * position within its containing packed integer. */\n this.valueMask = (1 << bits) - 1;\n if (32 === bits) { // shifted value out of range\n this.valueMask = 0xFFFFFFFF;\n }\n\n /** The offset of the value within the containing packed unsigned\n * integer. The least significant bit of the packed value is at\n * offset zero, regardless of bit ordering used. */\n this.start = usedBits;\n if (this.container.msb) {\n this.start = totalBits - usedBits - bits;\n }\n\n /** A mask of {@link BitField#bits|bits} isolating the field value\n * within the containing packed unsigned integer. */\n this.wordMask = fixBitwiseResult(this.valueMask << this.start);\n\n /** The property name used when this bitfield is represented in an\n * Object.\n *\n * Intended to be functionally equivalent to {@link\n * Layout#property}.\n *\n * If left undefined the corresponding span of bits will be\n * treated as padding: it will not be mutated by {@link\n * Layout#encode|encode} nor represented as a property in the\n * decoded Object. */\n this.property = property;\n }\n\n /** Store a value into the corresponding subsequence of the containing\n * bit field. */\n decode() {\n const word = this.container._packedGetValue();\n const wordValue = fixBitwiseResult(word & this.wordMask);\n const value = wordValue >>> this.start;\n return value;\n }\n\n /** Store a value into the corresponding subsequence of the containing\n * bit field.\n *\n * **NOTE** This is not a specialization of {@link\n * Layout#encode|Layout.encode} and there is no return value. */\n encode(value) {\n if ((!Number.isInteger(value))\n || (value !== fixBitwiseResult(value & this.valueMask))) {\n throw new TypeError(nameWithProperty('BitField.encode', this)\n + ' value must be integer not exceeding ' + this.valueMask);\n }\n const word = this.container._packedGetValue();\n const wordValue = fixBitwiseResult(value << this.start);\n this.container._packedSetValue(fixBitwiseResult(word & ~this.wordMask)\n | wordValue);\n };\n}\n\n/**\n * Represent a single bit within a {@link BitStructure} as a\n * JavaScript boolean.\n *\n * **NOTE** User code should not invoke this constructor directly.\n * Use the container {@link BitStructure#addBoolean|addBoolean} helper\n * method.\n *\n * @param {BitStructure} container - initializer for {@link\n * BitField#container|container}.\n *\n * @param {string} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {BitField}\n */\n/* eslint-disable no-extend-native */\nclass Boolean extends BitField {\n constructor(container, property) {\n super(container, 1, property);\n }\n\n /** Override {@link BitField#decode|decode} for {@link Boolean|Boolean}.\n *\n * @returns {boolean} */\n decode(b, offset) {\n return !!BitField.prototype.decode.call(this, b, offset);\n }\n\n /** @override */\n encode(value) {\n if ('boolean' === typeof value) {\n // BitField requires integer values\n value = +value;\n }\n return BitField.prototype.encode.call(this, value);\n }\n}\n/* eslint-enable no-extend-native */\n\n/**\n * Contain a fixed-length block of arbitrary data, represented as a\n * Buffer.\n *\n * *Factory*: {@link module:Layout.blob|blob}\n *\n * @param {(Number|ExternalLayout)} length - initializes {@link\n * Blob#length|length}.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Blob extends Layout {\n constructor(length, property) {\n if (!(((length instanceof ExternalLayout) && length.isCount())\n || (Number.isInteger(length) && (0 <= length)))) {\n throw new TypeError('length must be positive integer '\n + 'or an unsigned integer ExternalLayout');\n }\n\n let span = -1;\n if (!(length instanceof ExternalLayout)) {\n span = length;\n }\n super(span, property);\n\n /** The number of bytes in the blob.\n *\n * This may be a non-negative integer, or an instance of {@link\n * ExternalLayout} that satisfies {@link\n * ExternalLayout#isCount|isCount()}. */\n this.length = length;\n }\n\n /** @override */\n getSpan(b, offset) {\n let span = this.span;\n if (0 > span) {\n span = this.length.decode(b, offset);\n }\n return span;\n }\n\n /** @override */\n decode(b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n let span = this.span;\n if (0 > span) {\n span = this.length.decode(b, offset);\n }\n return b.slice(offset, offset + span);\n }\n\n /** Implement {@link Layout#encode|encode} for {@link Blob}.\n *\n * **NOTE** If {@link Layout#count|count} is an instance of {@link\n * ExternalLayout} then the length of `src` will be encoded as the\n * count after `src` is encoded. */\n encode(src, b, offset) {\n let span = this.length;\n if (this.length instanceof ExternalLayout) {\n span = src.length;\n }\n if (!((src instanceof Buffer)\n && (span === src.length))) {\n throw new TypeError(nameWithProperty('Blob.encode', this)\n + ' requires (length ' + span + ') Buffer as src');\n }\n if ((offset + span) > b.length) {\n throw new RangeError('encoding overruns Buffer');\n }\n b.write(src.toString('hex'), offset, span, 'hex');\n if (this.length instanceof ExternalLayout) {\n this.length.encode(span, b, offset);\n }\n return span;\n }\n}\n\n/**\n * Contain a `NUL`-terminated UTF8 string.\n *\n * *Factory*: {@link module:Layout.cstr|cstr}\n *\n * **NOTE** Any UTF8 string that incorporates a zero-valued byte will\n * not be correctly decoded by this layout.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass CString extends Layout {\n constructor(property) {\n super(-1, property);\n }\n\n /** @override */\n getSpan(b, offset) {\n if (!(b instanceof Buffer)) {\n throw new TypeError('b must be a Buffer');\n }\n if (undefined === offset) {\n offset = 0;\n }\n let idx = offset;\n while ((idx < b.length) && (0 !== b[idx])) {\n idx += 1;\n }\n return 1 + idx - offset;\n }\n\n /** @override */\n decode(b, offset, dest) {\n if (undefined === offset) {\n offset = 0;\n }\n let span = this.getSpan(b, offset);\n return b.slice(offset, offset + span - 1).toString('utf-8');\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n /* Must force this to a string, lest it be a number and the\n * \"utf8-encoding\" below actually allocate a buffer of length\n * src */\n if ('string' !== typeof src) {\n src = src.toString();\n }\n const srcb = new Buffer(src, 'utf8');\n const span = srcb.length;\n if ((offset + span) > b.length) {\n throw new RangeError('encoding overruns Buffer');\n }\n srcb.copy(b, offset);\n b[offset + span] = 0;\n return span + 1;\n }\n}\n\n/**\n * Contain a UTF8 string with implicit length.\n *\n * *Factory*: {@link module:Layout.utf8|utf8}\n *\n * **NOTE** Because the length is implicit in the size of the buffer\n * this layout should be used only in isolation, or in a situation\n * where the length can be expressed by operating on a slice of the\n * containing buffer.\n *\n * @param {Number} [maxSpan] - the maximum length allowed for encoded\n * string content. If not provided there is no bound on the allowed\n * content.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass UTF8 extends Layout {\n constructor(maxSpan, property) {\n if (('string' === typeof maxSpan)\n && (undefined === property)) {\n property = maxSpan;\n maxSpan = undefined;\n }\n if (undefined === maxSpan) {\n maxSpan = -1;\n } else if (!Number.isInteger(maxSpan)) {\n throw new TypeError('maxSpan must be an integer');\n }\n\n super(-1, property);\n\n /** The maximum span of the layout in bytes.\n *\n * Positive values are generally expected. Zero is abnormal.\n * Attempts to encode or decode a value that exceeds this length\n * will throw a `RangeError`.\n *\n * A negative value indicates that there is no bound on the length\n * of the content. */\n this.maxSpan = maxSpan;\n }\n\n /** @override */\n getSpan(b, offset) {\n if (!(b instanceof Buffer)) {\n throw new TypeError('b must be a Buffer');\n }\n if (undefined === offset) {\n offset = 0;\n }\n return b.length - offset;\n }\n\n /** @override */\n decode(b, offset, dest) {\n if (undefined === offset) {\n offset = 0;\n }\n let span = this.getSpan(b, offset);\n if ((0 <= this.maxSpan)\n && (this.maxSpan < span)) {\n throw new RangeError('text length exceeds maxSpan');\n }\n return b.slice(offset, offset + span).toString('utf-8');\n }\n\n /** @override */\n encode(src, b, offset) {\n if (undefined === offset) {\n offset = 0;\n }\n /* Must force this to a string, lest it be a number and the\n * \"utf8-encoding\" below actually allocate a buffer of length\n * src */\n if ('string' !== typeof src) {\n src = src.toString();\n }\n const srcb = new Buffer(src, 'utf8');\n const span = srcb.length;\n if ((0 <= this.maxSpan)\n && (this.maxSpan < span)) {\n throw new RangeError('text length exceeds maxSpan');\n }\n if ((offset + span) > b.length) {\n throw new RangeError('encoding overruns Buffer');\n }\n srcb.copy(b, offset);\n return span;\n }\n}\n\n/**\n * Contain a constant value.\n *\n * This layout may be used in cases where a JavaScript value can be\n * inferred without an expression in the binary encoding. An example\n * would be a {@link VariantLayout|variant layout} where the content\n * is implied by the union {@link Union#discriminator|discriminator}.\n *\n * @param {Object|Number|String} value - initializer for {@link\n * Constant#value|value}. If the value is an object (or array) and\n * the application intends the object to remain unchanged regardless\n * of what is done to values decoded by this layout, the value should\n * be frozen prior passing it to this constructor.\n *\n * @param {String} [property] - initializer for {@link\n * Layout#property|property}.\n *\n * @augments {Layout}\n */\nclass Constant extends Layout {\n constructor(value, property) {\n super(0, property);\n\n /** The value produced by this constant when the layout is {@link\n * Constant#decode|decoded}.\n *\n * Any JavaScript value including `null` and `undefined` is\n * permitted.\n *\n * **WARNING** If `value` passed in the constructor was not\n * frozen, it is possible for users of decoded values to change\n * the content of the value. */\n this.value = value;\n }\n\n /** @override */\n decode(b, offset, dest) {\n return this.value;\n }\n\n /** @override */\n encode(src, b, offset) {\n /* Constants take no space */\n return 0;\n }\n}\n\nexports.ExternalLayout = ExternalLayout;\nexports.GreedyCount = GreedyCount;\nexports.OffsetLayout = OffsetLayout;\nexports.UInt = UInt;\nexports.UIntBE = UIntBE;\nexports.Int = Int;\nexports.IntBE = IntBE;\nexports.Float = Float;\nexports.FloatBE = FloatBE;\nexports.Double = Double;\nexports.DoubleBE = DoubleBE;\nexports.Sequence = Sequence;\nexports.Structure = Structure;\nexports.UnionDiscriminator = UnionDiscriminator;\nexports.UnionLayoutDiscriminator = UnionLayoutDiscriminator;\nexports.Union = Union;\nexports.VariantLayout = VariantLayout;\nexports.BitStructure = BitStructure;\nexports.BitField = BitField;\nexports.Boolean = Boolean;\nexports.Blob = Blob;\nexports.CString = CString;\nexports.UTF8 = UTF8;\nexports.Constant = Constant;\n\n/** Factory for {@link GreedyCount}. */\nexports.greedy = ((elementSpan, property) => new GreedyCount(elementSpan, property));\n\n/** Factory for {@link OffsetLayout}. */\nexports.offset = ((layout, offset, property) => new OffsetLayout(layout, offset, property));\n\n/** Factory for {@link UInt|unsigned int layouts} spanning one\n * byte. */\nexports.u8 = (property => new UInt(1, property));\n\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning two bytes. */\nexports.u16 = (property => new UInt(2, property));\n\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning three bytes. */\nexports.u24 = (property => new UInt(3, property));\n\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning four bytes. */\nexports.u32 = (property => new UInt(4, property));\n\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning five bytes. */\nexports.u40 = (property => new UInt(5, property));\n\n/** Factory for {@link UInt|little-endian unsigned int layouts}\n * spanning six bytes. */\nexports.u48 = (property => new UInt(6, property));\n\n/** Factory for {@link NearUInt64|little-endian unsigned int\n * layouts} interpreted as Numbers. */\nexports.nu64 = (property => new NearUInt64(property));\n\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning two bytes. */\nexports.u16be = (property => new UIntBE(2, property));\n\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning three bytes. */\nexports.u24be = (property => new UIntBE(3, property));\n\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning four bytes. */\nexports.u32be = (property => new UIntBE(4, property));\n\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning five bytes. */\nexports.u40be = (property => new UIntBE(5, property));\n\n/** Factory for {@link UInt|big-endian unsigned int layouts}\n * spanning six bytes. */\nexports.u48be = (property => new UIntBE(6, property));\n\n/** Factory for {@link NearUInt64BE|big-endian unsigned int\n * layouts} interpreted as Numbers. */\nexports.nu64be = (property => new NearUInt64BE(property));\n\n/** Factory for {@link Int|signed int layouts} spanning one\n * byte. */\nexports.s8 = (property => new Int(1, property));\n\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning two bytes. */\nexports.s16 = (property => new Int(2, property));\n\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning three bytes. */\nexports.s24 = (property => new Int(3, property));\n\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning four bytes. */\nexports.s32 = (property => new Int(4, property));\n\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning five bytes. */\nexports.s40 = (property => new Int(5, property));\n\n/** Factory for {@link Int|little-endian signed int layouts}\n * spanning six bytes. */\nexports.s48 = (property => new Int(6, property));\n\n/** Factory for {@link NearInt64|little-endian signed int layouts}\n * interpreted as Numbers. */\nexports.ns64 = (property => new NearInt64(property));\n\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning two bytes. */\nexports.s16be = (property => new IntBE(2, property));\n\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning three bytes. */\nexports.s24be = (property => new IntBE(3, property));\n\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning four bytes. */\nexports.s32be = (property => new IntBE(4, property));\n\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning five bytes. */\nexports.s40be = (property => new IntBE(5, property));\n\n/** Factory for {@link Int|big-endian signed int layouts}\n * spanning six bytes. */\nexports.s48be = (property => new IntBE(6, property));\n\n/** Factory for {@link NearInt64BE|big-endian signed int layouts}\n * interpreted as Numbers. */\nexports.ns64be = (property => new NearInt64BE(property));\n\n/** Factory for {@link Float|little-endian 32-bit floating point} values. */\nexports.f32 = (property => new Float(property));\n\n/** Factory for {@link FloatBE|big-endian 32-bit floating point} values. */\nexports.f32be = (property => new FloatBE(property));\n\n/** Factory for {@link Double|little-endian 64-bit floating point} values. */\nexports.f64 = (property => new Double(property));\n\n/** Factory for {@link DoubleBE|big-endian 64-bit floating point} values. */\nexports.f64be = (property => new DoubleBE(property));\n\n/** Factory for {@link Structure} values. */\nexports.struct = ((fields, property, decodePrefixes) => new Structure(fields, property, decodePrefixes));\n\n/** Factory for {@link BitStructure} values. */\nexports.bits = ((word, msb, property) => new BitStructure(word, msb, property));\n\n/** Factory for {@link Sequence} values. */\nexports.seq = ((elementLayout, count, property) => new Sequence(elementLayout, count, property));\n\n/** Factory for {@link Union} values. */\nexports.union = ((discr, defaultLayout, property) => new Union(discr, defaultLayout, property));\n\n/** Factory for {@link UnionLayoutDiscriminator} values. */\nexports.unionLayoutDiscriminator = ((layout, property) => new UnionLayoutDiscriminator(layout, property));\n\n/** Factory for {@link Blob} values. */\nexports.blob = ((length, property) => new Blob(length, property));\n\n/** Factory for {@link CString} values. */\nexports.cstr = (property => new CString(property));\n\n/** Factory for {@link UTF8} values. */\nexports.utf8 = ((maxSpan, property) => new UTF8(maxSpan, property));\n\n/** Factory for {@link Constant} values. */\nexports.const = ((value, property) => new Constant(value, property));\n","// @flow\n\n// TODO: These constants should be removed in favor of reading them out of a\n// Syscall account\n\n/**\n * @ignore\n */\nexport const NUM_TICKS_PER_SECOND = 160;\n\n/**\n * @ignore\n */\nexport const DEFAULT_TICKS_PER_SLOT = 64;\n\n/**\n * @ignore\n */\nexport const NUM_SLOTS_PER_SECOND =\n NUM_TICKS_PER_SECOND / DEFAULT_TICKS_PER_SLOT;\n\n/**\n * @ignore\n */\nexport const MS_PER_SLOT = 1000 / NUM_SLOTS_PER_SECOND;\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","// @flow\n\nimport * as BufferLayout from 'buffer-layout';\n\n/**\n * Layout for a public key\n */\nexport const publicKey = (property: string = 'publicKey'): Object => {\n return BufferLayout.blob(32, property);\n};\n\n/**\n * Layout for a 64bit unsigned value\n */\nexport const uint64 = (property: string = 'uint64'): Object => {\n return BufferLayout.blob(8, property);\n};\n\n/**\n * Layout for a Rust String type\n */\nexport const rustString = (property: string = 'string') => {\n const rsl = BufferLayout.struct(\n [\n BufferLayout.u32('length'),\n BufferLayout.u32('lengthPadding'),\n BufferLayout.blob(BufferLayout.offset(BufferLayout.u32(), -8), 'chars'),\n ],\n property,\n );\n const _decode = rsl.decode.bind(rsl);\n const _encode = rsl.encode.bind(rsl);\n\n rsl.decode = (buffer, offset) => {\n const data = _decode(buffer, offset);\n return data.chars.toString('utf8');\n };\n\n rsl.encode = (str, buffer, offset) => {\n const data = {\n chars: Buffer.from(str, 'utf8'),\n };\n return _encode(data, buffer, offset);\n };\n\n rsl.alloc = str => {\n return (\n BufferLayout.u32().span +\n BufferLayout.u32().span +\n Buffer.from(str, 'utf8').length\n );\n };\n\n return rsl;\n};\n\n/**\n * Layout for an Authorized object\n */\nexport const authorized = (property: string = 'authorized') => {\n return BufferLayout.struct(\n [publicKey('staker'), publicKey('withdrawer')],\n property,\n );\n};\n\n/**\n * Layout for a Lockup object\n */\nexport const lockup = (property: string = 'lockup') => {\n return BufferLayout.struct(\n [\n BufferLayout.ns64('unixTimestamp'),\n BufferLayout.ns64('epoch'),\n publicKey('custodian'),\n ],\n property,\n );\n};\n\nexport function getAlloc(type: Object, fields: Object): number {\n let alloc = 0;\n type.layout.fields.forEach(item => {\n if (item.span >= 0) {\n alloc += item.span;\n } else if (typeof item.alloc === 'function') {\n alloc += item.alloc(fields[item.property]);\n }\n });\n return alloc;\n}\n","// @flow\n\nexport function decodeLength(bytes: Array): number {\n let len = 0;\n let size = 0;\n for (;;) {\n let elem = bytes.shift();\n len |= (elem & 0x7f) << (size * 7);\n size += 1;\n if ((elem & 0x80) === 0) {\n break;\n }\n }\n return len;\n}\n\nexport function encodeLength(bytes: Array, len: number) {\n let rem_len = len;\n for (;;) {\n let elem = rem_len & 0x7f;\n rem_len >>= 7;\n if (rem_len == 0) {\n bytes.push(elem);\n break;\n } else {\n elem |= 0x80;\n bytes.push(elem);\n }\n }\n}\n","// @flow\n\nimport bs58 from 'bs58';\nimport * as BufferLayout from 'buffer-layout';\n\nimport {PublicKey} from './publickey';\nimport type {Blockhash} from './blockhash';\nimport * as Layout from './layout';\nimport {PACKET_DATA_SIZE} from './transaction';\nimport * as shortvec from './util/shortvec-encoding';\n\n/**\n * The message header, identifying signed and read-only account\n *\n * @typedef {Object} MessageHeader\n * @property {number} numRequiredSignatures The number of signatures required for this message to be considered valid\n * @property {number} numReadonlySignedAccounts: The last `numReadonlySignedAccounts` of the signed keys are read-only accounts\n * @property {number} numReadonlyUnsignedAccounts The last `numReadonlySignedAccounts` of the unsigned keys are read-only accounts\n */\nexport type MessageHeader = {\n numRequiredSignatures: number,\n numReadonlySignedAccounts: number,\n numReadonlyUnsignedAccounts: number,\n};\n\n/**\n * An instruction to execute by a program\n *\n * @typedef {Object} CompiledInstruction\n * @property {number} programIdIndex Index into the transaction keys array indicating the program account that executes this instruction\n * @property {number[]} accounts Ordered indices into the transaction keys array indicating which accounts to pass to the program\n * @property {string} data The program input data encoded as base 58\n */\nexport type CompiledInstruction = {\n programIdIndex: number,\n accounts: number[],\n data: string,\n};\n\n/**\n * Message constructor arguments\n *\n * @typedef {Object} MessageArgs\n * @property {MessageHeader} header The message header, identifying signed and read-only `accountKeys`\n * @property {string[]} accounts All the account keys used by this transaction\n * @property {Blockhash} recentBlockhash The hash of a recent ledger block\n * @property {CompiledInstruction[]} instructions Instructions that will be executed in sequence and committed in one atomic transaction if all succeed.\n */\ntype MessageArgs = {\n header: MessageHeader,\n accountKeys: string[],\n recentBlockhash: Blockhash,\n instructions: CompiledInstruction[],\n};\n\nconst PUBKEY_LENGTH = 32;\n\n/**\n * List of instructions to be processed atomically\n */\nexport class Message {\n header: MessageHeader;\n accountKeys: PublicKey[];\n recentBlockhash: Blockhash;\n instructions: CompiledInstruction[];\n\n constructor(args: MessageArgs) {\n this.header = args.header;\n this.accountKeys = args.accountKeys.map(account => new PublicKey(account));\n this.recentBlockhash = args.recentBlockhash;\n this.instructions = args.instructions;\n }\n\n isAccountWritable(index: number): boolean {\n return (\n index <\n this.header.numRequiredSignatures -\n this.header.numReadonlySignedAccounts ||\n (index >= this.header.numRequiredSignatures &&\n index <\n this.accountKeys.length - this.header.numReadonlyUnsignedAccounts)\n );\n }\n\n serialize(): Buffer {\n const numKeys = this.accountKeys.length;\n\n let keyCount = [];\n shortvec.encodeLength(keyCount, numKeys);\n\n const instructions = this.instructions.map(instruction => {\n const {accounts, programIdIndex} = instruction;\n const data = bs58.decode(instruction.data);\n\n let keyIndicesCount = [];\n shortvec.encodeLength(keyIndicesCount, accounts.length);\n\n let dataCount = [];\n shortvec.encodeLength(dataCount, data.length);\n\n return {\n programIdIndex,\n keyIndicesCount: Buffer.from(keyIndicesCount),\n keyIndices: Buffer.from(accounts),\n dataLength: Buffer.from(dataCount),\n data,\n };\n });\n\n let instructionCount = [];\n shortvec.encodeLength(instructionCount, instructions.length);\n let instructionBuffer = Buffer.alloc(PACKET_DATA_SIZE);\n Buffer.from(instructionCount).copy(instructionBuffer);\n let instructionBufferLength = instructionCount.length;\n\n instructions.forEach(instruction => {\n const instructionLayout = BufferLayout.struct([\n BufferLayout.u8('programIdIndex'),\n\n BufferLayout.blob(\n instruction.keyIndicesCount.length,\n 'keyIndicesCount',\n ),\n BufferLayout.seq(\n BufferLayout.u8('keyIndex'),\n instruction.keyIndices.length,\n 'keyIndices',\n ),\n BufferLayout.blob(instruction.dataLength.length, 'dataLength'),\n BufferLayout.seq(\n BufferLayout.u8('userdatum'),\n instruction.data.length,\n 'data',\n ),\n ]);\n const length = instructionLayout.encode(\n instruction,\n instructionBuffer,\n instructionBufferLength,\n );\n instructionBufferLength += length;\n });\n instructionBuffer = instructionBuffer.slice(0, instructionBufferLength);\n\n const signDataLayout = BufferLayout.struct([\n BufferLayout.blob(1, 'numRequiredSignatures'),\n BufferLayout.blob(1, 'numReadonlySignedAccounts'),\n BufferLayout.blob(1, 'numReadonlyUnsignedAccounts'),\n BufferLayout.blob(keyCount.length, 'keyCount'),\n BufferLayout.seq(Layout.publicKey('key'), numKeys, 'keys'),\n Layout.publicKey('recentBlockhash'),\n ]);\n\n const transaction = {\n numRequiredSignatures: Buffer.from([this.header.numRequiredSignatures]),\n numReadonlySignedAccounts: Buffer.from([\n this.header.numReadonlySignedAccounts,\n ]),\n numReadonlyUnsignedAccounts: Buffer.from([\n this.header.numReadonlyUnsignedAccounts,\n ]),\n keyCount: Buffer.from(keyCount),\n keys: this.accountKeys.map(key => key.toBuffer()),\n recentBlockhash: bs58.decode(this.recentBlockhash),\n };\n\n let signData = Buffer.alloc(2048);\n const length = signDataLayout.encode(transaction, signData);\n instructionBuffer.copy(signData, length);\n return signData.slice(0, length + instructionBuffer.length);\n }\n\n /**\n * Decode a compiled message into a Message object.\n */\n static from(buffer: Buffer | Uint8Array | Array): Message {\n // Slice up wire data\n let byteArray = [...buffer];\n\n const numRequiredSignatures = byteArray.shift();\n const numReadonlySignedAccounts = byteArray.shift();\n const numReadonlyUnsignedAccounts = byteArray.shift();\n\n const accountCount = shortvec.decodeLength(byteArray);\n let accountKeys = [];\n for (let i = 0; i < accountCount; i++) {\n const account = byteArray.slice(0, PUBKEY_LENGTH);\n byteArray = byteArray.slice(PUBKEY_LENGTH);\n accountKeys.push(bs58.encode(Buffer.from(account)));\n }\n\n const recentBlockhash = byteArray.slice(0, PUBKEY_LENGTH);\n byteArray = byteArray.slice(PUBKEY_LENGTH);\n\n const instructionCount = shortvec.decodeLength(byteArray);\n let instructions = [];\n for (let i = 0; i < instructionCount; i++) {\n let instruction = {};\n instruction.programIdIndex = byteArray.shift();\n const accountCount = shortvec.decodeLength(byteArray);\n instruction.accounts = byteArray.slice(0, accountCount);\n byteArray = byteArray.slice(accountCount);\n const dataLength = shortvec.decodeLength(byteArray);\n const data = byteArray.slice(0, dataLength);\n instruction.data = bs58.encode(Buffer.from(data));\n byteArray = byteArray.slice(dataLength);\n instructions.push(instruction);\n }\n\n const messageArgs = {\n header: {\n numRequiredSignatures,\n numReadonlySignedAccounts,\n numReadonlyUnsignedAccounts,\n },\n recentBlockhash: bs58.encode(Buffer.from(recentBlockhash)),\n accountKeys,\n instructions,\n };\n\n return new Message(messageArgs);\n }\n}\n","// @flow\n\nimport invariant from 'assert';\nimport nacl from 'tweetnacl';\nimport bs58 from 'bs58';\n\nimport type {CompiledInstruction} from './message';\nimport {Message} from './message';\nimport {PublicKey} from './publickey';\nimport {Account} from './account';\nimport * as shortvec from './util/shortvec-encoding';\nimport type {Blockhash} from './blockhash';\n\n/**\n * @typedef {string} TransactionSignature\n */\nexport type TransactionSignature = string;\n\n/**\n * Default (empty) signature\n *\n * Signatures are 64 bytes in length\n */\nconst DEFAULT_SIGNATURE = Buffer.alloc(64).fill(0);\n\n/**\n * Maximum over-the-wire size of a Transaction\n *\n * 1280 is IPv6 minimum MTU\n * 40 bytes is the size of the IPv6 header\n * 8 bytes is the size of the fragment header\n */\nexport const PACKET_DATA_SIZE = 1280 - 40 - 8;\n\nconst SIGNATURE_LENGTH = 64;\n\n/**\n * Account metadata used to define instructions\n *\n * @typedef {Object} AccountMeta\n * @property {PublicKey} pubkey An account's public key\n * @property {boolean} isSigner True if an instruction requires a transaction signature matching `pubkey`\n * @property {boolean} isWritable True if the `pubkey` can be loaded as a read-write account.\n */\nexport type AccountMeta = {\n pubkey: PublicKey,\n isSigner: boolean,\n isWritable: boolean,\n};\n\n/**\n * List of TransactionInstruction object fields that may be initialized at construction\n *\n * @typedef {Object} TransactionInstructionCtorFields\n * @property {?Array} keys\n * @property {?PublicKey} programId\n * @property {?Buffer} data\n */\nexport type TransactionInstructionCtorFields = {|\n keys?: Array,\n programId?: PublicKey,\n data?: Buffer,\n|};\n\n/**\n * Transaction Instruction class\n */\nexport class TransactionInstruction {\n /**\n * Public keys to include in this transaction\n * Boolean represents whether this pubkey needs to sign the transaction\n */\n keys: Array = [];\n\n /**\n * Program Id to execute\n */\n programId: PublicKey;\n\n /**\n * Program input\n */\n data: Buffer = Buffer.alloc(0);\n\n constructor(opts?: TransactionInstructionCtorFields) {\n opts && Object.assign(this, opts);\n }\n}\n\n/**\n * @private\n */\ntype SignaturePubkeyPair = {|\n signature: Buffer | null,\n publicKey: PublicKey,\n|};\n\n/**\n * List of Transaction object fields that may be initialized at construction\n *\n * @typedef {Object} TransactionCtorFields\n * @property {?Blockhash} recentBlockhash A recent blockhash\n * @property {?Array} signatures One or more signatures\n *\n */\ntype TransactionCtorFields = {|\n recentBlockhash?: Blockhash | null,\n nonceInfo?: NonceInformation | null,\n signatures?: Array,\n|};\n\n/**\n * NonceInformation to be used to build a Transaction.\n *\n * @typedef {Object} NonceInformation\n * @property {Blockhash} nonce The current Nonce blockhash\n * @property {TransactionInstruction} nonceInstruction AdvanceNonceAccount Instruction\n */\ntype NonceInformation = {|\n nonce: Blockhash,\n nonceInstruction: TransactionInstruction,\n|};\n\n/**\n * Transaction class\n */\nexport class Transaction {\n /**\n * Signatures for the transaction. Typically created by invoking the\n * `sign()` method\n */\n signatures: Array = [];\n\n /**\n * The first (payer) Transaction signature\n */\n get signature(): Buffer | null {\n if (this.signatures.length > 0) {\n return this.signatures[0].signature;\n }\n return null;\n }\n\n /**\n * The instructions to atomically execute\n */\n instructions: Array = [];\n\n /**\n * A recent transaction id. Must be populated by the caller\n */\n recentBlockhash: Blockhash | null;\n\n /**\n * Optional Nonce information. If populated, transaction will use a durable\n * Nonce hash instead of a recentBlockhash. Must be populated by the caller\n */\n nonceInfo: NonceInformation | null;\n\n /**\n * Construct an empty Transaction\n */\n constructor(opts?: TransactionCtorFields) {\n opts && Object.assign(this, opts);\n }\n\n /**\n * Add one or more instructions to this Transaction\n */\n add(\n ...items: Array<\n Transaction | TransactionInstruction | TransactionInstructionCtorFields,\n >\n ): Transaction {\n if (items.length === 0) {\n throw new Error('No instructions');\n }\n\n items.forEach((item: any) => {\n if ('instructions' in item) {\n this.instructions = this.instructions.concat(item.instructions);\n } else if ('data' in item && 'programId' in item && 'keys' in item) {\n this.instructions.push(item);\n } else {\n this.instructions.push(new TransactionInstruction(item));\n }\n });\n return this;\n }\n\n /**\n * Compile transaction data\n */\n compileMessage(): Message {\n const {nonceInfo} = this;\n if (nonceInfo && this.instructions[0] != nonceInfo.nonceInstruction) {\n this.recentBlockhash = nonceInfo.nonce;\n this.instructions.unshift(nonceInfo.nonceInstruction);\n }\n const {recentBlockhash} = this;\n if (!recentBlockhash) {\n throw new Error('Transaction recentBlockhash required');\n }\n\n if (this.instructions.length < 1) {\n throw new Error('No instructions provided');\n }\n\n let numReadonlySignedAccounts = 0;\n let numReadonlyUnsignedAccounts = 0;\n\n const programIds: string[] = [];\n const accountMetas: AccountMeta[] = [];\n this.instructions.forEach(instruction => {\n instruction.keys.forEach(accountMeta => {\n accountMetas.push(accountMeta);\n });\n\n const programId = instruction.programId.toString();\n if (!programIds.includes(programId)) {\n programIds.push(programId);\n }\n });\n\n // Append programID account metas\n programIds.forEach(programId => {\n accountMetas.push({\n pubkey: new PublicKey(programId),\n isSigner: false,\n isWritable: false,\n });\n });\n\n // Prefix accountMetas with feePayer here whenever that gets implemented\n\n // Sort. Prioritizing first by signer, then by writable\n accountMetas.sort(function (x, y) {\n const checkSigner = x.isSigner === y.isSigner ? 0 : x.isSigner ? -1 : 1;\n const checkWritable =\n x.isWritable === y.isWritable ? 0 : x.isWritable ? -1 : 1;\n return checkSigner || checkWritable;\n });\n\n // Cull duplicate account metas\n const uniqueMetas: AccountMeta[] = [];\n accountMetas.forEach(accountMeta => {\n const pubkeyString = accountMeta.pubkey.toString();\n const uniqueIndex = uniqueMetas.findIndex(x => {\n return x.pubkey.toString() === pubkeyString;\n });\n if (uniqueIndex > -1) {\n uniqueMetas[uniqueIndex].isWritable =\n uniqueMetas[uniqueIndex].isWritable || accountMeta.isWritable;\n } else {\n uniqueMetas.push(accountMeta);\n }\n });\n\n this.signatures.forEach(signature => {\n const sigPubkeyString = signature.publicKey.toString();\n const uniqueIndex = uniqueMetas.findIndex(x => {\n return x.pubkey.toString() === sigPubkeyString;\n });\n if (uniqueIndex > -1) {\n uniqueMetas[uniqueIndex].isSigner = true;\n } else {\n uniqueMetas.unshift({\n pubkey: new PublicKey(sigPubkeyString),\n isSigner: true,\n isWritable: true,\n });\n }\n });\n\n // Split out signing from nonsigning keys and count readonlys\n const signedKeys: string[] = [];\n const unsignedKeys: string[] = [];\n uniqueMetas.forEach(({pubkey, isSigner, isWritable}) => {\n if (isSigner) {\n // Promote the first signer to writable as it is the fee payer\n const first = signedKeys.length === 0;\n signedKeys.push(pubkey.toString());\n if (!first && !isWritable) {\n numReadonlySignedAccounts += 1;\n }\n } else {\n unsignedKeys.push(pubkey.toString());\n if (!isWritable) {\n numReadonlyUnsignedAccounts += 1;\n }\n }\n });\n\n // Initialize signature array, if needed\n if (this.signatures.length === 0) {\n const signatures: Array = [];\n signedKeys.forEach(pubkey => {\n signatures.push({signature: null, publicKey: new PublicKey(pubkey)});\n });\n this.signatures = signatures;\n }\n\n const accountKeys = signedKeys.concat(unsignedKeys);\n const instructions: CompiledInstruction[] = this.instructions.map(\n instruction => {\n const {data, programId} = instruction;\n return {\n programIdIndex: accountKeys.indexOf(programId.toString()),\n accounts: instruction.keys.map(keyObj =>\n accountKeys.indexOf(keyObj.pubkey.toString()),\n ),\n data: bs58.encode(data),\n };\n },\n );\n\n instructions.forEach(instruction => {\n invariant(instruction.programIdIndex >= 0);\n instruction.accounts.forEach(keyIndex => invariant(keyIndex >= 0));\n });\n\n return new Message({\n header: {\n numRequiredSignatures: this.signatures.length,\n numReadonlySignedAccounts,\n numReadonlyUnsignedAccounts,\n },\n accountKeys,\n recentBlockhash,\n instructions,\n });\n }\n\n /**\n * Get a buffer of the Transaction data that need to be covered by signatures\n */\n serializeMessage(): Buffer {\n return this.compileMessage().serialize();\n }\n\n /**\n * Sign the Transaction with the specified accounts. Multiple signatures may\n * be applied to a Transaction. The first signature is considered \"primary\"\n * and is used when testing for Transaction confirmation.\n *\n * Transaction fields should not be modified after the first call to `sign`,\n * as doing so may invalidate the signature and cause the Transaction to be\n * rejected.\n *\n * The Transaction must be assigned a valid `recentBlockhash` before invoking this method\n */\n sign(...signers: Array) {\n this.signPartial(...signers);\n }\n\n /**\n * Partially sign a Transaction with the specified accounts. The `Account`\n * inputs will be used to sign the Transaction immediately, while any\n * `PublicKey` inputs will be referenced in the signed Transaction but need to\n * be filled in later by calling `addSigner()` with the matching `Account`.\n *\n * All the caveats from the `sign` method apply to `signPartial`\n */\n signPartial(...partialSigners: Array) {\n if (partialSigners.length === 0) {\n throw new Error('No signers');\n }\n\n function partialSignerPublicKey(accountOrPublicKey: any): PublicKey {\n if ('publicKey' in accountOrPublicKey) {\n return accountOrPublicKey.publicKey;\n }\n return accountOrPublicKey;\n }\n\n function signerAccount(accountOrPublicKey: any): ?Account {\n if (\n 'publicKey' in accountOrPublicKey &&\n 'secretKey' in accountOrPublicKey\n ) {\n return accountOrPublicKey;\n }\n }\n\n const signatures: Array = partialSigners.map(\n accountOrPublicKey => ({\n signature: null,\n publicKey: partialSignerPublicKey(accountOrPublicKey),\n }),\n );\n this.signatures = signatures;\n const signData = this.serializeMessage();\n\n partialSigners.forEach((accountOrPublicKey, index) => {\n const account = signerAccount(accountOrPublicKey);\n if (account) {\n const signature = nacl.sign.detached(signData, account.secretKey);\n invariant(signature.length === 64);\n signatures[index].signature = Buffer.from(signature);\n }\n });\n }\n\n /**\n * Fill in a signature for a partially signed Transaction. The `signer` must\n * be the corresponding `Account` for a `PublicKey` that was previously provided to\n * `signPartial`\n */\n addSigner(signer: Account) {\n const signData = this.serializeMessage();\n const signature = nacl.sign.detached(signData, signer.secretKey);\n this.addSignature(signer.publicKey, signature);\n }\n\n /**\n * Add an externally created signature to a transaction\n */\n addSignature(pubkey: PublicKey, signature: Buffer) {\n invariant(signature.length === 64);\n\n const index = this.signatures.findIndex(sigpair =>\n pubkey.equals(sigpair.publicKey),\n );\n if (index < 0) {\n throw new Error(`Unknown signer: ${pubkey.toString()}`);\n }\n\n this.signatures[index].signature = Buffer.from(signature);\n }\n\n /**\n * Verify signatures of a complete, signed Transaction\n */\n verifySignatures(): boolean {\n return this._verifySignatures(this.serializeMessage());\n }\n\n /**\n * @private\n */\n _verifySignatures(signData: Buffer): boolean {\n let verified = true;\n for (const {signature, publicKey} of this.signatures) {\n if (\n !nacl.sign.detached.verify(signData, signature, publicKey.toBuffer())\n ) {\n verified = false;\n }\n }\n return verified;\n }\n\n /**\n * Serialize the Transaction in the wire format.\n *\n * The Transaction must have a valid `signature` before invoking this method\n */\n serialize(): Buffer {\n const {signatures} = this;\n if (!signatures || signatures.length === 0) {\n throw new Error('Transaction has not been signed');\n }\n\n const signData = this.serializeMessage();\n if (!this._verifySignatures(signData)) {\n throw new Error('Transaction has not been signed correctly');\n }\n\n return this._serialize(signData);\n }\n\n /**\n * @private\n */\n _serialize(signData: Buffer): Buffer {\n const {signatures} = this;\n const signatureCount = [];\n shortvec.encodeLength(signatureCount, signatures.length);\n const transactionLength =\n signatureCount.length + signatures.length * 64 + signData.length;\n const wireTransaction = Buffer.alloc(transactionLength);\n invariant(signatures.length < 256);\n Buffer.from(signatureCount).copy(wireTransaction, 0);\n signatures.forEach(({signature}, index) => {\n if (signature !== null) {\n invariant(signature.length === 64, `signature has invalid length`);\n Buffer.from(signature).copy(\n wireTransaction,\n signatureCount.length + index * 64,\n );\n }\n });\n signData.copy(\n wireTransaction,\n signatureCount.length + signatures.length * 64,\n );\n invariant(\n wireTransaction.length <= PACKET_DATA_SIZE,\n `Transaction too large: ${wireTransaction.length} > ${PACKET_DATA_SIZE}`,\n );\n return wireTransaction;\n }\n\n /**\n * Deprecated method\n * @private\n */\n get keys(): Array {\n invariant(this.instructions.length === 1);\n return this.instructions[0].keys.map(keyObj => keyObj.pubkey);\n }\n\n /**\n * Deprecated method\n * @private\n */\n get programId(): PublicKey {\n invariant(this.instructions.length === 1);\n return this.instructions[0].programId;\n }\n\n /**\n * Deprecated method\n * @private\n */\n get data(): Buffer {\n invariant(this.instructions.length === 1);\n return this.instructions[0].data;\n }\n\n /**\n * Parse a wire transaction into a Transaction object.\n */\n static from(buffer: Buffer | Uint8Array | Array): Transaction {\n // Slice up wire data\n let byteArray = [...buffer];\n\n const signatureCount = shortvec.decodeLength(byteArray);\n let signatures = [];\n for (let i = 0; i < signatureCount; i++) {\n const signature = byteArray.slice(0, SIGNATURE_LENGTH);\n byteArray = byteArray.slice(SIGNATURE_LENGTH);\n signatures.push(bs58.encode(Buffer.from(signature)));\n }\n\n return Transaction.populate(Message.from(byteArray), signatures);\n }\n\n /**\n * Populate Transaction object from message and signatures\n */\n static populate(message: Message, signatures: Array): Transaction {\n const transaction = new Transaction();\n transaction.recentBlockhash = message.recentBlockhash;\n signatures.forEach((signature, index) => {\n const sigPubkeyPair = {\n signature:\n signature == bs58.encode(DEFAULT_SIGNATURE)\n ? null\n : bs58.decode(signature),\n publicKey: message.accountKeys[index],\n };\n transaction.signatures.push(sigPubkeyPair);\n });\n\n message.instructions.forEach(instruction => {\n const keys = instruction.accounts.map(account => {\n const pubkey = message.accountKeys[account];\n return {\n pubkey,\n isSigner: transaction.signatures.some(\n keyObj => keyObj.publicKey.toString() === pubkey.toString(),\n ),\n isWritable: message.isAccountWritable(account),\n };\n });\n\n transaction.instructions.push(\n new TransactionInstruction({\n keys,\n programId: message.accountKeys[instruction.programIdIndex],\n data: bs58.decode(instruction.data),\n }),\n );\n });\n\n return transaction;\n }\n}\n","// @flow\nimport {PublicKey} from './publickey';\n\nexport const SYSVAR_CLOCK_PUBKEY = new PublicKey(\n 'SysvarC1ock11111111111111111111111111111111',\n);\n\nexport const SYSVAR_RECENT_BLOCKHASHES_PUBKEY = new PublicKey(\n 'SysvarRecentB1ockHashes11111111111111111111',\n);\n\nexport const SYSVAR_RENT_PUBKEY = new PublicKey(\n 'SysvarRent111111111111111111111111111111111',\n);\n\nexport const SYSVAR_REWARDS_PUBKEY = new PublicKey(\n 'SysvarRewards111111111111111111111111111111',\n);\n\nexport const SYSVAR_STAKE_HISTORY_PUBKEY = new PublicKey(\n 'SysvarStakeHistory1111111111111111111111111',\n);\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n\n\n/** Highest positive signed 32-bit float value */\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nvar regexPunycode = /^xn--/;\nvar regexNonASCII = /[^\\x20-\\x7E]/; // unprintable ASCII chars + non-ASCII chars\nvar regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nvar errors = {\n 'overflow': 'Overflow: input needs wider integers to process',\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n 'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n throw new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n var length = array.length;\n var result = [];\n while (length--) {\n result[length] = fn(array[length]);\n }\n return result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(string, fn) {\n var parts = string.split('@');\n var result = '';\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + '@';\n string = parts[1];\n }\n // Avoid `split(regex)` for IE8 compatibility. See #17.\n string = string.replace(regexSeparators, '\\x2E');\n var labels = string.split('.');\n var encoded = map(labels, fn).join('.');\n return result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n var output = [],\n counter = 0,\n length = string.length,\n value,\n extra;\n while (counter < length) {\n value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // high surrogate, and there is a next character\n extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // low surrogate\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // unmatched surrogate; only append this code unit, in case the next\n // code unit is the high surrogate of a surrogate pair\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nfunction ucs2encode(array) {\n return map(array, function(value) {\n var output = '';\n if (value > 0xFFFF) {\n value -= 0x10000;\n output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n value = 0xDC00 | value & 0x3FF;\n }\n output += stringFromCharCode(value);\n return output;\n }).join('');\n}\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nfunction basicToDigit(codePoint) {\n if (codePoint - 48 < 10) {\n return codePoint - 22;\n }\n if (codePoint - 65 < 26) {\n return codePoint - 65;\n }\n if (codePoint - 97 < 26) {\n return codePoint - 97;\n }\n return base;\n}\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nfunction digitToBasic(digit, flag) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n}\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nfunction adapt(delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for ( /* no initialization */ ; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n}\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nexport function decode(input) {\n // Don't use UCS-2\n var output = [],\n inputLength = input.length,\n out,\n i = 0,\n n = initialN,\n bias = initialBias,\n basic,\n j,\n index,\n oldi,\n w,\n k,\n digit,\n t,\n /** Cached calculation results */\n baseMinusT;\n\n // Handle the basic code points: let `basic` be the number of input code\n // points before the last delimiter, or `0` if there is none, then copy\n // the first basic code points to the output.\n\n basic = input.lastIndexOf(delimiter);\n if (basic < 0) {\n basic = 0;\n }\n\n for (j = 0; j < basic; ++j) {\n // if it's not a basic code point\n if (input.charCodeAt(j) >= 0x80) {\n error('not-basic');\n }\n output.push(input.charCodeAt(j));\n }\n\n // Main decoding loop: start just after the last delimiter if any basic code\n // points were copied; start at the beginning otherwise.\n\n for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */ ) {\n\n // `index` is the index of the next character to be consumed.\n // Decode a generalized variable-length integer into `delta`,\n // which gets added to `i`. The overflow checking is easier\n // if we increase `i` as we go, then subtract off its starting\n // value at the end to obtain `delta`.\n for (oldi = i, w = 1, k = base; /* no condition */ ; k += base) {\n\n if (index >= inputLength) {\n error('invalid-input');\n }\n\n digit = basicToDigit(input.charCodeAt(index++));\n\n if (digit >= base || digit > floor((maxInt - i) / w)) {\n error('overflow');\n }\n\n i += digit * w;\n t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n if (digit < t) {\n break;\n }\n\n baseMinusT = base - t;\n if (w > floor(maxInt / baseMinusT)) {\n error('overflow');\n }\n\n w *= baseMinusT;\n\n }\n\n out = output.length + 1;\n bias = adapt(i - oldi, out, oldi == 0);\n\n // `i` was supposed to wrap around from `out` to `0`,\n // incrementing `n` each time, so we'll fix that now:\n if (floor(i / out) > maxInt - n) {\n error('overflow');\n }\n\n n += floor(i / out);\n i %= out;\n\n // Insert `n` at position `i` of the output\n output.splice(i++, 0, n);\n\n }\n\n return ucs2encode(output);\n}\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nexport function encode(input) {\n var n,\n delta,\n handledCPCount,\n basicLength,\n bias,\n j,\n m,\n q,\n k,\n t,\n currentValue,\n output = [],\n /** `inputLength` will hold the number of code points in `input`. */\n inputLength,\n /** Cached calculation results */\n handledCPCountPlusOne,\n baseMinusT,\n qMinusT;\n\n // Convert the input in UCS-2 to Unicode\n input = ucs2decode(input);\n\n // Cache the length\n inputLength = input.length;\n\n // Initialize the state\n n = initialN;\n delta = 0;\n bias = initialBias;\n\n // Handle the basic code points\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n handledCPCount = basicLength = output.length;\n\n // `handledCPCount` is the number of code points that have been handled;\n // `basicLength` is the number of basic code points.\n\n // Finish the basic string - if it is not empty - with a delimiter\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n\n // All non-basic code points < n have been handled already. Find the next\n // larger one:\n for (m = maxInt, j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's state to ,\n // but guard against overflow\n handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error('overflow');\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue < n && ++delta > maxInt) {\n error('overflow');\n }\n\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer\n for (q = delta, k = base; /* no condition */ ; k += base) {\n t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) {\n break;\n }\n qMinusT = q - t;\n baseMinusT = base - t;\n output.push(\n stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n );\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n\n }\n return output.join('');\n}\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nexport function toUnicode(input) {\n return mapDomain(input, function(string) {\n return regexPunycode.test(string) ?\n decode(string.slice(4).toLowerCase()) :\n string;\n });\n}\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nexport function toASCII(input) {\n return mapDomain(input, function(string) {\n return regexNonASCII.test(string) ?\n 'xn--' + encode(string) :\n string;\n });\n}\nexport var version = '1.4.1';\n/**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see \n * @memberOf punycode\n * @type Object\n */\n\nexport var ucs2 = {\n decode: ucs2decode,\n encode: ucs2encode\n};\nexport default {\n version: version,\n ucs2: ucs2,\n toASCII: toASCII,\n toUnicode: toUnicode,\n encode: encode,\n decode: decode\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\nfunction stringifyPrimitive(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n}\n\nexport function stringify (obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (isArray(obj[k])) {\n return map(obj[k], function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n\nfunction map (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n return res;\n};\n\nexport function parse(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\nexport default {\n encode: stringify,\n stringify: stringify,\n decode: parse,\n parse: parse\n}\nexport {stringify as encode, parse as decode};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\nimport {toASCII} from 'punycode';\nimport {isObject,isString,isNullOrUndefined,isNull} from 'util';\nimport {parse as qsParse,stringify as qsStringify} from 'querystring';\nexport {\n urlParse as parse,\n urlResolve as resolve,\n urlResolveObject as resolveObject,\n urlFormat as format\n};\nexport default {\n parse: urlParse,\n resolve: urlResolve,\n resolveObject: urlResolveObject,\n format: urlFormat,\n Url: Url\n}\nexport function Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n };\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n return parse(this, url, parseQueryString, slashesDenoteHost);\n}\n\nfunction parse(self, url, parseQueryString, slashesDenoteHost) {\n if (!isString(url)) {\n throw new TypeError('Parameter \\'url\\' must be a string, not ' + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n self.path = rest;\n self.href = rest;\n self.pathname = simplePath[1];\n if (simplePath[2]) {\n self.search = simplePath[2];\n if (parseQueryString) {\n self.query = qsParse(self.search.substr(1));\n } else {\n self.query = self.search.substr(1);\n }\n } else if (parseQueryString) {\n self.search = '';\n self.query = {};\n }\n return self;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n self.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n self.slashes = true;\n }\n }\n var i, hec, l, p;\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (i = 0; i < hostEndingChars.length; i++) {\n hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n self.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (i = 0; i < nonHostChars.length; i++) {\n hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n self.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n parseHost(self);\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n self.hostname = self.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = self.hostname[0] === '[' &&\n self.hostname[self.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = self.hostname.split(/\\./);\n for (i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n self.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (self.hostname.length > hostnameMaxLen) {\n self.hostname = '';\n } else {\n // hostnames are always lower case.\n self.hostname = self.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n self.hostname = toASCII(self.hostname);\n }\n\n p = self.port ? ':' + self.port : '';\n var h = self.hostname || '';\n self.host = h + p;\n self.href += self.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n self.hostname = self.hostname.substr(1, self.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n self.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n self.search = rest.substr(qm);\n self.query = rest.substr(qm + 1);\n if (parseQueryString) {\n self.query = qsParse(self.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n self.search = '';\n self.query = {};\n }\n if (rest) self.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n self.hostname && !self.pathname) {\n self.pathname = '/';\n }\n\n //to support http.request\n if (self.pathname || self.search) {\n p = self.pathname || '';\n var s = self.search || '';\n self.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n self.href = format(self);\n return self;\n}\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (isString(obj)) obj = parse({}, obj);\n return format(obj);\n}\n\nfunction format(self) {\n var auth = self.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = self.protocol || '',\n pathname = self.pathname || '',\n hash = self.hash || '',\n host = false,\n query = '';\n\n if (self.host) {\n host = auth + self.host;\n } else if (self.hostname) {\n host = auth + (self.hostname.indexOf(':') === -1 ?\n self.hostname :\n '[' + this.hostname + ']');\n if (self.port) {\n host += ':' + self.port;\n }\n }\n\n if (self.query &&\n isObject(self.query) &&\n Object.keys(self.query).length) {\n query = qsStringify(self.query);\n }\n\n var search = self.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (self.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n}\n\nUrl.prototype.format = function() {\n return format(this);\n}\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n var relPath;\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n relPath = relative.pathname && relative.pathname.split('/') || [];\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n var authInHost;\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!isNull(result.pathname) || !isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n return parseHost(this);\n};\n\nfunction parseHost(self) {\n var host = self.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n self.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) self.hostname = host;\n}\n","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar global = getGlobal();\n\nmodule.exports = exports = global.fetch;\n\n// Needed for TypeScript and Webpack.\nexports.default = global.fetch.bind(global);\n\nexports.Headers = global.Headers;\nexports.Request = global.Request;\nexports.Response = global.Response;","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && msCrypto.getRandomValues.bind(msCrypto));\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","'use strict';\n\nconst uuid = require('uuid/v4');\n\n/**\n * Generates a JSON-RPC 1.0 or 2.0 request\n * @param {String} method Name of method to call\n * @param {Array|Object} params Array of parameters passed to the method as specified, or an object of parameter names and corresponding value\n * @param {String|Number|null} [id] Request ID can be a string, number, null for explicit notification or left out for automatic generation\n * @param {Object} [options]\n * @param {Number} [options.version=2] JSON-RPC version to use (1 or 2)\n * @param {Function} [options.generator] Passed the request, and the options object and is expected to return a request ID\n * @throws {TypeError} If any of the parameters are invalid\n * @return {Object} A JSON-RPC 1.0 or 2.0 request\n * @memberOf Utils\n */\nconst generateRequest = function(method, params, id, options) {\n if(typeof method !== 'string') {\n throw new TypeError(method + ' must be a string');\n }\n\n options = options || {};\n\n const request = {\n method: method\n };\n\n // assume that we are doing a 2.0 request unless specified differently\n if(typeof options.version === 'undefined' || options.version !== 1) {\n request.jsonrpc = '2.0';\n }\n\n if(params) {\n\n // params given, but invalid?\n if(typeof params !== 'object' && !Array.isArray(params)) {\n throw new TypeError(params + ' must be an object, array or omitted');\n }\n\n request.params = params;\n\n }\n\n // if id was left out, generate one (null means explicit notification)\n if(typeof(id) === 'undefined') {\n const generator = typeof options.generator === 'function' ? options.generator : function() { return uuid(); };\n request.id = generator(request, options);\n } else {\n request.id = id;\n }\n\n return request;\n};\n\nmodule.exports = generateRequest;\n","'use strict';\n\nconst uuid = require('uuid/v4');\nconst generateRequest = require('../../generateRequest');\n\n/**\n * Constructor for a Jayson Browser Client that does not depend any node.js core libraries\n * @class ClientBrowser\n * @param {Function} callServer Method that calls the server, receives the stringified request and a regular node-style callback\n * @param {Object} [options]\n * @param {Function} [options.reviver] Reviver function for JSON\n * @param {Function} [options.replacer] Replacer function for JSON\n * @param {Number} [options.version=2] JSON-RPC version to use (1|2)\n * @param {Function} [options.generator] Function to use for generating request IDs\n * @return {ClientBrowser}\n */\nconst ClientBrowser = function(callServer, options) {\n if(!(this instanceof ClientBrowser)) {\n return new ClientBrowser(callServer, options);\n }\n\n if (!options) {\n options = {};\n }\n\n this.options = {\n reviver: typeof options.reviver !== 'undefined' ? options.reviver : null,\n replacer: typeof options.replacer !== 'undefined' ? options.replacer : null,\n generator: typeof options.generator !== 'undefined' ? options.generator : function() { return uuid(); },\n version: typeof options.version !== 'undefined' ? options.version : 2,\n };\n\n this.callServer = callServer;\n};\n\nmodule.exports = ClientBrowser;\n\n/**\n * Creates a request and dispatches it if given a callback.\n * @param {String|Array} method A batch request if passed an Array, or a method name if passed a String\n * @param {Array|Object} [params] Parameters for the method\n * @param {String|Number} [id] Optional id. If undefined an id will be generated. If null it creates a notification request\n * @param {Function} [callback] Request callback. If specified, executes the request rather than only returning it.\n * @throws {TypeError} Invalid parameters\n * @return {Object} JSON-RPC 1.0 or 2.0 compatible request\n */\nClientBrowser.prototype.request = function(method, params, id, callback) {\n const self = this;\n let request = null;\n\n // is this a batch request?\n const isBatch = Array.isArray(method) && typeof params === 'function';\n\n if (this.options.version === 1 && isBatch) {\n throw new TypeError('JSON-RPC 1.0 does not support batching');\n }\n\n // is this a raw request?\n const isRaw = !isBatch && method && typeof method === 'object' && typeof params === 'function';\n\n if(isBatch || isRaw) {\n callback = params;\n request = method;\n } else {\n if(typeof id === 'function') {\n callback = id;\n // specifically undefined because \"null\" is a notification request\n id = undefined;\n }\n\n const hasCallback = typeof callback === 'function';\n\n try {\n request = generateRequest(method, params, id, {\n generator: this.options.generator,\n version: this.options.version\n });\n } catch(err) {\n if(hasCallback) {\n return callback(err);\n }\n throw err;\n }\n\n // no callback means we should just return a raw request\n if(!hasCallback) {\n return request;\n }\n\n }\n\n let message;\n try {\n message = JSON.stringify(request, this.options.replacer);\n } catch(err) {\n return callback(err);\n }\n\n this.callServer(message, function(err, response) {\n self._parseResponse(err, response, callback);\n });\n\n // always return the raw request\n return request;\n};\n\n/**\n * Parses a response from a server\n * @param {Object} err Error to pass on that is unrelated to the actual response\n * @param {String} responseText JSON-RPC 1.0 or 2.0 response\n * @param {Function} callback Callback that will receive different arguments depending on the amount of parameters\n * @private\n */\nClientBrowser.prototype._parseResponse = function(err, responseText, callback) {\n if(err) {\n callback(err);\n return;\n }\n\n if(!responseText) {\n // empty response text, assume that is correct because it could be a\n // notification which jayson does not give any body for\n return callback();\n }\n\n let response;\n try {\n response = JSON.parse(responseText, this.options.reviver);\n } catch(err) {\n return callback(err);\n }\n\n if(callback.length === 3) {\n // if callback length is 3, we split callback arguments on error and response\n\n // is batch response?\n if(Array.isArray(response)) {\n\n // neccesary to split strictly on validity according to spec here\n const isError = function(res) {\n return typeof res.error !== 'undefined';\n };\n\n const isNotError = function (res) {\n return !isError(res);\n };\n\n return callback(null, response.filter(isError), response.filter(isNotError));\n \n } else {\n\n // split regardless of validity\n return callback(null, response.error, response.result);\n \n }\n \n }\n\n callback(null, response);\n};\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nvar toString = Object.prototype.toString;\n\nvar kindOf = function kindOf(val) {\n if (val === void 0) return 'undefined';\n if (val === null) return 'null';\n\n var type = typeof val;\n if (type === 'boolean') return 'boolean';\n if (type === 'string') return 'string';\n if (type === 'number') return 'number';\n if (type === 'symbol') return 'symbol';\n if (type === 'function') {\n return isGeneratorFn(val) ? 'generatorfunction' : 'function';\n }\n\n if (isArray(val)) return 'array';\n if (isBuffer(val)) return 'buffer';\n if (isArguments(val)) return 'arguments';\n if (isDate(val)) return 'date';\n if (isError(val)) return 'error';\n if (isRegexp(val)) return 'regexp';\n\n switch (ctorName(val)) {\n case 'Symbol': return 'symbol';\n case 'Promise': return 'promise';\n\n // Set, Map, WeakSet, WeakMap\n case 'WeakMap': return 'weakmap';\n case 'WeakSet': return 'weakset';\n case 'Map': return 'map';\n case 'Set': return 'set';\n\n // 8-bit typed arrays\n case 'Int8Array': return 'int8array';\n case 'Uint8Array': return 'uint8array';\n case 'Uint8ClampedArray': return 'uint8clampedarray';\n\n // 16-bit typed arrays\n case 'Int16Array': return 'int16array';\n case 'Uint16Array': return 'uint16array';\n\n // 32-bit typed arrays\n case 'Int32Array': return 'int32array';\n case 'Uint32Array': return 'uint32array';\n case 'Float32Array': return 'float32array';\n case 'Float64Array': return 'float64array';\n }\n\n if (isGeneratorObj(val)) {\n return 'generator';\n }\n\n // Non-plain objects\n type = toString.call(val);\n switch (type) {\n case '[object Object]': return 'object';\n // iterators\n case '[object Map Iterator]': return 'mapiterator';\n case '[object Set Iterator]': return 'setiterator';\n case '[object String Iterator]': return 'stringiterator';\n case '[object Array Iterator]': return 'arrayiterator';\n }\n\n // other\n return type.slice(8, -1).toLowerCase().replace(/\\s/g, '');\n};\n\nfunction ctorName(val) {\n return val.constructor ? val.constructor.name : null;\n}\n\nfunction isArray(val) {\n if (Array.isArray) return Array.isArray(val);\n return val instanceof Array;\n}\n\nfunction isError(val) {\n return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number');\n}\n\nfunction isDate(val) {\n if (val instanceof Date) return true;\n return typeof val.toDateString === 'function'\n && typeof val.getDate === 'function'\n && typeof val.setDate === 'function';\n}\n\nfunction isRegexp(val) {\n if (val instanceof RegExp) return true;\n return typeof val.flags === 'string'\n && typeof val.ignoreCase === 'boolean'\n && typeof val.multiline === 'boolean'\n && typeof val.global === 'boolean';\n}\n\nfunction isGeneratorFn(name, val) {\n return ctorName(name) === 'GeneratorFunction';\n}\n\nfunction isGeneratorObj(val) {\n return typeof val.throw === 'function'\n && typeof val.return === 'function'\n && typeof val.next === 'function';\n}\n\nfunction isArguments(val) {\n try {\n if (typeof val.length === 'number' && typeof val.callee === 'function') {\n return true;\n }\n } catch (err) {\n if (err.message.indexOf('callee') !== -1) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n if (val.constructor && typeof val.constructor.isBuffer === 'function') {\n return val.constructor.isBuffer(val);\n }\n return false;\n}\n\n/**\r\n * Superstruct ships by default with an unopinionated set of scalar types that\r\n * express all of the data types that are built-in to JavaScript.\r\n */\n\nvar Types = {\n /**\r\n * Matches any value other than `undefined`.\r\n *\r\n * ```js\r\n * 'anything'\r\n * true\r\n * ```\r\n */\n any: function any(value) {\n return value !== undefined;\n },\n\n /**\r\n * Matches an `arguments` object.\r\n *\r\n * ```js\r\n * arguments\r\n * ```\r\n */\n arguments: function _arguments(value) {\n return kindOf(value) === 'arguments';\n },\n\n /**\r\n * Matches an `Array`.\r\n *\r\n * ```js\r\n * [1, 2, 3]\r\n * ```\r\n */\n array: function array(value) {\n return kindOf(value) === 'array';\n },\n\n /**\r\n * Matches a boolean.\r\n *\r\n * ```js\r\n * true\r\n * false\r\n * ```\r\n */\n boolean: function boolean(value) {\n return kindOf(value) === 'boolean';\n },\n\n /**\r\n * Matches a Node.js `Buffer`.\r\n *\r\n * ```js\r\n * Buffer.from('string')\r\n * ```\r\n */\n buffer: function buffer(value) {\n return kindOf(value) === 'buffer';\n },\n\n /**\r\n * Matches a **valid** `Date` object.\r\n *\r\n * ```js\r\n * new Date()\r\n * ```\r\n *\r\n * Note: Invalid `Date` objects that equal `NaN` are not matched.\r\n */\n date: function date(value) {\n return kindOf(value) === 'date' && !isNaN(value);\n },\n\n /**\r\n * Matches an error object.\r\n *\r\n * ```js\r\n * new Error()\r\n * ```\r\n */\n error: function error(value) {\n return kindOf(value) === 'error';\n },\n\n /**\r\n * Matches a `Float32Array` object.\r\n */\n float32array: function float32array(value) {\n return kindOf(value) === 'float32array';\n },\n\n /**\r\n * Matches a `Float64Array` object.\r\n */\n float64array: function float64array(value) {\n return kindOf(value) === 'float64array';\n },\n\n /**\r\n * Matches a function.\r\n *\r\n * ```js\r\n * () => {}\r\n * function () {}\r\n * ```\r\n */\n function: function _function(value) {\n return kindOf(value) === 'function';\n },\n\n /**\r\n * Matches a generator function.\r\n *\r\n * ```js\r\n * function* () {}\r\n * ```\r\n */\n generatorfunction: function generatorfunction(value) {\n return kindOf(value) === 'generatorfunction';\n },\n\n /**\r\n * Matches a `Int16Array` object.\r\n */\n int16array: function int16array(value) {\n return kindOf(value) === 'int16array';\n },\n\n /**\r\n * Matches a `Int32Array` object.\r\n */\n int32array: function int32array(value) {\n return kindOf(value) === 'int32array';\n },\n\n /**\r\n * Matches a `Int8Array` object.\r\n */\n int8array: function int8array(value) {\n return kindOf(value) === 'int8array';\n },\n\n /**\r\n * Matches a `Map` object.\r\n *\r\n * ```js\r\n * new Map()\r\n * ```\r\n */\n map: function map(value) {\n return kindOf(value) === 'map';\n },\n\n /**\r\n * Matches the `null` literal value.\r\n *\r\n * ```js\r\n * null\r\n * ```\r\n */\n null: function _null(value) {\n return kindOf(value) === 'null';\n },\n\n /**\r\n * Matches a number.\r\n *\r\n * ```js\r\n * 42\r\n * ```\r\n */\n number: function number(value) {\n return kindOf(value) === 'number';\n },\n\n /**\r\n * Matches a plain object.\r\n *\r\n * ```js\r\n * { key: 'value' }\r\n * { something: true }\r\n * ```\r\n */\n object: function object(value) {\n return kindOf(value) === 'object';\n },\n\n /**\r\n * Matches a `Promise` object.\r\n *\r\n * ```js\r\n * Promise.resolve()\r\n * ```\r\n */\n promise: function promise(value) {\n return kindOf(value) === 'promise';\n },\n\n /**\r\n * Matches a regular expression object.\r\n *\r\n * ```js\r\n * /a-z/g\r\n * ```\r\n */\n regexp: function regexp(value) {\n return kindOf(value) === 'regexp';\n },\n\n /**\r\n * Matches a `Set` object.\r\n *\r\n * ```js\r\n * new Set()\r\n * ```\r\n */\n set: function set(value) {\n return kindOf(value) === 'set';\n },\n\n /**\r\n * Matches a string.\r\n *\r\n * ```js\r\n * 'text'\r\n * ```\r\n */\n string: function string(value) {\n return kindOf(value) === 'string';\n },\n\n /**\r\n * Matches a `Symbol`.\r\n *\r\n * ```js\r\n * Symbol()\r\n * ```\r\n */\n symbol: function symbol(value) {\n return kindOf(value) === 'symbol';\n },\n\n /**\r\n * Matches a `Uint16Array` object.\r\n */\n uint16array: function uint16array(value) {\n return kindOf(value) === 'uint16array';\n },\n\n /**\r\n * Matches a `Uint32Array` object.\r\n */\n uint32array: function uint32array(value) {\n return kindOf(value) === 'uint32array';\n },\n\n /**\r\n * Matches a `Uint8Array` object.\r\n */\n uint8array: function uint8array(value) {\n return kindOf(value) === 'uint8array';\n },\n\n /**\r\n * Matches a `Uint8ClampedArray` object.\r\n */\n uint8clampedarray: function uint8clampedarray(value) {\n return kindOf(value) === 'uint8clampedarray';\n },\n\n /**\r\n * Matches the `undefined` literal value.\r\n *\r\n * ```js\r\n * undefined\r\n * ```\r\n */\n undefined: function undefined$1(value) {\n return kindOf(value) === 'undefined';\n },\n\n /**\r\n * Matches a `WeakMap` object.\r\n *\r\n * ```js\r\n * new WeakMap()\r\n * ```\r\n */\n weakmap: function weakmap(value) {\n return kindOf(value) === 'weakmap';\n },\n\n /**\r\n * Matches a `WeakSet` object.\r\n *\r\n * ```js\r\n * new WeakSet()\r\n * ```\r\n */\n weakset: function weakset(value) {\n return kindOf(value) === 'weakset';\n }\n};\n\nvar isProduction = process.env.NODE_ENV === 'production';\nvar prefix = 'Invariant failed';\nfunction invariant(condition, message) {\n if (condition) {\n return;\n }\n\n if (isProduction) {\n throw new Error(prefix);\n } else {\n throw new Error(prefix + \": \" + (message || ''));\n }\n}\n\n/**\r\n * `StructError` objects are thrown (or returned) by Superstruct when its\r\n * validation fails. The error represents the first error encountered during\r\n * validation. But they also have an `error.failures` property that holds\r\n * information for all of the failures encountered.\r\n */\n\nvar StructError =\n/*#__PURE__*/\nfunction (_TypeError) {\n _inheritsLoose(StructError, _TypeError);\n\n function StructError(failures) {\n var _this;\n\n invariant(failures.length > 0, \"StructError requires being passed a failure, but received: \" + failures);\n var first = failures[0];\n\n var path = first.path,\n value = first.value,\n type = first.type,\n branch = first.branch,\n rest = _objectWithoutPropertiesLoose(first, [\"path\", \"value\", \"type\", \"branch\"]);\n\n var message = \"Expected a value of type `\" + type + \"`\" + (path.length ? \" for `\" + path.join('.') + \"`\" : '') + \" but received `\" + JSON.stringify(value) + \"`.\";\n _this = _TypeError.call(this, message) || this;\n _this.type = type;\n _this.value = value;\n Object.assign(_assertThisInitialized(_this), rest);\n _this.path = path;\n _this.branch = branch;\n _this.failures = failures;\n _this.stack = new Error().stack;\n _this.__proto__ = StructError.prototype;\n return _this;\n }\n\n return StructError;\n}(_wrapNativeSuper(TypeError));\n\n/**\r\n * A symbol to set on `Struct` objects to test them against later.\r\n */\nvar STRUCT = Symbol('STRUCT');\n/**\r\n * Check if a value is a `Struct` object.\r\n */\n\nvar isStruct = function isStruct(value) {\n return typeof value === 'function' && value[STRUCT];\n};\n/**\r\n * This abstract `Struct` factory creates a generic struct that validates values\r\n * against a `Validator` function.\r\n */\n\nvar createStruct = function createStruct(props) {\n var struct = props.struct;\n var Error = struct.Error;\n\n var Struct = function Struct(value) {\n return Struct.assert(value);\n }; // Set a hidden symbol property so that we can check it later to see if an\n // object is a struct object.\n\n\n Object.defineProperty(Struct, STRUCT, {\n value: true\n });\n Struct.kind = props.kind;\n Struct.type = props.type;\n\n Struct.default = function () {\n return typeof props.defaults === 'function' ? props.defaults() : props.defaults;\n };\n\n Struct.test = function (value) {\n var _Struct$check = Struct.check(value, [value], []),\n failures = _Struct$check[0];\n\n return !failures;\n };\n\n Struct.assert = function (value) {\n var _Struct$check2 = Struct.check(value, [value], []),\n failures = _Struct$check2[0],\n result = _Struct$check2[1];\n\n if (failures) {\n throw new Error(failures);\n } else {\n return result;\n }\n };\n\n Struct.validate = function (value) {\n var _Struct$check3 = Struct.check(value, [value], []),\n failures = _Struct$check3[0],\n result = _Struct$check3[1];\n\n if (failures) {\n return [new Error(failures)];\n } else {\n return [undefined, result];\n }\n };\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n var failures = [Struct.fail({\n value: value,\n branch: branch,\n path: path\n })];\n return [failures];\n };\n\n Struct.fail = function (obj) {\n return _objectSpread2({}, obj, {\n type: 'type' in obj ? obj.type : Struct.type\n });\n };\n\n return Struct;\n};\n\nvar createArray = function createArray(schema, defaults, struct) {\n invariant(Array.isArray(schema) && schema.length === 1, \"Array structs must be defined as an array with one element, but you passed: \" + schema);\n var Element = struct(schema[0], undefined);\n var Struct = createStruct({\n kind: 'array',\n type: Element.type + \"[]\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n if (!Array.isArray(value)) {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n }\n\n var result = [];\n var failures = [];\n\n for (var i = 0; i < value.length; i++) {\n var v = value[i];\n\n var _Element$check = Element.check(v, branch.concat(v), path.concat(i)),\n efs = _Element$check[0],\n er = _Element$check[1];\n\n if (efs) {\n failures.push.apply(failures, efs);\n continue;\n }\n\n result[i] = er;\n }\n\n return failures.length ? [failures] : [undefined, result];\n };\n\n return Struct;\n};\n\nvar createDynamic = function createDynamic(schema, defaults, struct) {\n invariant(typeof schema === 'function', \"Dynamic structs must be defined as a function, but you passed: \" + schema);\n var Dynamic = createStruct({\n kind: 'dynamic',\n type: \"dynamic<\\u2026>\",\n defaults: defaults,\n struct: struct\n });\n\n Dynamic.check = function (value, branch, path) {\n if (value === void 0) {\n value = Dynamic.default();\n }\n\n var Struct = schema(value, branch, path);\n return Struct.check(value, branch, path);\n };\n\n return Dynamic;\n};\n\nvar createEnum = function createEnum(schema, defaults, struct) {\n invariant(Array.isArray(schema), \"Enum structs must be defined as an array, but you passed: \" + schema);\n\n var validator = function validator(value) {\n return schema.includes(value);\n };\n\n var Struct = struct(validator, defaults);\n Struct.kind = 'enum';\n Struct.type = schema.map(function (s) {\n return typeof s === 'string' ? \"\\\"\" + s + \"\\\"\" : \"\" + s;\n }).join(' | ');\n return Struct;\n};\n\nvar createFunction = function createFunction(schema, defaults, struct) {\n var Struct = createStruct({\n kind: 'function',\n type: \"function<\\u2026>\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n var result = schema(value, branch, path);\n\n if (result === true) {\n return [undefined, value];\n }\n\n var failures = [];\n\n if (result === false) {\n failures.push(Struct.fail({\n value: value,\n branch: branch,\n path: path\n }));\n } else if (Array.isArray(result) && result.length > 0) {\n for (var _iterator = result, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var r = _ref;\n failures.push(Struct.fail(_objectSpread2({\n value: value,\n branch: branch,\n path: path\n }, r)));\n }\n } else if (typeof result === 'object') {\n failures.push(Struct.fail(_objectSpread2({\n value: value,\n branch: branch,\n path: path\n }, result)));\n } else {\n invariant(false, \"Validator functions must return a boolean, a failure object, or an array of failure objects, but you passed: \" + result);\n }\n\n return [failures];\n };\n\n return Struct;\n};\n\nvar createInstance = function createInstance(schema, defaults, struct) {\n invariant(typeof schema === 'function', \"Instance structs must be defined as a function, but you passed: \" + schema);\n\n var validator = function validator(value) {\n return value instanceof schema;\n };\n\n var Struct = struct(validator, defaults);\n Struct.kind = 'instance';\n Struct.type = \"instance<\" + schema.name + \">\";\n return Struct;\n};\n\nvar createInterface = function createInterface(schema, defaults, struct) {\n invariant(typeof schema === 'object', \"Interface structs must be defined as an object, but you passed: \" + schema);\n var Props = {};\n\n for (var key in schema) {\n Props[key] = struct(schema[key]);\n }\n\n var Struct = createStruct({\n kind: 'interface',\n type: \"interface<{\" + Object.keys(schema).join() + \"}>\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n if (typeof value !== 'object' && typeof value !== 'function') {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n }\n\n var failures = [];\n\n for (var k in Props) {\n var Prop = Props[k];\n var v = value[k];\n\n var _Prop$check = Prop.check(v, branch.concat(v), path.concat(k)),\n pfs = _Prop$check[0];\n\n if (pfs) {\n failures.push.apply(failures, pfs);\n }\n }\n\n return failures.length ? [failures] : [undefined, value];\n };\n\n return Struct;\n};\n\nvar createIntersection = function createIntersection(schema, defaults, struct) {\n invariant(Array.isArray(schema) && schema.length !== 0, \"Intersection structs must be defined as a non-empty array, but you passed: \" + schema);\n var Structs = schema.map(function (sch) {\n return struct(sch);\n });\n var type = Structs.map(function (s) {\n return s.type;\n }).join(' & ');\n var Struct = createStruct({\n kind: 'intersection',\n type: type,\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n var result = value;\n\n for (var _iterator = Structs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var _struct = _ref;\n\n var _struct$check = _struct.check(value, branch, path),\n fs = _struct$check[0],\n v = _struct$check[1];\n\n if (fs) {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n } else {\n result = v;\n }\n }\n\n return [undefined, result];\n };\n\n return Struct;\n};\n\nvar createLazy = function createLazy(schema, defaults, struct) {\n invariant(typeof schema === 'function', \"Lazy structs must be defined as a function, but you passed: \" + schema);\n var Lazy = createStruct({\n kind: 'lazy',\n type: \"lazy<\\u2026>\",\n defaults: defaults,\n struct: struct\n });\n\n Lazy.check = function () {\n Object.assign(Lazy, schema());\n return Lazy.check.apply(Lazy, arguments);\n };\n\n return Lazy;\n};\n\nvar createSize = function createSize(schema, defaults, struct) {\n invariant(Array.isArray(schema) && schema.length === 2 && schema.every(function (n) {\n return typeof n === 'number';\n }), \"Size structs must be defined as an array with two number elements, but you passed: \" + schema);\n var min = schema[0],\n max = schema[1];\n\n var validator = function validator(value) {\n return value != null && typeof value.length === 'number' && value.length >= min && value.length <= max;\n };\n\n var Struct = struct(validator, defaults);\n Struct.kind = 'size';\n Struct.type = \"size<\" + min + \",\" + max + \">\";\n return Struct;\n};\n\nvar createLiteral = function createLiteral(schema, defaults, struct) {\n var validator = function validator(value) {\n return value === schema;\n };\n\n var Struct = struct(validator, defaults);\n Struct.kind = 'literal';\n Struct.type = typeof schema === 'string' ? \"\\\"\" + schema + \"\\\"\" : \"\" + schema;\n return Struct;\n};\n\nvar createObject = function createObject(schema, defaults, struct) {\n invariant(typeof schema === 'object', \"Object structs must be defined as an object, but you passed: \" + schema);\n var Props = {};\n\n for (var key in schema) {\n Props[key] = struct(schema[key]);\n }\n\n var Struct = createStruct({\n kind: 'object',\n type: \"{\" + Object.keys(schema).join() + \"}\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n var d = Struct.default();\n\n if (value === undefined) {\n value = d;\n }\n\n if (kindOf(value) !== 'object') {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n }\n\n var result = {};\n var failures = [];\n var keys = new Set(Object.keys(Props).concat(Object.keys(value)));\n\n for (var _iterator = keys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var k = _ref;\n var v = value[k];\n var p = path.concat(k);\n var b = branch.concat(v);\n var Prop = Props[k];\n\n if (v === undefined && d != null && k in d) {\n v = typeof d[k] === 'function' ? d[k](value, branch, path) : d[k];\n }\n\n if (!(k in Props)) {\n failures.push(Struct.fail({\n type: undefined,\n value: v,\n path: p,\n branch: value\n }));\n continue;\n }\n\n var _Prop$check = Prop.check(v, b, p),\n pfs = _Prop$check[0],\n pr = _Prop$check[1];\n\n if (pfs) {\n failures.push.apply(failures, pfs);\n } else if (pr !== undefined && k in Props) {\n result[k] = pr;\n }\n }\n\n return failures.length ? [failures] : [undefined, result];\n };\n\n return Struct;\n};\n\nvar createPartial = function createPartial(schema, defaults, struct) {\n invariant(typeof schema === 'object', \"Partial structs must be defined as an object, but you passed: \" + schema);\n var Props = {};\n\n for (var key in schema) {\n Props[key] = struct.union([schema[key], 'undefined']);\n }\n\n var Struct = createStruct({\n kind: 'object',\n type: \"{\" + Object.keys(schema).join() + \"}\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n var d = Struct.default();\n\n if (value === undefined) {\n value = d;\n }\n\n if (kindOf(value) !== 'object') {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n }\n\n var result = {};\n var failures = [];\n\n for (var _iterator = value, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var k = _ref;\n var v = value[k];\n var p = path.concat(k);\n var b = branch.concat(v);\n var Prop = Props[k];\n\n if (v === undefined && d != null && k in d) {\n v = typeof d[k] === 'function' ? d[k](value, branch, path) : d[k];\n }\n\n if (!(k in Props)) {\n failures.push(Struct.fail({\n type: undefined,\n value: v,\n path: p,\n branch: value\n }));\n continue;\n }\n\n var _Prop$check = Prop.check(v, b, p),\n pfs = _Prop$check[0],\n pr = _Prop$check[1];\n\n if (pfs) {\n failures.push.apply(failures, pfs);\n } else if (pr !== undefined && k in Props) {\n result[k] = pr;\n }\n }\n\n return failures.length ? [failures] : [undefined, result];\n };\n\n return Struct;\n};\n\nvar createPick = function createPick(schema, defaults, struct) {\n invariant(typeof schema === 'object', \"Pick structs must be defined as an object, but you passed: \" + schema);\n var Props = {};\n\n for (var key in schema) {\n Props[key] = struct(schema[key]);\n }\n\n var Struct = createStruct({\n kind: 'pick',\n type: \"pick<{\" + Object.keys(schema).join() + \"}>\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n var d = Struct.default();\n\n if (value === undefined) {\n value = d;\n }\n\n if (kindOf(value) !== 'object') {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n }\n\n var result = {};\n var failures = [];\n\n for (var k in Props) {\n var v = value[k];\n var p = path.concat(k);\n var b = branch.concat(v);\n var Prop = Props[k];\n\n if (v === undefined && d != null && k in d) {\n v = typeof d[k] === 'function' ? d[k](value, branch, path) : d[k];\n }\n\n var _Prop$check = Prop.check(v, b, p),\n pfs = _Prop$check[0],\n pr = _Prop$check[1];\n\n if (pfs) {\n failures.push.apply(failures, pfs);\n } else if (pr !== undefined && k in Props) {\n result[k] = pr;\n }\n }\n\n return failures.length ? [failures] : [undefined, result];\n };\n\n return Struct;\n};\n\nvar createRecord = function createRecord(schema, defaults, struct) {\n invariant(Array.isArray(schema) && schema.length === 2, \"Record structs must be defined as an array with two elements, but you passed: \" + schema);\n var Key = struct(schema[0]);\n var Value = struct(schema[1]);\n var Struct = createStruct({\n kind: 'record',\n type: \"record<\" + Key.type + \",\" + Value.type + \">\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n // Record structs have a special default handling behavior, where the defaults\n // are for the entries themselves, not for the entire value. So we can't use\n // JavaScript's built-in default handling here.\n var defs = Struct.default();\n value = defs ? _objectSpread2({}, defs, {}, value) : value;\n\n if (kindOf(value) !== 'object') {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n }\n\n var result = {};\n var failures = [];\n\n for (var k in value) {\n var v = value[k];\n var p = path.concat(k);\n var b = branch.concat(v);\n\n var _Key$check = Key.check(k, b, p),\n kfs = _Key$check[0],\n kr = _Key$check[1];\n\n if (kfs) {\n failures.push.apply(failures, kfs);\n } else {\n var _Value$check = Value.check(v, b, p),\n vfs = _Value$check[0],\n vr = _Value$check[1];\n\n if (vfs) {\n failures.push.apply(failures, vfs);\n } else {\n result[kr] = vr;\n }\n }\n }\n\n return failures.length ? [failures] : [undefined, result];\n };\n\n return Struct;\n};\n\nvar createScalar = function createScalar(schema, defaults, struct) {\n invariant(typeof schema === 'string', \"Scalar structs must be defined as a string, but you passed: \" + schema);\n var Types = struct.Types;\n invariant(schema in Types, \"No struct validator function found for type \\\"\" + schema + \"\\\".\");\n var Struct = struct(Types[schema], defaults);\n Struct.kind = 'scalar';\n Struct.type = schema;\n return Struct;\n};\n\nvar createShorthand = function createShorthand(schema, defaults, struct) {\n if (isStruct(schema)) {\n return schema;\n }\n\n if (Array.isArray(schema)) {\n if (schema.length === 1) {\n var _schema = schema,\n first = _schema[0];\n return struct.array([first], defaults);\n } else if (schema.length > 1) {\n return struct.tuple(schema, defaults);\n }\n }\n\n if (typeof schema === 'function') {\n return struct.function(schema, defaults);\n }\n\n if (typeof schema === 'object') {\n return struct.object(schema, defaults);\n }\n\n if (typeof schema === 'string') {\n var optional = false;\n var Struct;\n\n if (schema.endsWith('?')) {\n optional = true;\n schema = schema.slice(0, -1);\n }\n\n if (schema.includes('|')) {\n var scalars = schema.split(/\\s*\\|\\s*/g);\n Struct = struct.union(scalars, defaults);\n } else if (schema.includes('&')) {\n var _scalars = schema.split(/\\s*&\\s*/g);\n\n Struct = struct.intersection(_scalars, defaults);\n } else {\n Struct = struct.scalar(schema, defaults);\n }\n\n if (optional) {\n Struct = struct.union([Struct, 'undefined'], undefined);\n }\n\n return Struct;\n }\n\n throw new Error(\"A schema definition must be an object, array, string or function, but you passed: \" + schema);\n};\n\nvar createTuple = function createTuple(schema, defaults, struct) {\n invariant(Array.isArray(schema), \"Tuple structs must be defined as an array, but you passed: \" + schema);\n var Elements = schema.map(function (s) {\n return struct(s);\n });\n var Struct = createStruct({\n kind: 'tuple',\n type: \"[\" + Elements.map(function (S) {\n return S.type;\n }).join() + \"]\",\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n if (!Array.isArray(value)) {\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n }\n\n var result = [];\n var failures = [];\n var length = Math.max(value.length, Elements.length);\n\n for (var i = 0; i < length; i++) {\n var Element = Elements[i];\n var v = value[i];\n var p = path.concat(i);\n var b = branch.concat(v);\n\n if (!Element) {\n failures.push(Struct.fail({\n type: undefined,\n value: v,\n path: p,\n branch: b\n }));\n } else {\n var _Element$check = Element.check(v, b, p),\n efs = _Element$check[0],\n er = _Element$check[1];\n\n if (efs) {\n failures.push.apply(failures, efs);\n } else {\n result[i] = er;\n }\n }\n }\n\n return failures.length ? [failures] : [undefined, result];\n };\n\n return Struct;\n};\n\nvar createUnion = function createUnion(schema, defaults, struct) {\n invariant(Array.isArray(schema) && schema.length !== 0, \"Union structs must be defined as a non-empty array, but you passed: \" + schema);\n var Structs = schema.map(function (sch) {\n return struct(sch);\n });\n var type = Structs.map(function (s) {\n return s.type;\n }).join(' | ');\n var Struct = createStruct({\n kind: 'union',\n type: type,\n defaults: defaults,\n struct: struct\n });\n\n Struct.check = function (value, branch, path) {\n if (value === void 0) {\n value = Struct.default();\n }\n\n for (var _iterator = Structs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var _struct = _ref;\n\n var _struct$check = _struct.check(value, branch, path),\n fs = _struct$check[0],\n v = _struct$check[1];\n\n if (!fs) {\n return [undefined, v];\n }\n }\n\n return [[Struct.fail({\n value: value,\n branch: branch,\n path: path\n })]];\n };\n\n return Struct;\n};\n\n/**\r\n * Create a struct singleton with settings that include your own domain-specific\r\n * data `types`, and an optional custom `Error` class.\r\n */\n\nvar superstruct = function superstruct(settings) {\n if (settings === void 0) {\n settings = {};\n }\n\n var struct = function struct(schema, defaults) {\n return createShorthand(schema, defaults, struct);\n };\n\n struct.array = function (schema, defaults) {\n return createArray(schema, defaults, struct);\n };\n\n struct.dynamic = function (schema, defaults) {\n return createDynamic(schema, defaults, struct);\n };\n\n struct.enum = function (schema, defaults) {\n return createEnum(schema, defaults, struct);\n };\n\n struct.function = function (schema, defaults) {\n return createFunction(schema, defaults, struct);\n };\n\n struct.instance = function (schema, defaults) {\n return createInstance(schema, defaults, struct);\n };\n\n struct.interface = function (schema, defaults) {\n return createInterface(schema, defaults, struct);\n };\n\n struct.intersection = function (schema, defaults) {\n return createIntersection(schema, defaults, struct);\n };\n\n struct.lazy = function (schema, defaults) {\n return createLazy(schema, defaults, struct);\n };\n\n struct.literal = function (schema, defaults) {\n return createLiteral(schema, defaults, struct);\n };\n\n struct.object = function (schema, defaults) {\n return createObject(schema, defaults, struct);\n };\n\n struct.optional = function (schema, defaults) {\n return createUnion([schema, 'undefined'], defaults, struct);\n };\n\n struct.partial = function (schema, defaults) {\n return createPartial(schema, defaults, struct);\n };\n\n struct.pick = function (schema, defaults) {\n return createPick(schema, defaults, struct);\n };\n\n struct.record = function (schema, defaults) {\n return createRecord(schema, defaults, struct);\n };\n\n struct.scalar = function (schema, defaults) {\n return createScalar(schema, defaults, struct);\n };\n\n struct.size = function (schema, defaults) {\n return createSize(schema, defaults, struct);\n };\n\n struct.tuple = function (schema, defaults) {\n return createTuple(schema, defaults, struct);\n };\n\n struct.union = function (schema, defaults) {\n return createUnion(schema, defaults, struct);\n };\n\n struct.Error = settings.error || StructError;\n struct.Types = _objectSpread2({}, Types, {}, settings.types);\n return struct;\n};\n\n/**\r\n * The singleton instance of Superstruct that is exported by default, configured\r\n * with types for all of the JavaScript built-in data types.\r\n *\r\n * You can use it if you don't need any custom types. However, if you do want to\r\n * define custom types, use the [[superstruct]] factory to configure your own\r\n * [[Superstruct]] instance.\r\n */\n\nvar struct = superstruct();\n\nexport { StructError, Types, isStruct, struct, superstruct };\n//# sourceMappingURL=index.es.js.map\n","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","var _typeof = require(\"../helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","/**\n * WebSocket implements a browser-side WebSocket specification.\n * @module Client\n */\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = _default;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _eventemitter = require(\"eventemitter3\");\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2[\"default\"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2[\"default\"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2[\"default\"])(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nvar WebSocketBrowserImpl = /*#__PURE__*/function (_EventEmitter) {\n (0, _inherits2[\"default\"])(WebSocketBrowserImpl, _EventEmitter);\n\n var _super = _createSuper(WebSocketBrowserImpl);\n\n /** Instantiate a WebSocket class\n * @constructor\n * @param {String} address - url to a websocket server\n * @param {(Object)} options - websocket options\n * @param {(String|Array)} protocols - a list of protocols\n * @return {WebSocketBrowserImpl} - returns a WebSocket instance\n */\n function WebSocketBrowserImpl(address, options, protocols) {\n var _this;\n\n (0, _classCallCheck2[\"default\"])(this, WebSocketBrowserImpl);\n _this = _super.call(this);\n _this.socket = new window.WebSocket(address, protocols);\n\n _this.socket.onopen = function () {\n return _this.emit(\"open\");\n };\n\n _this.socket.onmessage = function (event) {\n return _this.emit(\"message\", event.data);\n };\n\n _this.socket.onerror = function (error) {\n return _this.emit(\"error\", error);\n };\n\n _this.socket.onclose = function (event) {\n _this.emit(\"close\", event.code, event.reason);\n };\n\n return _this;\n }\n /**\n * Sends data through a websocket connection\n * @method\n * @param {(String|Object)} data - data to be sent via websocket\n * @param {Object} optionsOrCallback - ws options\n * @param {Function} callback - a callback called once the data is sent\n * @return {Undefined}\n */\n\n\n (0, _createClass2[\"default\"])(WebSocketBrowserImpl, [{\n key: \"send\",\n value: function send(data, optionsOrCallback, callback) {\n var cb = callback || optionsOrCallback;\n\n try {\n this.socket.send(data);\n cb();\n } catch (error) {\n cb(error);\n }\n }\n /**\n * Closes an underlying socket\n * @method\n * @param {Number} code - status code explaining why the connection is being closed\n * @param {String} reason - a description why the connection is closing\n * @return {Undefined}\n * @throws {Error}\n */\n\n }, {\n key: \"close\",\n value: function close(code, reason) {\n this.socket.close(code, reason);\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(type, listener, options) {\n this.socket.addEventListener(type, listener, options);\n }\n }]);\n return WebSocketBrowserImpl;\n}(_eventemitter.EventEmitter);\n/**\n * factory method for common WebSocket instance\n * @method\n * @param {String} address - url to a websocket server\n * @param {(Object)} options - websocket options\n * @return {Undefined}\n */\n\n\nfunction _default(address, options) {\n return new WebSocketBrowserImpl(address, options);\n}","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","/**\n * @module {function} 101/exists\n * @type {function}\n */\n\n/**\n * Returns false for null and undefined, true for everything else.\n * @function module:101/exists\n * @param val {*} - value to be existance checked\n * @return {boolean} whether the value exists or not\n */\nmodule.exports = exists;\n\nfunction exists (val) {\n return val !== undefined && val !== null;\n}","/**\n * Functional version of a strict object check (Arrays and RegExps are not objects)\n * @module 101/is-object\n */\n\n/**\n * @function module:101/is-object\n * @param {*} val - value checked to be an object\n * @return {boolean} Whether the value is an object or not\n */\nvar exists = require('./exists');\n\nmodule.exports = isObject;\n\nfunction isObject (val) {\n return typeof val === 'object' &&\n exists(val) &&\n !Array.isArray(val) &&\n !(val instanceof RegExp) &&\n !(val instanceof String) &&\n !(val instanceof Number);\n}","/**\n * @module 101/is-function\n */\n\n/**\n * Functional version of val typeof 'function'\n * @function module:101/is-function\n * @param {*} val - value checked to be a function\n * @return {boolean} Whether the value is a function or not\n */\nmodule.exports = isFunction;\n\nfunction isFunction (v) {\n return typeof v === 'function';\n}","/**\n * @module 101/not\n */\n\nvar isFunction = require('./is-function');\n\n/**\n * Functional version of !\n * @function module:101/not\n * @param {*} val - value to inverse\n * @return {function} - function whose arguments and context are applied to fn and result is inversed\n */\nmodule.exports = not;\n\nfunction not (val) {\n if (isFunction(val)) {\n return function (/* args */) {\n return not(val.apply(this, arguments));\n };\n }\n else {\n return !val;\n }\n}","module.exports = isOptionalKey\n\nfunction isOptionalKey (key) {\n return /^\\[.+\\]$/.test(key)\n}\n","module.exports = isSpreadKey\n\nfunction isSpreadKey (key) {\n return /^[.]{3}.+/.test(key) ||\n /^\\[[.]{3}[^\\]]+\\]$/.test(key)\n}\n","/** \n * @module 101/is-integer\n */ \n\n/**\n * Returns true if n is an integer.\n * @function module:101/is-integer\n * @param {*} val - value checked to be a string\n * @return {boolean} Whether the value is an integer or not\n */\n\nmodule.exports = isInteger;\n\nfunction isInteger (val) {\n return typeof val === 'number' && isFinite(val) && Math.floor(val) === val;\n}\n","/**\n * @module 101/is-string\n */\n\n/**\n * Functional version of val typeof 'string'\n * @function module:101/is-string\n * @param {*} val - value checked to be a string\n * @return {boolean} Whether the value is an string or not\n */\nmodule.exports = isString;\n\nfunction isString (val) {\n return typeof val === 'string' || val instanceof String;\n}\n","module.exports = assertType\n\nfunction assertType (bool, message) {\n if (!bool) {\n throw new TypeError(message)\n }\n}\n","var capitalized = /^[A-Z]/\nvar strictCapitalilized = /^[A-Z]([a-z]|$)/\n\nmodule.exports = isCapitalized\n\nfunction isCapitalized (str, strict) {\n return strict\n ? strictCapitalilized.test(str)\n : capitalized.test(str)\n}\n","(function(root) {\n var toString = Function.prototype.toString;\n\n function fnBody(fn) {\n return toString.call(fn).replace(/^[^{]*{\\s*/,'').replace(/\\s*}[^}]*$/,'');\n }\n\n function isClass(fn) {\n return (typeof fn === 'function' &&\n (/^class\\s/.test(toString.call(fn)) ||\n (/^.*classCallCheck\\(/.test(fnBody(fn)))) // babel.js\n );\n }\n\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = isClass;\n }\n exports.isClass = isClass;\n } else if (typeof define === 'function' && define.amd) {\n define([], function() {\n return isClass;\n });\n } else {\n root.isClass = isClass;\n }\n\n})(this);\n\n","var isCapitalized = require('is-capitalized')\nvar isClassStrict = require('is-class')\nvar isFunction = require('101/is-function')\n\nmodule.exports = isClass\n\nfunction isClass (fn) {\n return isClassStrict(fn) ||\n (isFunction(fn) && isCapitalized(fn.name))\n}\n","module.exports = startsWithVowel\n\nfunction startsWithVowel (str) {\n return /^[aeiou]/i.test(str)\n}\n","(function () {\n\n\n\t'use strict';\n\n\n\tvar compoundSubject = function (arrayOfStrings) {\n\n\n\t\tvar wrapperObject = {},\n\t\t\tendWith = 'and',\n\t\t\tdelimitAll = false,\n\t\t\tdelimitWith = ',';\n\n\n\t\twrapperObject.endWith = function (newEndWith) {\n\n\t\t\tif (typeof newEndWith !== 'string') {\n\t\t\t\treturn wrapperObject;\n\t\t\t}\n\n\t\t\tendWith = newEndWith;\n\n\t\t\treturn wrapperObject;\n\n\t\t};\n\n\n\t\twrapperObject.delimitAll = function (/*newDelimitAll*/) {\n\n\t\t\tvar newDelimitAll = arguments[0];\n\n\t\t\tif (typeof newDelimitAll === 'boolean') {\n\t\t\t\tdelimitAll = newDelimitAll;\n\t\t\t}\n\n\t\t\telse {\n\t\t\t\tdelimitAll = true;\n\t\t\t}\n\n\t\t\treturn wrapperObject;\n\n\t\t};\n\n\n\t\twrapperObject.delimitWith = function (newDelimitWith) {\n\n\t\t\tif (typeof newDelimitWith !== 'string') {\n\t\t\t\treturn wrapperObject;\n\t\t\t}\n\n\t\t\tdelimitWith = newDelimitWith;\n\n\t\t\treturn wrapperObject;\n\n\t\t};\n\n\n\t\twrapperObject.make = function () {\n\n\t\t\tvar combinedEndWith = delimitAll ? delimitWith + ' ' + endWith + ' ' : ' ' + endWith + ' ',\n\t\t\t\tupToLastTwo,\n\t\t\t\tlastTwo;\n\n\t\t\tif (typeof arrayOfStrings === 'undefined' || !arrayOfStrings instanceof Array) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tupToLastTwo = arrayOfStrings\n\t\t\t\t.slice(0, -2)\n\t\t\t\t.join(delimitWith + ' ');\n\n\t\t\tlastTwo = arrayOfStrings\n\t\t\t\t.slice(arrayOfStrings.length - 2)\n\t\t\t\t.join(combinedEndWith);\t\t\t\t\n\n\t\t\tif (!upToLastTwo.length) {\n\t\t\t\treturn lastTwo;\n\t\t\t}\n\n\t\t\treturn upToLastTwo + delimitWith + ' ' + lastTwo;\n\n\t\t};\n\n\n\t\treturn wrapperObject;\n\n\n\t};\n\n\n\t// Node\n\tif (typeof module !== 'undefined') {\n\t\tmodule.exports = compoundSubject;\n\t}\n\n\t// Browser\n\telse if (typeof window !== 'undefined') {\n\t\twindow.compoundSubject = compoundSubject;\n\t}\n\n\telse {\n\t\tthrow new Error('Couldn\\'t find a suitable scope in which to define compoundSubject');\n\t}\n\n\n})();\n","/**\n * @module 101/is-empty\n */\n\nvar isString = require('./is-string');\nvar isObject = require('./is-object');\nvar isArray = Array.isArray;\n\n/**\n * Functional version of val empty object, array or object\n * @function module:101/is-empty\n * @param {string|array|object} val - value checked to be a empty\n * @return {boolean} Whether the value is an empty or not\n */\nmodule.exports = isEmpty;\n\nfunction isEmpty (val) {\n if (isString(val) || isArray(val)) {\n return val.length === 0;\n }\n else if (isObject(val)) {\n for (var name in val) {\n return false;\n }\n return true;\n }\n else {\n throw new TypeError('Val must be a string, array or object');\n }\n}\n","var compoundSubject = require('compound-subject')\nvar isEmpty = require('101/is-empty')\nvar isString = require('101/is-string')\nvar isFunction = require('101/is-function')\n\nvar assertType = require('./assert-type')\nvar isClass = require('./is-class.js')\nvar validate = require('./validate.js')\nvar startsWithVowel = require('./starts-with-vowel.js')\n\nmodule.exports = multiValidate\n/**\n * validate an argument against multiple validators\n * @param {string} key argument name\n * @param {*} arg argument value\n * @param {array} validators array of validators\n */\nfunction multiValidate (key, arg, validators) {\n var errMessage = '\"' + key + '\" must be '\n assertType(!isEmpty(validators), '\"validators\" cannot be empty')\n var typeArr = validators.map(function (validator) {\n if (isString(validator)) {\n return validator\n } else if (isClass(validator)) {\n return '\"' + validator.name + '\"'\n } else if (isFunction(validator)) {\n return 'pass \"' + (validator.name || 'anonymous') + '\"'\n } else {\n throw new TypeError('\"validators\" must be an array containing only strings, classes, or functions')\n }\n })\n var typeStr = compoundSubject(typeArr)\n .endWith('or')\n .make()\n var article = startsWithVowel(typeStr) ? 'an' : 'a'\n\n errMessage += article + ' ' + typeStr\n\n var passedAnyValidator = validators.some(function (validator) {\n try {\n validate(key, arg, validator)\n return true\n } catch (e) {\n return false\n }\n })\n\n if (!passedAnyValidator) {\n throw new TypeError(errMessage)\n }\n}\n","var isFunction = require('101/is-function')\nvar isInteger = require('101/is-integer')\nvar isObject = require('101/is-object')\nvar isString = require('101/is-string')\n\nvar assertType = require('./assert-type.js')\nvar isClass = require('./is-class.js')\nvar NoClass = function () {}\nvar startsWithVowel = require('./starts-with-vowel.js')\nvar classes = {\n // primitive classes\n string: String,\n number: Number,\n // extended typeof support\n array: Array,\n regexp: RegExp\n}\n\nmodule.exports = validate\n/**\n * validate an argument\n * @param {string} key argument name\n * @param {*} arg argument value\n * @param {string|function} validator argument validator\n */\nfunction validate (key, arg, validator, _plural) {\n if (validator === '*') { return }\n\n var keyStr = '\"' + key + '\"'\n var typeStr\n var article\n var Class\n var errMessage\n var assertion\n\n if (Array.isArray(validator)) {\n // circular require\n return require('./multi-validate.js')(key, arg, validator)\n } else if (isString(validator)) {\n // validator is a string\n typeStr = validator\n Class = classes[typeStr] || NoClass\n article = startsWithVowel(typeStr) ? 'an' : 'a'\n errMessage = _plural\n ? (keyStr + ' must be ' + typeStr + 's')\n : (keyStr + ' must be ' + article + ' ' + typeStr)\n\n if (typeStr === 'integer') {\n assertion = isInteger(arg)\n } else if (typeStr === 'object') {\n assertion = isObject(arg)\n } else {\n assertion = arg instanceof Class || typeof arg === validator\n }\n\n assertType(assertion, errMessage)\n } else if (isClass(validator)) {\n // validator is a class\n typeStr = validator.name\n Class = validator\n errMessage = _plural\n ? (keyStr + ' must be instances of \"' + typeStr + '\"')\n : (keyStr + ' must be an instance of \"' + typeStr + '\"')\n assertType(arg instanceof Class, errMessage)\n } else if (isFunction(validator)) {\n // validator is a test\n try {\n // test will throw an error if it fails\n validator(arg)\n } catch (e) {\n e.message = (keyStr += ': ' + e.message)\n throw e\n }\n } else {\n throw new TypeError('\"validator\" must be a string, class or function')\n }\n}\n","var debug = require('debug')('assert-args')\nvar exists = require('101/exists')\nvar isObject = require('101/is-object')\nvar not = require('101/not')\n\nvar isOptionalKey = require('./lib/is-optional-key.js')\nvar isSpreadKey = require('./lib/is-spread-key.js')\nvar validate = require('./lib/validate.js')\n\nvar isRequiredKey = not(isOptionalKey)\n\nmodule.exports = assertArgs\n\nfunction assertArgs (args, validation) {\n if (typeof args !== 'object' || !exists(args.length)) {\n throw new TypeError('\"args\" must be an array or array-like object (arguments)')\n }\n if (!isObject(validation)) { // strict object\n throw new TypeError('\"validation\" must be an object')\n }\n\n // copy args\n var argsLeft = Array.prototype.slice.call(args)\n var firstOptionalErr\n var ret = {}\n var argKeys = Object.keys(validation)\n var outKey\n\n if (argKeys.filter(isSpreadKey).length > 1) {\n throw new Error('assert-args only supports a single spread argument')\n }\n\n argKeys.forEach(function (key, i) {\n var spreadArgs\n var validator = validation[key]\n var arg = argsLeft[0]\n\n if (isSpreadKey(key)) {\n debug('is spread key: ' + key)\n debug('argKeys.length', argKeys.length)\n debug('argsLeft.length', argsLeft.length)\n var requiredKeysLeft = argKeys.slice(i + 1).filter(isRequiredKey)\n debug('requiredKeysLeft', requiredKeysLeft)\n spreadArgs = argsLeft.slice(0, argsLeft.length - requiredKeysLeft.length) // copy\n debug('spreadArgs', spreadArgs)\n debug('spreadArgs.length', spreadArgs.length)\n\n if (isOptionalKey(key)) {\n debug('is optional spread key: ' + key)\n outKey = key.slice(4, -1)\n ret[outKey] = []\n\n spreadArgs.forEach(function (arg) {\n if (!exists(arg)) {\n // non-existant args pass as optional args\n firstOptionalErr = null // reset after a pass\n argsLeft.shift() // pass, remains [...]\n return\n }\n try {\n validate(key.slice(1, -1), arg, validator, true)\n // optional arg passes validator\n firstOptionalErr = null\n ret[outKey].push(arg) // pass\n argsLeft.shift()\n } catch (err) {\n debug('spread validate err: ' + err.message)\n debug('spread validate argsLeft: ' + argsLeft)\n if (firstOptionalErr) {\n // other optional error already occurred, throw first.\n throw firstOptionalErr\n } else {\n firstOptionalErr = err\n }\n }\n })\n } else { // isSpreadKey && isRequiredKey\n debug('is required spread key: ' + key)\n outKey = key.slice(3)\n ret[outKey] = []\n\n if (spreadArgs.length === 0) {\n // missing trailing required arg, fail\n throw new TypeError('\"' + key + '\" is required')\n }\n spreadArgs.forEach(function (arg) {\n try {\n validate(key, arg, validator, true)\n // optional arg passes validator\n firstOptionalErr = null\n ret[outKey].push(arg) // pass\n argsLeft.shift()\n } catch (err) {\n debug('spread validate err: ' + err.message)\n debug('spread validate argsLeft: ' + argsLeft)\n debug('spread validate argKeys: ' + argKeys)\n\n if (i === (argKeys.length - 1)) {\n // spread is last arg.\n // spread assumes all args passed are used.\n // there are no args left. and this failed for spread. throw it.\n if (firstOptionalErr) {\n if ((argsLeft.length - 1) > requiredKeysLeft.length) {\n throw firstOptionalErr\n } else {\n throw err\n }\n } else {\n throw err\n }\n } else {\n // leading/middle spread arg\n if (firstOptionalErr) {\n // other optional error already occurred, throw first.\n throw firstOptionalErr\n } else {\n // set optional err\n firstOptionalErr = err\n }\n }\n }\n })\n }\n return\n } else if (isOptionalKey(key)) {\n debug('is optional key: ' + key)\n key = key.slice(1, -1)\n\n if (argsLeft.length === 0) {\n // missing trailing optional arg, pass\n ret[key] = undefined\n return\n } else if (!exists(arg)) {\n // non-existant args pass as optional args\n firstOptionalErr = null\n ret[key] = argsLeft.shift() // pass\n return\n }\n\n try {\n validate(key, arg, validator)\n // optional arg passes validator\n firstOptionalErr = null\n ret[key] = argsLeft.shift()\n return\n } catch (err) {\n // optional arg failed validator\n // * set as undefined and pass for now\n // * save the error in case there are no more required args\n firstOptionalErr = firstOptionalErr || err\n ret[key] = undefined\n return\n }\n } else { // isRequiredKey\n debug('is required key: ' + key)\n if (argsLeft.length === 0) {\n // missing trailing required arg, fail\n throw new TypeError('\"' + key + '\" is required')\n }\n try {\n validate(key, arg, validator)\n // required arg passes validator, pass\n firstOptionalErr = null\n ret[key] = argsLeft.shift()\n } catch (err) {\n if (firstOptionalErr && argsLeft.length > 1) {\n // optional err was thrown before and this is not the last arg\n throw firstOptionalErr\n }\n throw err\n }\n return\n }\n })\n\n if (firstOptionalErr) {\n throw firstOptionalErr\n }\n\n return ret\n}\n","/*!\nCopyright (C) 2013-2017 by Andrea Giammarchi - @WebReflection\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\nvar\n // should be a not so common char\n // possibly one JSON does not encode\n // possibly one encodeURIComponent does not encode\n // right now this char is '~' but this might change in the future\n specialChar = '~',\n safeSpecialChar = '\\\\x' + (\n '0' + specialChar.charCodeAt(0).toString(16)\n ).slice(-2),\n escapedSafeSpecialChar = '\\\\' + safeSpecialChar,\n specialCharRG = new RegExp(safeSpecialChar, 'g'),\n safeSpecialCharRG = new RegExp(escapedSafeSpecialChar, 'g'),\n\n safeStartWithSpecialCharRG = new RegExp('(?:^|([^\\\\\\\\]))' + escapedSafeSpecialChar),\n\n indexOf = [].indexOf || function(v){\n for(var i=this.length;i--&&this[i]!==v;);\n return i;\n },\n $String = String // there's no way to drop warnings in JSHint\n // about new String ... well, I need that here!\n // faked, and happy linter!\n;\n\nfunction generateReplacer(value, replacer, resolve) {\n var\n doNotIgnore = false,\n inspect = !!replacer,\n path = [],\n all = [value],\n seen = [value],\n mapp = [resolve ? specialChar : '[Circular]'],\n last = value,\n lvl = 1,\n i, fn\n ;\n if (inspect) {\n fn = typeof replacer === 'object' ?\n function (key, value) {\n return key !== '' && replacer.indexOf(key) < 0 ? void 0 : value;\n } :\n replacer;\n }\n return function(key, value) {\n // the replacer has rights to decide\n // if a new object should be returned\n // or if there's some key to drop\n // let's call it here rather than \"too late\"\n if (inspect) value = fn.call(this, key, value);\n\n // first pass should be ignored, since it's just the initial object\n if (doNotIgnore) {\n if (last !== this) {\n i = lvl - indexOf.call(all, this) - 1;\n lvl -= i;\n all.splice(lvl, all.length);\n path.splice(lvl - 1, path.length);\n last = this;\n }\n // console.log(lvl, key, path);\n if (typeof value === 'object' && value) {\n \t// if object isn't referring to parent object, add to the\n // object path stack. Otherwise it is already there.\n if (indexOf.call(all, value) < 0) {\n all.push(last = value);\n }\n lvl = all.length;\n i = indexOf.call(seen, value);\n if (i < 0) {\n i = seen.push(value) - 1;\n if (resolve) {\n // key cannot contain specialChar but could be not a string\n path.push(('' + key).replace(specialCharRG, safeSpecialChar));\n mapp[i] = specialChar + path.join(specialChar);\n } else {\n mapp[i] = mapp[0];\n }\n } else {\n value = mapp[i];\n }\n } else {\n if (typeof value === 'string' && resolve) {\n // ensure no special char involved on deserialization\n // in this case only first char is important\n // no need to replace all value (better performance)\n value = value .replace(safeSpecialChar, escapedSafeSpecialChar)\n .replace(specialChar, safeSpecialChar);\n }\n }\n } else {\n doNotIgnore = true;\n }\n return value;\n };\n}\n\nfunction retrieveFromPath(current, keys) {\n for(var i = 0, length = keys.length; i < length; current = current[\n // keys should be normalized back here\n keys[i++].replace(safeSpecialCharRG, specialChar)\n ]);\n return current;\n}\n\nfunction generateReviver(reviver) {\n return function(key, value) {\n var isString = typeof value === 'string';\n if (isString && value.charAt(0) === specialChar) {\n return new $String(value.slice(1));\n }\n if (key === '') value = regenerate(value, value, {});\n // again, only one needed, do not use the RegExp for this replacement\n // only keys need the RegExp\n if (isString) value = value .replace(safeStartWithSpecialCharRG, '$1' + specialChar)\n .replace(escapedSafeSpecialChar, safeSpecialChar);\n return reviver ? reviver.call(this, key, value) : value;\n };\n}\n\nfunction regenerateArray(root, current, retrieve) {\n for (var i = 0, length = current.length; i < length; i++) {\n current[i] = regenerate(root, current[i], retrieve);\n }\n return current;\n}\n\nfunction regenerateObject(root, current, retrieve) {\n for (var key in current) {\n if (current.hasOwnProperty(key)) {\n current[key] = regenerate(root, current[key], retrieve);\n }\n }\n return current;\n}\n\nfunction regenerate(root, current, retrieve) {\n return current instanceof Array ?\n // fast Array reconstruction\n regenerateArray(root, current, retrieve) :\n (\n current instanceof $String ?\n (\n // root is an empty string\n current.length ?\n (\n retrieve.hasOwnProperty(current) ?\n retrieve[current] :\n retrieve[current] = retrieveFromPath(\n root, current.split(specialChar)\n )\n ) :\n root\n ) :\n (\n current instanceof Object ?\n // dedicated Object parser\n regenerateObject(root, current, retrieve) :\n // value as it is\n current\n )\n )\n ;\n}\n\nvar CircularJSON = {\n stringify: function stringify(value, replacer, space, doNotResolve) {\n return CircularJSON.parser.stringify(\n value,\n generateReplacer(value, replacer, !doNotResolve),\n space\n );\n },\n parse: function parse(text, reviver) {\n return CircularJSON.parser.parse(\n text,\n generateReviver(reviver)\n );\n },\n // A parser should be an API 1:1 compatible with JSON\n // it should expose stringify and parse methods.\n // The default parser is the native JSON.\n parser: JSON\n};\n\nmodule.exports = CircularJSON;\n","/**\n * \"Client\" wraps \"ws\" or a browser-implemented \"WebSocket\" library\n * according to the environment providing JSON RPC 2.0 support on top.\n * @module Client\n */\n\"use strict\"; // @ts-ignore\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _typeof2 = _interopRequireDefault(require(\"@babel/runtime/helpers/typeof\"));\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _createClass2 = _interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _assertArgs = _interopRequireDefault(require(\"assert-args\"));\n\nvar _eventemitter = require(\"eventemitter3\");\n\nvar _circularJson = _interopRequireDefault(require(\"circular-json\"));\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2[\"default\"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2[\"default\"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2[\"default\"])(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nvar CommonClient = /*#__PURE__*/function (_EventEmitter) {\n (0, _inherits2[\"default\"])(CommonClient, _EventEmitter);\n\n var _super = _createSuper(CommonClient);\n\n /**\n * Instantiate a Client class.\n * @constructor\n * @param {webSocketFactory} webSocketFactory - factory method for WebSocket\n * @param {String} address - url to a websocket server\n * @param {Object} options - ws options object with reconnect parameters\n * @param {Function} generate_request_id - custom generation request Id\n * @return {CommonClient}\n */\n function CommonClient(webSocketFactory) {\n var _this;\n\n var address = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"ws://localhost:8080\";\n\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n _ref$autoconnect = _ref.autoconnect,\n autoconnect = _ref$autoconnect === void 0 ? true : _ref$autoconnect,\n _ref$reconnect = _ref.reconnect,\n reconnect = _ref$reconnect === void 0 ? true : _ref$reconnect,\n _ref$reconnect_interv = _ref.reconnect_interval,\n reconnect_interval = _ref$reconnect_interv === void 0 ? 1000 : _ref$reconnect_interv,\n _ref$max_reconnects = _ref.max_reconnects,\n max_reconnects = _ref$max_reconnects === void 0 ? 5 : _ref$max_reconnects;\n\n var generate_request_id = arguments.length > 3 ? arguments[3] : undefined;\n (0, _classCallCheck2[\"default\"])(this, CommonClient);\n _this = _super.call(this);\n _this.webSocketFactory = webSocketFactory;\n _this.queue = {};\n _this.rpc_id = 0;\n _this.address = address;\n _this.options = arguments[2];\n _this.autoconnect = autoconnect;\n _this.ready = false;\n _this.reconnect = reconnect;\n _this.reconnect_interval = reconnect_interval;\n _this.max_reconnects = max_reconnects;\n _this.current_reconnects = 0;\n\n _this.generate_request_id = generate_request_id || function () {\n return ++_this.rpc_id;\n };\n\n if (_this.autoconnect) _this._connect(_this.address, _this.options);\n return _this;\n }\n /**\n * Connects to a defined server if not connected already.\n * @method\n * @return {Undefined}\n */\n\n\n (0, _createClass2[\"default\"])(CommonClient, [{\n key: \"connect\",\n value: function connect() {\n if (this.socket) return;\n\n this._connect(this.address, this.options);\n }\n /**\n * Calls a registered RPC method on server.\n * @method\n * @param {String} method - RPC method name\n * @param {Object|Array} params - optional method parameters\n * @param {Number} timeout - RPC reply timeout value\n * @param {Object} ws_opts - options passed to ws\n * @return {Promise}\n */\n\n }, {\n key: \"call\",\n value: function call(method, params, timeout, ws_opts) {\n var _this2 = this;\n\n (0, _assertArgs[\"default\"])(arguments, {\n \"method\": \"string\",\n \"[params]\": [\"object\", Array],\n \"[timeout]\": \"number\",\n \"[ws_opts]\": \"object\"\n });\n\n if (!ws_opts && \"object\" === (0, _typeof2[\"default\"])(timeout)) {\n ws_opts = timeout;\n timeout = null;\n }\n\n return new Promise(function (resolve, reject) {\n if (!_this2.ready) return reject(new Error(\"socket not ready\"));\n\n var rpc_id = _this2.generate_request_id(method, params);\n\n var message = {\n jsonrpc: \"2.0\",\n method: method,\n params: params || null,\n id: rpc_id\n };\n\n _this2.socket.send(JSON.stringify(message), ws_opts, function (error) {\n if (error) return reject(error);\n _this2.queue[rpc_id] = {\n promise: [resolve, reject]\n };\n\n if (timeout) {\n _this2.queue[rpc_id].timeout = setTimeout(function () {\n _this2.queue[rpc_id] = null;\n reject(new Error(\"reply timeout\"));\n }, timeout);\n }\n });\n });\n }\n /**\n * Logins with the other side of the connection.\n * @method\n * @param {Object} params - Login credentials object\n * @return {Promise}\n */\n\n }, {\n key: \"login\",\n value: function () {\n var _login = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(params) {\n var resp;\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.call(\"rpc.login\", params);\n\n case 2:\n resp = _context.sent;\n\n if (resp) {\n _context.next = 5;\n break;\n }\n\n throw new Error(\"authentication failed\");\n\n case 5:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n function login(_x) {\n return _login.apply(this, arguments);\n }\n\n return login;\n }()\n /**\n * Fetches a list of client's methods registered on server.\n * @method\n * @return {Array}\n */\n\n }, {\n key: \"listMethods\",\n value: function () {\n var _listMethods = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.call(\"__listMethods\");\n\n case 2:\n return _context2.abrupt(\"return\", _context2.sent);\n\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n function listMethods() {\n return _listMethods.apply(this, arguments);\n }\n\n return listMethods;\n }()\n /**\n * Sends a JSON-RPC 2.0 notification to server.\n * @method\n * @param {String} method - RPC method name\n * @param {Object} params - optional method parameters\n * @return {Promise}\n */\n\n }, {\n key: \"notify\",\n value: function notify(method, params) {\n var _this3 = this;\n\n (0, _assertArgs[\"default\"])(arguments, {\n \"method\": \"string\",\n \"[params]\": [\"object\", Array]\n });\n return new Promise(function (resolve, reject) {\n if (!_this3.ready) return reject(new Error(\"socket not ready\"));\n var message = {\n jsonrpc: \"2.0\",\n method: method,\n params: params || null\n };\n\n _this3.socket.send(JSON.stringify(message), function (error) {\n if (error) return reject(error);\n resolve();\n });\n });\n }\n /**\n * Subscribes for a defined event.\n * @method\n * @param {String|Array} event - event name\n * @return {Undefined}\n * @throws {Error}\n */\n\n }, {\n key: \"subscribe\",\n value: function () {\n var _subscribe = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(event) {\n var result,\n _args3 = arguments;\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n (0, _assertArgs[\"default\"])(_args3, {\n event: [\"string\", Array]\n });\n if (typeof event === \"string\") event = [event];\n _context3.next = 4;\n return this.call(\"rpc.on\", event);\n\n case 4:\n result = _context3.sent;\n\n if (!(typeof event === \"string\" && result[event] !== \"ok\")) {\n _context3.next = 7;\n break;\n }\n\n throw new Error(\"Failed subscribing to an event '\" + event + \"' with: \" + result[event]);\n\n case 7:\n return _context3.abrupt(\"return\", result);\n\n case 8:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n function subscribe(_x2) {\n return _subscribe.apply(this, arguments);\n }\n\n return subscribe;\n }()\n /**\n * Unsubscribes from a defined event.\n * @method\n * @param {String|Array} event - event name\n * @return {Undefined}\n * @throws {Error}\n */\n\n }, {\n key: \"unsubscribe\",\n value: function () {\n var _unsubscribe = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(event) {\n var result,\n _args4 = arguments;\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n (0, _assertArgs[\"default\"])(_args4, {\n event: [\"string\", Array]\n });\n if (typeof event === \"string\") event = [event];\n _context4.next = 4;\n return this.call(\"rpc.off\", event);\n\n case 4:\n result = _context4.sent;\n\n if (!(typeof event === \"string\" && result[event] !== \"ok\")) {\n _context4.next = 7;\n break;\n }\n\n throw new Error(\"Failed unsubscribing from an event with: \" + result);\n\n case 7:\n return _context4.abrupt(\"return\", result);\n\n case 8:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n function unsubscribe(_x3) {\n return _unsubscribe.apply(this, arguments);\n }\n\n return unsubscribe;\n }()\n /**\n * Closes a WebSocket connection gracefully.\n * @method\n * @param {Number} code - socket close code\n * @param {String} data - optional data to be sent before closing\n * @return {Undefined}\n */\n\n }, {\n key: \"close\",\n value: function close(code, data) {\n this.socket.close(code || 1000, data);\n }\n /**\n * Connection/Message handler.\n * @method\n * @private\n * @param {String} address - WebSocket API address\n * @param {Object} options - ws options object\n * @return {Undefined}\n */\n\n }, {\n key: \"_connect\",\n value: function _connect(address, options) {\n var _this4 = this;\n\n this.socket = this.webSocketFactory(address, options);\n this.socket.addEventListener(\"open\", function () {\n _this4.ready = true;\n\n _this4.emit(\"open\");\n\n _this4.current_reconnects = 0;\n });\n this.socket.addEventListener(\"message\", function (_ref2) {\n var message = _ref2.data;\n if (message instanceof ArrayBuffer) message = Buffer.from(message).toString();\n\n try {\n message = _circularJson[\"default\"].parse(message);\n } catch (error) {\n return;\n } // check if any listeners are attached and forward event\n\n\n if (message.notification && _this4.listeners(message.notification).length) {\n if (!Object.keys(message.params).length) return _this4.emit(message.notification);\n var args = [message.notification];\n if (message.params.constructor === Object) args.push(message.params);else // using for-loop instead of unshift/spread because performance is better\n for (var i = 0; i < message.params.length; i++) {\n args.push(message.params[i]);\n }\n return _this4.emit.apply(_this4, args);\n }\n\n if (!_this4.queue[message.id]) {\n // general JSON RPC 2.0 events\n if (message.method && message.params) return _this4.emit(message.method, message.params);else return;\n }\n\n if (_this4.queue[message.id].timeout) clearTimeout(_this4.queue[message.id].timeout);\n if (message.error) _this4.queue[message.id].promise[1](message.error);else _this4.queue[message.id].promise[0](message.result);\n _this4.queue[message.id] = null;\n });\n this.socket.addEventListener(\"error\", function (error) {\n return _this4.emit(\"error\", error);\n });\n this.socket.addEventListener(\"close\", function (_ref3) {\n var code = _ref3.code,\n reason = _ref3.reason;\n if (_this4.ready) _this4.emit(\"close\", code, reason);\n _this4.ready = false;\n if (code === 1000) return;\n _this4.current_reconnects++;\n if (_this4.reconnect && (_this4.max_reconnects > _this4.current_reconnects || _this4.max_reconnects === 0)) setTimeout(function () {\n return _this4._connect(address, options);\n }, _this4.reconnect_interval);\n });\n }\n }]);\n return CommonClient;\n}(_eventemitter.EventEmitter);\n\nexports[\"default\"] = CommonClient;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Client = void 0;\n\nvar _classCallCheck2 = _interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));\n\nvar _inherits2 = _interopRequireDefault(require(\"@babel/runtime/helpers/inherits\"));\n\nvar _possibleConstructorReturn2 = _interopRequireDefault(require(\"@babel/runtime/helpers/possibleConstructorReturn\"));\n\nvar _getPrototypeOf2 = _interopRequireDefault(require(\"@babel/runtime/helpers/getPrototypeOf\"));\n\nvar _websocket = _interopRequireDefault(require(\"./lib/client/websocket.browser\"));\n\nvar _client = _interopRequireDefault(require(\"./lib/client\"));\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2[\"default\"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2[\"default\"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2[\"default\"])(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nvar Client = /*#__PURE__*/function (_CommonClient) {\n (0, _inherits2[\"default\"])(Client, _CommonClient);\n\n var _super = _createSuper(Client);\n\n function Client() {\n var address = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"ws://localhost:8080\";\n\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$autoconnect = _ref.autoconnect,\n autoconnect = _ref$autoconnect === void 0 ? true : _ref$autoconnect,\n _ref$reconnect = _ref.reconnect,\n reconnect = _ref$reconnect === void 0 ? true : _ref$reconnect,\n _ref$reconnect_interv = _ref.reconnect_interval,\n reconnect_interval = _ref$reconnect_interv === void 0 ? 1000 : _ref$reconnect_interv,\n _ref$max_reconnects = _ref.max_reconnects,\n max_reconnects = _ref$max_reconnects === void 0 ? 5 : _ref$max_reconnects;\n\n var generate_request_id = arguments.length > 2 ? arguments[2] : undefined;\n (0, _classCallCheck2[\"default\"])(this, Client);\n return _super.call(this, _websocket[\"default\"], address, {\n autoconnect: autoconnect,\n reconnect: reconnect,\n reconnect_interval: reconnect_interval,\n max_reconnects: max_reconnects\n }, generate_request_id);\n }\n\n return Client;\n}(_client[\"default\"]);\n\nexports.Client = Client;","// @flow\nimport * as BufferLayout from 'buffer-layout';\n\n/**\n * https://github.com/solana-labs/solana/blob/90bedd7e067b5b8f3ddbb45da00a4e9cabb22c62/sdk/src/fee_calculator.rs#L7-L11\n *\n * @private\n */\nexport const FeeCalculatorLayout = BufferLayout.nu64('lamportsPerSignature');\n\n/**\n * @typedef {Object} FeeCalculator\n * @property {number} lamportsPerSignature lamports Cost in lamports to validate a signature\n */\nexport type FeeCalculator = {\n lamportsPerSignature: number,\n};\n","// @flow\nimport * as BufferLayout from 'buffer-layout';\n\nimport type {Blockhash} from './blockhash';\nimport * as Layout from './layout';\nimport {PublicKey} from './publickey';\nimport type {FeeCalculator} from './fee-calculator';\nimport {FeeCalculatorLayout} from './fee-calculator';\nimport {toBuffer} from './util/to-buffer';\n\n/**\n * See https://github.com/solana-labs/solana/blob/0ea2843ec9cdc517572b8e62c959f41b55cf4453/sdk/src/nonce_state.rs#L29-L32\n *\n * @private\n */\nconst NonceAccountLayout = BufferLayout.struct([\n BufferLayout.u32('version'),\n BufferLayout.u32('state'),\n Layout.publicKey('authorizedPubkey'),\n Layout.publicKey('nonce'),\n BufferLayout.struct([FeeCalculatorLayout], 'feeCalculator'),\n]);\n\nexport const NONCE_ACCOUNT_LENGTH = NonceAccountLayout.span;\n\n/**\n * NonceAccount class\n */\nexport class NonceAccount {\n authorizedPubkey: PublicKey;\n nonce: Blockhash;\n feeCalculator: FeeCalculator;\n\n /**\n * Deserialize NonceAccount from the account data.\n *\n * @param buffer account data\n * @return NonceAccount\n */\n static fromAccountData(\n buffer: Buffer | Uint8Array | Array,\n ): NonceAccount {\n const nonceAccount = NonceAccountLayout.decode(toBuffer(buffer), 0);\n nonceAccount.authorizedPubkey = new PublicKey(\n nonceAccount.authorizedPubkey,\n );\n nonceAccount.nonce = new PublicKey(nonceAccount.nonce).toString();\n return nonceAccount;\n }\n}\n","// @flow\n\n// zzz\nexport function sleep(ms: number): Promise {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n","// @flow\n\nimport assert from 'assert';\nimport bs58 from 'bs58';\nimport {parse as urlParse, format as urlFormat} from 'url';\nimport fetch from 'node-fetch';\nimport jayson from 'jayson/lib/client/browser';\nimport {struct} from 'superstruct';\nimport {Client as RpcWebSocketClient} from 'rpc-websockets';\n\nimport {NonceAccount} from './nonce-account';\nimport {PublicKey} from './publickey';\nimport {MS_PER_SLOT} from './timing';\nimport {Transaction} from './transaction';\nimport {Message} from './message';\nimport {sleep} from './util/sleep';\nimport {toBuffer} from './util/to-buffer';\nimport type {Blockhash} from './blockhash';\nimport type {FeeCalculator} from './fee-calculator';\nimport type {Account} from './account';\nimport type {TransactionSignature} from './transaction';\n\nexport const BLOCKHASH_CACHE_TIMEOUT_MS = 30 * 1000;\n\ntype RpcRequest = (methodName: string, args: Array) => any;\n\ntype TokenAccountsFilter =\n | {|\n mint: PublicKey,\n |}\n | {|\n programId: PublicKey,\n |};\n\n/**\n * Extra contextual information for RPC responses\n *\n * @typedef {Object} Context\n * @property {number} slot\n */\ntype Context = {\n slot: number,\n};\n\n/**\n * Options for sending transactions\n *\n * @typedef {Object} SendOptions\n * @property {boolean | undefined} skipPreflight disable transaction verification step\n */\nexport type SendOptions = {\n skipPreflight?: boolean,\n};\n\n/**\n * Options for confirming transactions\n *\n * @typedef {Object} ConfirmOptions\n * @property {boolean | undefined} skipPreflight disable transaction verification step\n * @property {number | undefined} confirmations desired number of cluster confirmations\n */\nexport type ConfirmOptions = {\n skipPreflight?: boolean,\n confirmations?: number,\n};\n\n/**\n * Options for getConfirmedSignaturesForAddress2\n *\n * @typedef {Object} ConfirmedSignaturesForAddress2Options\n * @property {TransactionSignature | undefined} before start searching backwards from this transaction signature.\n * If not provided the search starts from the highest max confirmed block.\n * @property {number | undefined} limit maximum transaction signatures to return (between 1 and 1,000, default: 1,000).\n *\n */\nexport type ConfirmedSignaturesForAddress2Options = {\n before?: TransactionSignature,\n limit?: number,\n};\n\n/**\n * RPC Response with extra contextual information\n *\n * @typedef {Object} RpcResponseAndContext\n * @property {Context} context\n * @property {T} value response\n */\ntype RpcResponseAndContext = {\n context: Context,\n value: T,\n};\n\n/**\n * @private\n */\nfunction jsonRpcResultAndContext(resultDescription: any) {\n return jsonRpcResult({\n context: struct({\n slot: 'number',\n }),\n value: resultDescription,\n });\n}\n\n/**\n * @private\n */\nfunction jsonRpcResult(resultDescription: any) {\n const jsonRpcVersion = struct.literal('2.0');\n return struct.union([\n struct({\n jsonrpc: jsonRpcVersion,\n id: 'string',\n error: 'any',\n }),\n struct({\n jsonrpc: jsonRpcVersion,\n id: 'string',\n error: 'null?',\n result: resultDescription,\n }),\n ]);\n}\n\n/**\n * @private\n */\nfunction notificationResultAndContext(resultDescription: any) {\n return struct({\n context: struct({\n slot: 'number',\n }),\n value: resultDescription,\n });\n}\n\n/**\n * The level of commitment desired when querying state\n *
\n *   'max':    Query the most recent block which has been finalized by the cluster\n *   'recent': Query the most recent block which has reached 1 confirmation by the connected node\n *   'root':   Query the most recent block which has been rooted by the connected node\n *   'single': Query the most recent block which has reached 1 confirmation by the cluster\n *   'singleGossip': Query the most recent block which has reached 1 confirmation according to votes seen in gossip\n * 
\n *\n * @typedef {'max' | 'recent' | 'root' | 'single' | 'singleGossip'} Commitment\n */\nexport type Commitment = 'max' | 'recent' | 'root' | 'single' | 'singleGossip';\n\n/**\n * Filter for largest accounts query\n *
\n *   'circulating':    Return the largest accounts that are part of the circulating supply\n *   'nonCirculating': Return the largest accounts that are not part of the circulating supply\n * 
\n *\n * @typedef {'circulating' | 'nonCirculating'} LargestAccountsFilter\n */\nexport type LargestAccountsFilter = 'circulating' | 'nonCirculating';\n\n/**\n * Configuration object for changing `getLargestAccounts` query behavior\n *\n * @typedef {Object} GetLargestAccountsConfig\n * @property {Commitment|undefined} commitment The level of commitment desired\n * @property {LargestAccountsFilter|undefined} filter Filter largest accounts by whether they are part of the circulating supply\n */\ntype GetLargestAccountsConfig = {\n commitment: ?Commitment,\n filter: ?LargestAccountsFilter,\n};\n\n/**\n * Configuration object for changing query behavior\n *\n * @typedef {Object} SignatureStatusConfig\n * @property {boolean} searchTransactionHistory enable searching status history, not needed for recent transactions\n */\nexport type SignatureStatusConfig = {\n searchTransactionHistory: boolean,\n};\n\n/**\n * Information describing a cluster node\n *\n * @typedef {Object} ContactInfo\n * @property {string} pubkey Identity public key of the node\n * @property {string|null} gossip Gossip network address for the node\n * @property {string|null} tpu TPU network address for the node (null if not available)\n * @property {string|null} rpc JSON RPC network address for the node (null if not available)\n * @property {string|null} version Software version of the node (null if not available)\n */\ntype ContactInfo = {\n pubkey: string,\n gossip: string | null,\n tpu: string | null,\n rpc: string | null,\n version: string | null,\n};\n\n/**\n * Information describing a vote account\n *\n * @typedef {Object} VoteAccountInfo\n * @property {string} votePubkey Public key of the vote account\n * @property {string} nodePubkey Identity public key of the node voting with this account\n * @property {number} activatedStake The stake, in lamports, delegated to this vote account and activated\n * @property {boolean} epochVoteAccount Whether the vote account is staked for this epoch\n * @property {Array>} epochCredits Recent epoch voting credit history for this voter\n * @property {number} commission A percentage (0-100) of rewards payout owed to the voter\n * @property {number} lastVote Most recent slot voted on by this vote account\n */\ntype VoteAccountInfo = {\n votePubkey: string,\n nodePubkey: string,\n activatedStake: number,\n epochVoteAccount: boolean,\n epochCredits: Array<[number, number, number]>,\n commission: number,\n lastVote: number,\n};\n\n/**\n * A collection of cluster vote accounts\n *\n * @typedef {Object} VoteAccountStatus\n * @property {Array} current Active vote accounts\n * @property {Array} delinquent Inactive vote accounts\n */\ntype VoteAccountStatus = {\n current: Array,\n delinquent: Array,\n};\n\n/**\n * Network Inflation\n * (see https://docs.solana.com/implemented-proposals/ed_overview)\n *\n * @typedef {Object} InflationGovernor\n * @property {number} foundation\n * @property {number} foundation_term\n * @property {number} initial\n * @property {number} taper\n * @property {number} terminal\n */\ntype InflationGovernor = {\n foundation: number,\n foundationTerm: number,\n initial: number,\n taper: number,\n terminal: number,\n};\n\nconst GetInflationGovernorResult = struct({\n foundation: 'number',\n foundationTerm: 'number',\n initial: 'number',\n taper: 'number',\n terminal: 'number',\n});\n\n/**\n * Information about the current epoch\n *\n * @typedef {Object} EpochInfo\n * @property {number} epoch\n * @property {number} slotIndex\n * @property {number} slotsInEpoch\n * @property {number} absoluteSlot\n * @property {number} blockHeight\n */\ntype EpochInfo = {\n epoch: number,\n slotIndex: number,\n slotsInEpoch: number,\n absoluteSlot: number,\n blockHeight: number | null,\n};\n\nconst GetEpochInfoResult = struct({\n epoch: 'number',\n slotIndex: 'number',\n slotsInEpoch: 'number',\n absoluteSlot: 'number',\n blockHeight: 'number?',\n});\n\n/**\n * Epoch schedule\n * (see https://docs.solana.com/terminology#epoch)\n *\n * @typedef {Object} EpochSchedule\n * @property {number} slotsPerEpoch The maximum number of slots in each epoch\n * @property {number} leaderScheduleSlotOffset The number of slots before beginning of an epoch to calculate a leader schedule for that epoch\n * @property {boolean} warmup Indicates whether epochs start short and grow\n * @property {number} firstNormalEpoch The first epoch with `slotsPerEpoch` slots\n * @property {number} firstNormalSlot The first slot of `firstNormalEpoch`\n */\ntype EpochSchedule = {\n slotsPerEpoch: number,\n leaderScheduleSlotOffset: number,\n warmup: boolean,\n firstNormalEpoch: number,\n firstNormalSlot: number,\n};\n\nconst GetEpochScheduleResult = struct({\n slotsPerEpoch: 'number',\n leaderScheduleSlotOffset: 'number',\n warmup: 'boolean',\n firstNormalEpoch: 'number',\n firstNormalSlot: 'number',\n});\n\n/**\n * Leader schedule\n * (see https://docs.solana.com/terminology#leader-schedule)\n *\n * @typedef {Object} LeaderSchedule\n */\ntype LeaderSchedule = {\n [address: string]: number[],\n};\n\nconst GetLeaderScheduleResult = struct.record([\n 'string',\n struct.array(['number']),\n]);\n\n/**\n * Transaction error or null\n */\nconst TransactionErrorResult = struct.union(['null', 'object']);\n\n/**\n * Signature status for a transaction\n */\nconst SignatureStatusResult = struct({err: TransactionErrorResult});\n\n/**\n * Version info for a node\n *\n * @typedef {Object} Version\n * @property {string} solana-core Version of solana-core\n */\nconst Version = struct({\n 'solana-core': 'string',\n});\n\ntype SimulatedTransactionResponse = {\n err: TransactionError | string | null,\n logs: Array | null,\n};\n\nconst SimulatedTransactionResponseValidator = jsonRpcResultAndContext(\n struct.pick({\n err: struct.union(['null', 'object', 'string']),\n logs: struct.union(['null', struct.array(['string'])]),\n }),\n);\n\n/**\n * Metadata for a confirmed transaction on the ledger\n *\n * @typedef {Object} ConfirmedTransactionMeta\n * @property {number} fee The fee charged for processing the transaction\n * @property {Array} preBalances The balances of the transaction accounts before processing\n * @property {Array} postBalances The balances of the transaction accounts after processing\n * @property {object|null} err The error result of transaction processing\n */\ntype ConfirmedTransactionMeta = {\n fee: number,\n preBalances: Array,\n postBalances: Array,\n err: TransactionError | null,\n};\n\n/**\n * A confirmed transaction on the ledger\n *\n * @typedef {Object} ConfirmedTransaction\n * @property {number} slot The slot during which the transaction was processed\n * @property {Transaction} transaction The details of the transaction\n * @property {ConfirmedTransactionMeta|null} meta Metadata produced from the transaction\n */\ntype ConfirmedTransaction = {\n slot: number,\n transaction: Transaction,\n meta: ConfirmedTransactionMeta | null,\n};\n\n/**\n * A partially decoded transaction instruction\n *\n * @typedef {Object} ParsedMessageAccount\n * @property {PublicKey} pubkey Public key of the account\n * @property {PublicKey} accounts Indicates if the account signed the transaction\n * @property {string} data Raw base-58 instruction data\n */\ntype PartiallyDecodedInstruction = {|\n programId: PublicKey,\n accounts: Array,\n data: string,\n|};\n\n/**\n * A parsed transaction message account\n *\n * @typedef {Object} ParsedMessageAccount\n * @property {PublicKey} pubkey Public key of the account\n * @property {boolean} signer Indicates if the account signed the transaction\n * @property {boolean} writable Indicates if the account is writable for this transaction\n */\ntype ParsedMessageAccount = {\n pubkey: PublicKey,\n signer: boolean,\n writable: boolean,\n};\n\n/**\n * A parsed transaction instruction\n *\n * @typedef {Object} ParsedInstruction\n * @property {string} program Name of the program for this instruction\n * @property {PublicKey} programId ID of the program for this instruction\n * @property {any} parsed Parsed instruction info\n */\ntype ParsedInstruction = {|\n program: string,\n programId: PublicKey,\n parsed: any,\n|};\n\n/**\n * A parsed transaction message\n *\n * @typedef {Object} ParsedMessage\n * @property {Array} accountKeys Accounts used in the instructions\n * @property {Array} instructions The atomically executed instructions for the transaction\n * @property {string} recentBlockhash Recent blockhash\n */\ntype ParsedMessage = {\n accountKeys: ParsedMessageAccount[],\n instructions: (ParsedInstruction | PartiallyDecodedInstruction)[],\n recentBlockhash: string,\n};\n\n/**\n * A parsed transaction\n *\n * @typedef {Object} ParsedTransaction\n * @property {Array} signatures Signatures for the transaction\n * @property {ParsedMessage} message Message of the transaction\n */\ntype ParsedTransaction = {\n signatures: Array,\n message: ParsedMessage,\n};\n\n/**\n * A parsed and confirmed transaction on the ledger\n *\n * @typedef {Object} ParsedConfirmedTransaction\n * @property {number} slot The slot during which the transaction was processed\n * @property {ParsedTransaction} transaction The details of the transaction\n * @property {ConfirmedTransactionMeta|null} meta Metadata produced from the transaction\n */\ntype ParsedConfirmedTransaction = {\n slot: number,\n transaction: ParsedTransaction,\n meta: ConfirmedTransactionMeta | null,\n};\n\n/**\n * A ConfirmedBlock on the ledger\n *\n * @typedef {Object} ConfirmedBlock\n * @property {Blockhash} blockhash Blockhash of this block\n * @property {Blockhash} previousBlockhash Blockhash of this block's parent\n * @property {number} parentSlot Slot index of this block's parent\n * @property {Array} transactions Vector of transactions and status metas\n * @property {Array} rewards Vector of block rewards\n */\ntype ConfirmedBlock = {\n blockhash: Blockhash,\n previousBlockhash: Blockhash,\n parentSlot: number,\n transactions: Array<{\n transaction: Transaction,\n meta: ConfirmedTransactionMeta | null,\n }>,\n rewards: Array<{\n pubkey: string,\n lamports: number,\n }>,\n};\n\nfunction createRpcRequest(url): RpcRequest {\n const server = jayson(async (request, callback) => {\n const options = {\n method: 'POST',\n body: request,\n headers: {\n 'Content-Type': 'application/json',\n },\n };\n\n try {\n let too_many_requests_retries = 5;\n let res = {};\n\n for (;;) {\n res = await fetch(url, options);\n if (\n res.status !== 429 /* Too many requests */ ||\n too_many_requests_retries === 0\n ) {\n break;\n }\n\n console.log(\n `Server responded with ${res.status} ${res.statusText}. Retrying after brief delay...`,\n );\n await sleep(500);\n too_many_requests_retries -= 1;\n }\n\n const text = await res.text();\n if (res.ok) {\n callback(null, text);\n } else {\n callback(new Error(`${res.status} ${res.statusText}: ${text}`));\n }\n } catch (err) {\n callback(err);\n }\n });\n\n return (method, args) => {\n return new Promise((resolve, reject) => {\n server.request(method, args, (err, response) => {\n if (err) {\n reject(err);\n return;\n }\n resolve(response);\n });\n });\n };\n}\n\n/**\n * Expected JSON RPC response for the \"getInflationGovernor\" message\n */\nconst GetInflationGovernorRpcResult = struct({\n jsonrpc: struct.literal('2.0'),\n id: 'string',\n error: 'any?',\n result: GetInflationGovernorResult,\n});\n\n/**\n * Expected JSON RPC response for the \"getEpochInfo\" message\n */\nconst GetEpochInfoRpcResult = struct({\n jsonrpc: struct.literal('2.0'),\n id: 'string',\n error: 'any?',\n result: GetEpochInfoResult,\n});\n\n/**\n * Expected JSON RPC response for the \"getEpochSchedule\" message\n */\nconst GetEpochScheduleRpcResult = struct({\n jsonrpc: struct.literal('2.0'),\n id: 'string',\n error: 'any?',\n result: GetEpochScheduleResult,\n});\n\n/**\n * Expected JSON RPC response for the \"getLeaderSchedule\" message\n */\nconst GetLeaderScheduleRpcResult = jsonRpcResult(GetLeaderScheduleResult);\n\n/**\n * Expected JSON RPC response for the \"getBalance\" message\n */\nconst GetBalanceAndContextRpcResult = jsonRpcResultAndContext('number?');\n\n/**\n * Expected JSON RPC response for the \"getBlockTime\" message\n */\nconst GetBlockTimeRpcResult = struct({\n jsonrpc: struct.literal('2.0'),\n id: 'string',\n error: 'any?',\n result: struct.union(['null', 'number', 'undefined']),\n});\n\n/**\n * Expected JSON RPC response for the \"minimumLedgerSlot\" and \"getFirstAvailableBlock\" messages\n */\nconst SlotRpcResult = struct({\n jsonrpc: struct.literal('2.0'),\n id: 'string',\n error: 'any?',\n result: 'number',\n});\n\n/**\n * Supply\n *\n * @typedef {Object} Supply\n * @property {number} total Total supply in lamports\n * @property {number} circulating Circulating supply in lamports\n * @property {number} nonCirculating Non-circulating supply in lamports\n * @property {Array} nonCirculatingAccounts List of non-circulating account addresses\n */\ntype Supply = {\n total: number,\n circulating: number,\n nonCirculating: number,\n nonCirculatingAccounts: Array,\n};\n\n/**\n * Expected JSON RPC response for the \"getSupply\" message\n */\nconst GetSupplyRpcResult = jsonRpcResultAndContext(\n struct({\n total: 'number',\n circulating: 'number',\n nonCirculating: 'number',\n nonCirculatingAccounts: struct.array(['string']),\n }),\n);\n\n/**\n * Token amount object which returns a token amount in different formats\n * for various client use cases.\n *\n * @typedef {Object} TokenAmount\n * @property {string} amount Raw amount of tokens as string ignoring decimals\n * @property {number} decimals Number of decimals configured for token's mint\n * @property {number} uiAmount Token account as float, accounts for decimals\n */\ntype TokenAmount = {\n amount: string,\n decimals: number,\n uiAmount: number,\n};\n\n/**\n * Expected JSON RPC structure for token amounts\n */\nconst TokenAmountResult = struct.object({\n amount: 'string',\n uiAmount: 'number',\n decimals: 'number',\n});\n\n/**\n * Token address and balance.\n *\n * @typedef {Object} TokenAccountBalancePair\n * @property {PublicKey} address Address of the token account\n * @property {string} amount Raw amount of tokens as string ignoring decimals\n * @property {number} decimals Number of decimals configured for token's mint\n * @property {number} uiAmount Token account as float, accounts for decimals\n */\ntype TokenAccountBalancePair = {\n address: PublicKey,\n amount: string,\n decimals: number,\n uiAmount: number,\n};\n\n/**\n * Expected JSON RPC response for the \"getTokenLargestAccounts\" message\n */\nconst GetTokenLargestAccountsResult = jsonRpcResultAndContext(\n struct.array([\n struct.pick({\n address: 'string',\n amount: 'string',\n uiAmount: 'number',\n decimals: 'number',\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getTokenAccountBalance\" message\n */\nconst GetTokenAccountBalance = jsonRpcResultAndContext(TokenAmountResult);\n\n/**\n * Expected JSON RPC response for the \"getTokenSupply\" message\n */\nconst GetTokenSupplyRpcResult = jsonRpcResultAndContext(TokenAmountResult);\n\n/**\n * Expected JSON RPC response for the \"getTokenAccountsByOwner\" message\n */\nconst GetTokenAccountsByOwner = jsonRpcResultAndContext(\n struct.array([\n struct.object({\n pubkey: 'string',\n account: struct.object({\n executable: 'boolean',\n owner: 'string',\n lamports: 'number',\n data: ['string', struct.literal('base64')],\n rentEpoch: 'number?',\n }),\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getTokenAccountsByOwner\" message with parsed data\n */\nconst GetParsedTokenAccountsByOwner = jsonRpcResultAndContext(\n struct.array([\n struct.object({\n pubkey: 'string',\n account: struct.object({\n executable: 'boolean',\n owner: 'string',\n lamports: 'number',\n data: struct.pick({\n program: 'string',\n parsed: 'any',\n space: 'number',\n }),\n rentEpoch: 'number?',\n }),\n }),\n ]),\n);\n\n/**\n * Pair of an account address and its balance\n *\n * @typedef {Object} AccountBalancePair\n * @property {PublicKey} address\n * @property {number} lamports\n */\ntype AccountBalancePair = {\n address: PublicKey,\n lamports: number,\n};\n\n/**\n * Expected JSON RPC response for the \"getLargestAccounts\" message\n */\nconst GetLargestAccountsRpcResult = jsonRpcResultAndContext(\n struct.array([\n struct({\n lamports: 'number',\n address: 'string',\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getVersion\" message\n */\nconst GetVersionRpcResult = struct({\n jsonrpc: struct.literal('2.0'),\n id: 'string',\n error: 'any?',\n result: Version,\n});\n\n/**\n * @private\n */\nconst AccountInfoResult = struct({\n executable: 'boolean',\n owner: 'string',\n lamports: 'number',\n data: 'any',\n rentEpoch: 'number?',\n});\n\n/**\n * @private\n */\nconst ParsedAccountInfoResult = struct.object({\n executable: 'boolean',\n owner: 'string',\n lamports: 'number',\n data: struct.union([\n ['string', struct.literal('base64')],\n struct.pick({\n program: 'string',\n parsed: 'any',\n space: 'number',\n }),\n ]),\n rentEpoch: 'number?',\n});\n\n/**\n * Expected JSON RPC response for the \"getAccountInfo\" message\n */\nconst GetAccountInfoAndContextRpcResult = jsonRpcResultAndContext(\n struct.union(['null', AccountInfoResult]),\n);\n\n/**\n * Expected JSON RPC response for the \"getAccountInfo\" message with jsonParsed param\n */\nconst GetParsedAccountInfoResult = jsonRpcResultAndContext(\n struct.union(['null', ParsedAccountInfoResult]),\n);\n\n/**\n * Expected JSON RPC response for the \"getConfirmedSignaturesForAddress\" message\n */\nconst GetConfirmedSignaturesForAddressRpcResult = jsonRpcResult(\n struct.array(['string']),\n);\n\n/**\n * Expected JSON RPC response for the \"getConfirmedSignaturesForAddress2\" message\n */\n\nconst GetConfirmedSignaturesForAddress2RpcResult = jsonRpcResult(\n struct.array([\n struct({\n signature: 'string',\n slot: 'number',\n err: TransactionErrorResult,\n memo: struct.union(['null', 'string']),\n }),\n ]),\n);\n\n/***\n * Expected JSON RPC response for the \"accountNotification\" message\n */\nconst AccountNotificationResult = struct({\n subscription: 'number',\n result: notificationResultAndContext(AccountInfoResult),\n});\n\n/**\n * @private\n */\nconst ProgramAccountInfoResult = struct({\n pubkey: 'string',\n account: AccountInfoResult,\n});\n\n/**\n * @private\n */\nconst ParsedProgramAccountInfoResult = struct({\n pubkey: 'string',\n account: ParsedAccountInfoResult,\n});\n\n/***\n * Expected JSON RPC response for the \"programNotification\" message\n */\nconst ProgramAccountNotificationResult = struct({\n subscription: 'number',\n result: notificationResultAndContext(ProgramAccountInfoResult),\n});\n\n/**\n * @private\n */\nconst SlotInfoResult = struct({\n parent: 'number',\n slot: 'number',\n root: 'number',\n});\n\n/**\n * Expected JSON RPC response for the \"slotNotification\" message\n */\nconst SlotNotificationResult = struct({\n subscription: 'number',\n result: SlotInfoResult,\n});\n\n/**\n * Expected JSON RPC response for the \"signatureNotification\" message\n */\nconst SignatureNotificationResult = struct({\n subscription: 'number',\n result: notificationResultAndContext(SignatureStatusResult),\n});\n\n/**\n * Expected JSON RPC response for the \"rootNotification\" message\n */\nconst RootNotificationResult = struct({\n subscription: 'number',\n result: 'number',\n});\n\n/**\n * Expected JSON RPC response for the \"getProgramAccounts\" message\n */\nconst GetProgramAccountsRpcResult = jsonRpcResult(\n struct.array([ProgramAccountInfoResult]),\n);\n\n/**\n * Expected JSON RPC response for the \"getProgramAccounts\" message\n */\nconst GetParsedProgramAccountsRpcResult = jsonRpcResult(\n struct.array([ParsedProgramAccountInfoResult]),\n);\n\n/**\n * Expected JSON RPC response for the \"getSlot\" message\n */\nconst GetSlot = jsonRpcResult('number');\n\n/**\n * Expected JSON RPC response for the \"getSlotLeader\" message\n */\nconst GetSlotLeader = jsonRpcResult('string');\n\n/**\n * Expected JSON RPC response for the \"getClusterNodes\" message\n */\nconst GetClusterNodes = jsonRpcResult(\n struct.array([\n struct.pick({\n pubkey: 'string',\n gossip: struct.union(['null', 'string']),\n tpu: struct.union(['null', 'string']),\n rpc: struct.union(['null', 'string']),\n version: struct.union(['null', 'string']),\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getVoteAccounts\" message\n */\nconst GetVoteAccounts = jsonRpcResult(\n struct({\n current: struct.array([\n struct.pick({\n votePubkey: 'string',\n nodePubkey: 'string',\n activatedStake: 'number',\n epochVoteAccount: 'boolean',\n epochCredits: struct.array([\n struct.tuple(['number', 'number', 'number']),\n ]),\n commission: 'number',\n lastVote: 'number',\n rootSlot: 'number?',\n }),\n ]),\n delinquent: struct.array([\n struct.pick({\n votePubkey: 'string',\n nodePubkey: 'string',\n activatedStake: 'number',\n epochVoteAccount: 'boolean',\n epochCredits: struct.array([\n struct.tuple(['number', 'number', 'number']),\n ]),\n commission: 'number',\n lastVote: 'number',\n rootSlot: 'number?',\n }),\n ]),\n }),\n);\n\n/**\n * Expected JSON RPC response for the \"getSignatureStatuses\" message\n */\nconst GetSignatureStatusesRpcResult = jsonRpcResultAndContext(\n struct.array([\n struct.union([\n 'null',\n struct.pick({\n slot: 'number',\n confirmations: struct.union(['number', 'null']),\n err: TransactionErrorResult,\n }),\n ]),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getTransactionCount\" message\n */\nconst GetTransactionCountRpcResult = jsonRpcResult('number');\n\n/**\n * Expected JSON RPC response for the \"getTotalSupply\" message\n */\nconst GetTotalSupplyRpcResult = jsonRpcResult('number');\n\n/**\n * Expected JSON RPC response for the \"getMinimumBalanceForRentExemption\" message\n */\nconst GetMinimumBalanceForRentExemptionRpcResult = jsonRpcResult('number');\n\n/**\n * @private\n */\nconst ConfirmedTransactionResult = struct({\n signatures: struct.array(['string']),\n message: struct({\n accountKeys: struct.array(['string']),\n header: struct({\n numRequiredSignatures: 'number',\n numReadonlySignedAccounts: 'number',\n numReadonlyUnsignedAccounts: 'number',\n }),\n instructions: struct.array([\n struct({\n accounts: struct.array(['number']),\n data: 'string',\n programIdIndex: 'number',\n }),\n ]),\n recentBlockhash: 'string',\n }),\n});\n\n/**\n * @private\n */\nconst ParsedConfirmedTransactionResult = struct({\n signatures: struct.array(['string']),\n message: struct({\n accountKeys: struct.array([\n struct({\n pubkey: 'string',\n signer: 'boolean',\n writable: 'boolean',\n }),\n ]),\n instructions: struct.array([\n struct.union([\n struct({\n accounts: struct.array(['string']),\n data: 'string',\n programId: 'string',\n }),\n struct({\n parsed: 'any',\n program: 'string',\n programId: 'string',\n }),\n ]),\n ]),\n recentBlockhash: 'string',\n }),\n});\n\n/**\n * @private\n */\nconst ConfirmedTransactionMetaResult = struct.union([\n 'null',\n struct.pick({\n err: TransactionErrorResult,\n fee: 'number',\n preBalances: struct.array(['number']),\n postBalances: struct.array(['number']),\n }),\n]);\n\n/**\n * Expected JSON RPC response for the \"getConfirmedBlock\" message\n */\nexport const GetConfirmedBlockRpcResult = jsonRpcResult(\n struct.union([\n 'null',\n struct.pick({\n blockhash: 'string',\n previousBlockhash: 'string',\n parentSlot: 'number',\n transactions: struct.array([\n struct({\n transaction: ConfirmedTransactionResult,\n meta: ConfirmedTransactionMetaResult,\n }),\n ]),\n rewards: struct.union([\n 'undefined',\n struct.array([\n struct({\n pubkey: 'string',\n lamports: 'number',\n }),\n ]),\n ]),\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getConfirmedTransaction\" message\n */\nconst GetConfirmedTransactionRpcResult = jsonRpcResult(\n struct.union([\n 'null',\n struct.pick({\n slot: 'number',\n transaction: ConfirmedTransactionResult,\n meta: ConfirmedTransactionMetaResult,\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getConfirmedTransaction\" message\n */\nconst GetParsedConfirmedTransactionRpcResult = jsonRpcResult(\n struct.union([\n 'null',\n struct.pick({\n slot: 'number',\n transaction: ParsedConfirmedTransactionResult,\n meta: ConfirmedTransactionMetaResult,\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"getRecentBlockhash\" message\n */\nconst GetRecentBlockhashAndContextRpcResult = jsonRpcResultAndContext(\n struct({\n blockhash: 'string',\n feeCalculator: struct({\n lamportsPerSignature: 'number',\n }),\n }),\n);\n\n/**\n * Expected JSON RPC response for the \"getFeeCalculatorForBlockhash\" message\n */\nconst GetFeeCalculatorRpcResult = jsonRpcResultAndContext(\n struct.union([\n 'null',\n struct({\n feeCalculator: struct({\n lamportsPerSignature: 'number',\n }),\n }),\n ]),\n);\n\n/**\n * Expected JSON RPC response for the \"requestAirdrop\" message\n */\nconst RequestAirdropRpcResult = jsonRpcResult('string');\n\n/**\n * Expected JSON RPC response for the \"sendTransaction\" message\n */\nconst SendTransactionRpcResult = jsonRpcResult('string');\n\n/**\n * Information about the latest slot being processed by a node\n *\n * @typedef {Object} SlotInfo\n * @property {number} slot Currently processing slot\n * @property {number} parent Parent of the current slot\n * @property {number} root The root block of the current slot's fork\n */\ntype SlotInfo = {\n slot: number,\n parent: number,\n root: number,\n};\n\n/**\n * Parsed account data\n *\n * @typedef {Object} ParsedAccountData\n * @property {string} program Name of the program that owns this account\n * @property {any} parsed Parsed account data\n * @property {number} space Space used by account data\n */\ntype ParsedAccountData = {\n program: string,\n parsed: any,\n space: number,\n};\n\n/**\n * Information describing an account\n *\n * @typedef {Object} AccountInfo\n * @property {number} lamports Number of lamports assigned to the account\n * @property {PublicKey} owner Identifier of the program that owns the account\n * @property {T} data Optional data assigned to the account\n * @property {boolean} executable `true` if this account's data contains a loaded program\n */\ntype AccountInfo = {\n executable: boolean,\n owner: PublicKey,\n lamports: number,\n data: T,\n};\n\n/**\n * Account information identified by pubkey\n *\n * @typedef {Object} KeyedAccountInfo\n * @property {PublicKey} accountId\n * @property {AccountInfo} accountInfo\n */\ntype KeyedAccountInfo = {\n accountId: PublicKey,\n accountInfo: AccountInfo,\n};\n\n/**\n * Callback function for account change notifications\n */\nexport type AccountChangeCallback = (\n accountInfo: AccountInfo,\n context: Context,\n) => void;\n\n/**\n * @private\n */\ntype SubscriptionId = 'subscribing' | number;\n\n/**\n * @private\n */\ntype AccountSubscriptionInfo = {\n publicKey: string, // PublicKey of the account as a base 58 string\n callback: AccountChangeCallback,\n commitment: ?Commitment,\n subscriptionId: ?SubscriptionId, // null when there's no current server subscription id\n};\n\n/**\n * Callback function for program account change notifications\n */\nexport type ProgramAccountChangeCallback = (\n keyedAccountInfo: KeyedAccountInfo,\n context: Context,\n) => void;\n\n/**\n * @private\n */\ntype ProgramAccountSubscriptionInfo = {\n programId: string, // PublicKey of the program as a base 58 string\n callback: ProgramAccountChangeCallback,\n commitment: ?Commitment,\n subscriptionId: ?SubscriptionId, // null when there's no current server subscription id\n};\n\n/**\n * Callback function for slot change notifications\n */\nexport type SlotChangeCallback = (slotInfo: SlotInfo) => void;\n\n/**\n * @private\n */\ntype SlotSubscriptionInfo = {\n callback: SlotChangeCallback,\n subscriptionId: ?SubscriptionId, // null when there's no current server subscription id\n};\n\n/**\n * Callback function for signature notifications\n */\nexport type SignatureResultCallback = (\n signatureResult: SignatureResult,\n context: Context,\n) => void;\n\n/**\n * @private\n */\ntype SignatureSubscriptionInfo = {\n signature: TransactionSignature, // TransactionSignature as a base 58 string\n callback: SignatureResultCallback,\n commitment: ?Commitment,\n subscriptionId: ?SubscriptionId, // null when there's no current server subscription id\n};\n\n/**\n * Callback function for root change notifications\n */\nexport type RootChangeCallback = (root: number) => void;\n\n/**\n * @private\n */\ntype RootSubscriptionInfo = {\n callback: RootChangeCallback,\n subscriptionId: ?SubscriptionId, // null when there's no current server subscription id\n};\n\n/**\n * Signature result\n *\n * @typedef {Object} SignatureResult\n */\nexport type SignatureResult = {|\n err: TransactionError | null,\n|};\n\n/**\n * Transaction error\n *\n * @typedef {Object} TransactionError\n */\nexport type TransactionError = {};\n\n/**\n * Signature status\n *\n * @typedef {Object} SignatureStatus\n * @property {number} slot when the transaction was processed\n * @property {number | null} confirmations the number of blocks that have been confirmed and voted on in the fork containing `slot` (TODO)\n * @property {TransactionError | null} err error, if any\n */\nexport type SignatureStatus = {\n slot: number,\n confirmations: number | null,\n err: TransactionError | null,\n};\n\n/**\n * A confirmed signature with its status\n *\n * @typedef {Object} ConfirmedSignatureInfo\n * @property {string} signature the transaction signature\n * @property {number} slot when the transaction was processed\n * @property {TransactionError | null} err error, if any\n * @property {string | null} memo memo associated with the transaction, if any\n */\nexport type ConfirmedSignatureInfo = {\n signature: string,\n slot: number,\n err: TransactionError | null,\n memo: string | null,\n};\n\n/**\n * A connection to a fullnode JSON RPC endpoint\n */\nexport class Connection {\n _rpcRequest: RpcRequest;\n _rpcWebSocket: RpcWebSocketClient;\n _rpcWebSocketConnected: boolean = false;\n\n _commitment: ?Commitment;\n _blockhashInfo: {\n recentBlockhash: Blockhash | null,\n lastFetch: Date,\n simulatedSignatures: Array,\n transactionSignatures: Array,\n };\n _disableBlockhashCaching: boolean = false;\n _accountChangeSubscriptions: {[number]: AccountSubscriptionInfo} = {};\n _accountChangeSubscriptionCounter: number = 0;\n _programAccountChangeSubscriptions: {\n [number]: ProgramAccountSubscriptionInfo,\n } = {};\n _programAccountChangeSubscriptionCounter: number = 0;\n _slotSubscriptions: {\n [number]: SlotSubscriptionInfo,\n } = {};\n _slotSubscriptionCounter: number = 0;\n _signatureSubscriptions: {\n [number]: SignatureSubscriptionInfo,\n } = {};\n _signatureSubscriptionCounter: number = 0;\n _rootSubscriptions: {\n [number]: RootSubscriptionInfo,\n } = {};\n _rootSubscriptionCounter: number = 0;\n\n /**\n * Establish a JSON RPC connection\n *\n * @param endpoint URL to the fullnode JSON RPC endpoint\n * @param commitment optional default commitment level\n */\n constructor(endpoint: string, commitment: ?Commitment) {\n let url = urlParse(endpoint);\n\n this._rpcRequest = createRpcRequest(url.href);\n this._commitment = commitment;\n this._blockhashInfo = {\n recentBlockhash: null,\n lastFetch: new Date(0),\n transactionSignatures: [],\n simulatedSignatures: [],\n };\n\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n url.host = '';\n if (url.port !== null) {\n url.port = String(Number(url.port) + 1);\n }\n this._rpcWebSocket = new RpcWebSocketClient(urlFormat(url), {\n autoconnect: false,\n max_reconnects: Infinity,\n });\n this._rpcWebSocket.on('open', this._wsOnOpen.bind(this));\n this._rpcWebSocket.on('error', this._wsOnError.bind(this));\n this._rpcWebSocket.on('close', this._wsOnClose.bind(this));\n this._rpcWebSocket.on(\n 'accountNotification',\n this._wsOnAccountNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'programNotification',\n this._wsOnProgramAccountNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'slotNotification',\n this._wsOnSlotNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'signatureNotification',\n this._wsOnSignatureNotification.bind(this),\n );\n this._rpcWebSocket.on(\n 'rootNotification',\n this._wsOnRootNotification.bind(this),\n );\n }\n\n /**\n * The default commitment used for requests\n */\n get commitment(): ?Commitment {\n return this._commitment;\n }\n\n /**\n * Fetch the balance for the specified public key, return with context\n */\n async getBalanceAndContext(\n publicKey: PublicKey,\n commitment: ?Commitment,\n ): Promise> {\n const args = this._buildArgs([publicKey.toBase58()], commitment);\n const unsafeRes = await this._rpcRequest('getBalance', args);\n const res = GetBalanceAndContextRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get balance for ' +\n publicKey.toBase58() +\n ': ' +\n res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the balance for the specified public key\n */\n async getBalance(\n publicKey: PublicKey,\n commitment: ?Commitment,\n ): Promise {\n return await this.getBalanceAndContext(publicKey, commitment)\n .then(x => x.value)\n .catch(e => {\n throw new Error(\n 'failed to get balance of account ' + publicKey.toBase58() + ': ' + e,\n );\n });\n }\n\n /**\n * Fetch the estimated production time of a block\n */\n async getBlockTime(slot: number): Promise {\n const unsafeRes = await this._rpcRequest('getBlockTime', [slot]);\n const res = GetBlockTimeRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get block time for slot ' + slot + ': ' + res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the lowest slot that the node has information about in its ledger.\n * This value may increase over time if the node is configured to purge older ledger data\n */\n async getMinimumLedgerSlot(): Promise {\n const unsafeRes = await this._rpcRequest('minimumLedgerSlot', []);\n const res = SlotRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get minimum ledger slot: ' + res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the slot of the lowest confirmed block that has not been purged from the ledger\n */\n async getFirstAvailableBlock(): Promise {\n const unsafeRes = await this._rpcRequest('getFirstAvailableBlock', []);\n const res = SlotRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get first available block: ' + res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch information about the current supply\n */\n async getSupply(\n commitment: ?Commitment,\n ): Promise> {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getSupply', args);\n const res = GetSupplyRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get supply: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n res.result.value.nonCirculatingAccounts = res.result.value.nonCirculatingAccounts.map(\n account => new PublicKey(account),\n );\n return res.result;\n }\n\n /**\n * Fetch the current supply of a token mint\n */\n async getTokenSupply(\n tokenMintAddress: PublicKey,\n commitment: ?Commitment,\n ): Promise> {\n const args = this._buildArgs([tokenMintAddress.toBase58()], commitment);\n const unsafeRes = await this._rpcRequest('getTokenSupply', args);\n const res = GetTokenSupplyRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get token supply: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the current balance of a token account\n */\n async getTokenAccountBalance(\n tokenAddress: PublicKey,\n commitment: ?Commitment,\n ): Promise> {\n const args = this._buildArgs([tokenAddress.toBase58()], commitment);\n const unsafeRes = await this._rpcRequest('getTokenAccountBalance', args);\n const res = GetTokenAccountBalance(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get token account balance: ' + res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch all the token accounts owned by the specified account\n *\n * @return {Promise}>>>}\n */\n async getTokenAccountsByOwner(\n ownerAddress: PublicKey,\n filter: TokenAccountsFilter,\n commitment: ?Commitment,\n ): Promise<\n RpcResponseAndContext<\n Array<{pubkey: PublicKey, account: AccountInfo}>,\n >,\n > {\n let _args = [ownerAddress.toBase58()];\n if (filter.mint) {\n _args.push({mint: filter.mint.toBase58()});\n } else {\n _args.push({programId: filter.programId.toBase58()});\n }\n\n const args = this._buildArgs(_args, commitment, 'base64');\n const unsafeRes = await this._rpcRequest('getTokenAccountsByOwner', args);\n const res = GetTokenAccountsByOwner(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get token accounts owned by account ' +\n ownerAddress.toBase58() +\n ': ' +\n res.error.message,\n );\n }\n\n const {result} = res;\n const {context, value} = result;\n assert(typeof result !== 'undefined');\n\n return {\n context,\n value: value.map(result => {\n assert(result.account.data[1] === 'base64');\n return {\n pubkey: new PublicKey(result.pubkey),\n account: {\n executable: result.account.executable,\n owner: new PublicKey(result.account.owner),\n lamports: result.account.lamports,\n data: Buffer.from(result.account.data[0], 'base64'),\n },\n };\n }),\n };\n }\n\n /**\n * Fetch parsed token accounts owned by the specified account\n *\n * @return {Promise}>>>}\n */\n async getParsedTokenAccountsByOwner(\n ownerAddress: PublicKey,\n filter: TokenAccountsFilter,\n commitment: ?Commitment,\n ): Promise<\n RpcResponseAndContext<\n Array<{pubkey: PublicKey, account: AccountInfo}>,\n >,\n > {\n let _args = [ownerAddress.toBase58()];\n if (filter.mint) {\n _args.push({mint: filter.mint.toBase58()});\n } else {\n _args.push({programId: filter.programId.toBase58()});\n }\n\n const args = this._buildArgs(_args, commitment, 'jsonParsed');\n const unsafeRes = await this._rpcRequest('getTokenAccountsByOwner', args);\n const res = GetParsedTokenAccountsByOwner(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get token accounts owned by account ' +\n ownerAddress.toBase58() +\n ': ' +\n res.error.message,\n );\n }\n\n const {result} = res;\n const {context, value} = result;\n assert(typeof result !== 'undefined');\n\n return {\n context,\n value: value.map(result => ({\n pubkey: new PublicKey(result.pubkey),\n account: {\n executable: result.account.executable,\n owner: new PublicKey(result.account.owner),\n lamports: result.account.lamports,\n data: result.account.data,\n },\n })),\n };\n }\n\n /**\n * Fetch the 20 largest accounts with their current balances\n */\n async getLargestAccounts(\n config: ?GetLargestAccountsConfig,\n ): Promise>> {\n const arg = {\n ...config,\n commitment: (config && config.commitment) || this.commitment,\n };\n const args = arg.filter || arg.commitment ? [arg] : [];\n const unsafeRes = await this._rpcRequest('getLargestAccounts', args);\n const res = GetLargestAccountsRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get largest accounts: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n res.result.value = res.result.value.map(({address, lamports}) => ({\n address: new PublicKey(address),\n lamports,\n }));\n return res.result;\n }\n\n /**\n * Fetch the 20 largest token accounts with their current balances\n * for a given mint.\n */\n async getTokenLargestAccounts(\n mintAddress: PublicKey,\n commitment: ?Commitment,\n ): Promise>> {\n const args = this._buildArgs([mintAddress.toBase58()], commitment);\n const unsafeRes = await this._rpcRequest('getTokenLargestAccounts', args);\n const res = GetTokenLargestAccountsResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get token largest accounts: ' + res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n res.result.value = res.result.value.map(pair => ({\n ...pair,\n address: new PublicKey(pair.address),\n }));\n return res.result;\n }\n\n /**\n * Fetch all the account info for the specified public key, return with context\n */\n async getAccountInfoAndContext(\n publicKey: PublicKey,\n commitment: ?Commitment,\n ): Promise | null>> {\n const args = this._buildArgs(\n [publicKey.toBase58()],\n commitment,\n 'base64',\n );\n const unsafeRes = await this._rpcRequest('getAccountInfo', args);\n const res = GetAccountInfoAndContextRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get info about account ' +\n publicKey.toBase58() +\n ': ' +\n res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n\n let value = null;\n if (res.result.value) {\n const {executable, owner, lamports, data} = res.result.value;\n assert(data[1] === 'base64');\n value = {\n executable,\n owner: new PublicKey(owner),\n lamports,\n data: Buffer.from(data[0], 'base64'),\n };\n }\n\n return {\n context: {\n slot: res.result.context.slot,\n },\n value,\n };\n }\n\n /**\n * Fetch parsed account info for the specified public key\n */\n async getParsedAccountInfo(\n publicKey: PublicKey,\n commitment: ?Commitment,\n ): Promise<\n RpcResponseAndContext | null>,\n > {\n const args = this._buildArgs(\n [publicKey.toBase58()],\n commitment,\n 'jsonParsed',\n );\n const unsafeRes = await this._rpcRequest('getAccountInfo', args);\n const res = GetParsedAccountInfoResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get info about account ' +\n publicKey.toBase58() +\n ': ' +\n res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n\n let value = null;\n if (res.result.value) {\n const {executable, owner, lamports, data: resultData} = res.result.value;\n\n let data = resultData;\n if (!data.program) {\n assert(data[1] === 'base64');\n data = Buffer.from(data[0], 'base64');\n }\n\n value = {\n executable,\n owner: new PublicKey(owner),\n lamports,\n data,\n };\n }\n\n return {\n context: {\n slot: res.result.context.slot,\n },\n value,\n };\n }\n\n /**\n * Fetch all the account info for the specified public key\n */\n async getAccountInfo(\n publicKey: PublicKey,\n commitment: ?Commitment,\n ): Promise | null> {\n return await this.getAccountInfoAndContext(publicKey, commitment)\n .then(x => x.value)\n .catch(e => {\n throw new Error(\n 'failed to get info about account ' + publicKey.toBase58() + ': ' + e,\n );\n });\n }\n\n /**\n * Fetch all the accounts owned by the specified program id\n *\n * @return {Promise}>>}\n */\n async getProgramAccounts(\n programId: PublicKey,\n commitment: ?Commitment,\n ): Promise}>> {\n const args = this._buildArgs(\n [programId.toBase58()],\n commitment,\n 'base64',\n );\n const unsafeRes = await this._rpcRequest('getProgramAccounts', args);\n const res = GetProgramAccountsRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get accounts owned by program ' +\n programId.toBase58() +\n ': ' +\n res.error.message,\n );\n }\n\n const {result} = res;\n assert(typeof result !== 'undefined');\n\n return result.map(result => {\n assert(result.account.data[1] === 'base64');\n return {\n pubkey: new PublicKey(result.pubkey),\n account: {\n executable: result.account.executable,\n owner: new PublicKey(result.account.owner),\n lamports: result.account.lamports,\n data: Buffer.from(result.account.data[0], 'base64'),\n },\n };\n });\n }\n\n /**\n * Fetch and parse all the accounts owned by the specified program id\n *\n * @return {Promise}>>}\n */\n async getParsedProgramAccounts(\n programId: PublicKey,\n commitment: ?Commitment,\n ): Promise<\n Array<{\n pubkey: PublicKey,\n account: AccountInfo,\n }>,\n > {\n const args = this._buildArgs(\n [programId.toBase58()],\n commitment,\n 'jsonParsed',\n );\n const unsafeRes = await this._rpcRequest('getProgramAccounts', args);\n const res = GetParsedProgramAccountsRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'failed to get accounts owned by program ' +\n programId.toBase58() +\n ': ' +\n res.error.message,\n );\n }\n\n const {result} = res;\n assert(typeof result !== 'undefined');\n\n return result.map(result => {\n const resultData = result.account.data;\n\n let data = resultData;\n if (!data.program) {\n assert(data[1] === 'base64');\n data = Buffer.from(data[0], 'base64');\n }\n\n return {\n pubkey: new PublicKey(result.pubkey),\n account: {\n executable: result.account.executable,\n owner: new PublicKey(result.account.owner),\n lamports: result.account.lamports,\n data,\n },\n };\n });\n }\n\n /**\n * Confirm the transaction identified by the specified signature\n */\n async confirmTransaction(\n signature: TransactionSignature,\n confirmations: ?number,\n ): Promise> {\n const start = Date.now();\n const WAIT_TIMEOUT_MS = 60 * 1000;\n\n let statusResponse = await this.getSignatureStatus(signature);\n for (;;) {\n const status = statusResponse.value;\n if (status) {\n // Received a status, if not an error wait for confirmation\n if (\n status.err ||\n status.confirmations === null ||\n (typeof confirmations === 'number' &&\n status.confirmations >= confirmations)\n ) {\n break;\n }\n } else if (Date.now() - start >= WAIT_TIMEOUT_MS) {\n break;\n }\n\n // Sleep for approximately one slot\n await sleep(MS_PER_SLOT);\n statusResponse = await this.getSignatureStatus(signature);\n }\n\n return statusResponse;\n }\n\n /**\n * Return the list of nodes that are currently participating in the cluster\n */\n async getClusterNodes(): Promise> {\n const unsafeRes = await this._rpcRequest('getClusterNodes', []);\n\n const res = GetClusterNodes(unsafeRes);\n if (res.error) {\n throw new Error('failed to get cluster nodes: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Return the list of nodes that are currently participating in the cluster\n */\n async getVoteAccounts(commitment: ?Commitment): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getVoteAccounts', args);\n const res = GetVoteAccounts(unsafeRes);\n //const res = unsafeRes;\n if (res.error) {\n throw new Error('failed to get vote accounts: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the current slot that the node is processing\n */\n async getSlot(commitment: ?Commitment): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getSlot', args);\n const res = GetSlot(unsafeRes);\n if (res.error) {\n throw new Error('failed to get slot: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the current slot leader of the cluster\n */\n async getSlotLeader(commitment: ?Commitment): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getSlotLeader', args);\n const res = GetSlotLeader(unsafeRes);\n if (res.error) {\n throw new Error('failed to get slot leader: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the current status of a signature\n */\n async getSignatureStatus(\n signature: TransactionSignature,\n config: ?SignatureStatusConfig,\n ): Promise> {\n const {context, value} = await this.getSignatureStatuses(\n [signature],\n config,\n );\n assert(value.length === 1);\n return {context, value: value[0]};\n }\n\n /**\n * Fetch the current statuses of a batch of signatures\n */\n async getSignatureStatuses(\n signatures: Array,\n config: ?SignatureStatusConfig,\n ): Promise>> {\n const params = [signatures];\n if (config) {\n params.push(config);\n }\n const unsafeRes = await this._rpcRequest('getSignatureStatuses', params);\n const res = GetSignatureStatusesRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get signature status: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the current transaction count of the cluster\n */\n async getTransactionCount(commitment: ?Commitment): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getTransactionCount', args);\n const res = GetTransactionCountRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get transaction count: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return Number(res.result);\n }\n\n /**\n * Fetch the current total currency supply of the cluster in lamports\n */\n async getTotalSupply(commitment: ?Commitment): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getTotalSupply', args);\n const res = GetTotalSupplyRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('faied to get total supply: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return Number(res.result);\n }\n\n /**\n * Fetch the cluster InflationGovernor parameters\n */\n async getInflationGovernor(\n commitment: ?Commitment,\n ): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getInflationGovernor', args);\n const res = GetInflationGovernorRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get inflation: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return GetInflationGovernorResult(res.result);\n }\n\n /**\n * Fetch the Epoch Info parameters\n */\n async getEpochInfo(commitment: ?Commitment): Promise {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getEpochInfo', args);\n const res = GetEpochInfoRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get epoch info: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return GetEpochInfoResult(res.result);\n }\n\n /**\n * Fetch the Epoch Schedule parameters\n */\n async getEpochSchedule(): Promise {\n const unsafeRes = await this._rpcRequest('getEpochSchedule', []);\n const res = GetEpochScheduleRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get epoch schedule: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return GetEpochScheduleResult(res.result);\n }\n\n /**\n * Fetch the leader schedule for the current epoch\n * @return {Promise>}\n */\n async getLeaderSchedule(): Promise {\n const unsafeRes = await this._rpcRequest('getLeaderSchedule', []);\n const res = GetLeaderScheduleRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get leader schedule: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the minimum balance needed to exempt an account of `dataLength`\n * size from rent\n */\n async getMinimumBalanceForRentExemption(\n dataLength: number,\n commitment: ?Commitment,\n ): Promise {\n const args = this._buildArgs([dataLength], commitment);\n const unsafeRes = await this._rpcRequest(\n 'getMinimumBalanceForRentExemption',\n args,\n );\n const res = GetMinimumBalanceForRentExemptionRpcResult(unsafeRes);\n if (res.error) {\n console.warn('Unable to fetch minimum balance for rent exemption');\n return 0;\n }\n assert(typeof res.result !== 'undefined');\n return Number(res.result);\n }\n\n /**\n * Fetch a recent blockhash from the cluster, return with context\n * @return {Promise>}\n */\n async getRecentBlockhashAndContext(\n commitment: ?Commitment,\n ): Promise<\n RpcResponseAndContext<{blockhash: Blockhash, feeCalculator: FeeCalculator}>,\n > {\n const args = this._buildArgs([], commitment);\n const unsafeRes = await this._rpcRequest('getRecentBlockhash', args);\n\n const res = GetRecentBlockhashAndContextRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get recent blockhash: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch the fee calculator for a recent blockhash from the cluster, return with context\n */\n async getFeeCalculatorForBlockhash(\n blockhash: Blockhash,\n commitment: ?Commitment,\n ): Promise> {\n const args = this._buildArgs([blockhash], commitment);\n const unsafeRes = await this._rpcRequest(\n 'getFeeCalculatorForBlockhash',\n args,\n );\n\n const res = GetFeeCalculatorRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get fee calculator: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n const {context, value} = res.result;\n return {\n context,\n value: value && value.feeCalculator,\n };\n }\n\n /**\n * Fetch a recent blockhash from the cluster\n * @return {Promise<{blockhash: Blockhash, feeCalculator: FeeCalculator}>}\n */\n async getRecentBlockhash(\n commitment: ?Commitment,\n ): Promise<{blockhash: Blockhash, feeCalculator: FeeCalculator}> {\n return await this.getRecentBlockhashAndContext(commitment)\n .then(x => x.value)\n .catch(e => {\n throw new Error('failed to get recent blockhash: ' + e);\n });\n }\n\n /**\n * Fetch the node version\n */\n async getVersion(): Promise {\n const unsafeRes = await this._rpcRequest('getVersion', []);\n const res = GetVersionRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to get version: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Fetch a list of Transactions and transaction statuses from the cluster\n * for a confirmed block\n */\n async getConfirmedBlock(slot: number): Promise {\n const unsafeRes = await this._rpcRequest('getConfirmedBlock', [slot]);\n const {result, error} = GetConfirmedBlockRpcResult(unsafeRes);\n if (error) {\n throw new Error('failed to get confirmed block: ' + result.error.message);\n }\n assert(typeof result !== 'undefined');\n if (!result) {\n throw new Error('Confirmed block ' + slot + ' not found');\n }\n return {\n blockhash: new PublicKey(result.blockhash).toString(),\n previousBlockhash: new PublicKey(result.previousBlockhash).toString(),\n parentSlot: result.parentSlot,\n transactions: result.transactions.map(result => {\n const {message, signatures} = result.transaction;\n return {\n transaction: Transaction.populate(new Message(message), signatures),\n meta: result.meta,\n };\n }),\n rewards: result.rewards || [],\n };\n }\n\n /**\n * Fetch a transaction details for a confirmed transaction\n */\n async getConfirmedTransaction(\n signature: TransactionSignature,\n ): Promise {\n const unsafeRes = await this._rpcRequest('getConfirmedTransaction', [\n signature,\n ]);\n const {result, error} = GetConfirmedTransactionRpcResult(unsafeRes);\n if (error) {\n throw new Error('failed to get confirmed transaction: ' + error.message);\n }\n assert(typeof result !== 'undefined');\n if (result === null) {\n return result;\n }\n\n const {message, signatures} = result.transaction;\n return {\n slot: result.slot,\n transaction: Transaction.populate(new Message(message), signatures),\n meta: result.meta,\n };\n }\n\n /**\n * Fetch parsed transaction details for a confirmed transaction\n */\n async getParsedConfirmedTransaction(\n signature: TransactionSignature,\n ): Promise {\n const unsafeRes = await this._rpcRequest('getConfirmedTransaction', [\n signature,\n 'jsonParsed',\n ]);\n const {result, error} = GetParsedConfirmedTransactionRpcResult(unsafeRes);\n if (error) {\n throw new Error('failed to get confirmed transaction: ' + error.message);\n }\n assert(typeof result !== 'undefined');\n if (result === null) return result;\n\n const {\n accountKeys,\n instructions,\n recentBlockhash,\n } = result.transaction.message;\n return {\n slot: result.slot,\n meta: result.meta,\n transaction: {\n signatures: result.transaction.signatures,\n message: {\n accountKeys: accountKeys.map(accountKey => ({\n pubkey: new PublicKey(accountKey.pubkey),\n signer: accountKey.signer,\n writable: accountKey.writable,\n })),\n instructions: instructions.map(ix => {\n let mapped: any = {programId: new PublicKey(ix.programId)};\n if ('accounts' in ix) {\n mapped.accounts = ix.accounts.map(key => new PublicKey(key));\n }\n\n return {\n ...ix,\n ...mapped,\n };\n }),\n recentBlockhash,\n },\n },\n };\n }\n\n /**\n * Fetch a list of all the confirmed signatures for transactions involving an address\n * within a specified slot range. Max range allowed is 10,000 slots.\n *\n * @param address queried address\n * @param startSlot start slot, inclusive\n * @param endSlot end slot, inclusive\n */\n async getConfirmedSignaturesForAddress(\n address: PublicKey,\n startSlot: number,\n endSlot: number,\n ): Promise> {\n const unsafeRes = await this._rpcRequest(\n 'getConfirmedSignaturesForAddress',\n [address.toBase58(), startSlot, endSlot],\n );\n const result = GetConfirmedSignaturesForAddressRpcResult(unsafeRes);\n if (result.error) {\n throw new Error(\n 'failed to get confirmed signatures for address: ' +\n result.error.message,\n );\n }\n assert(typeof result.result !== 'undefined');\n return result.result;\n }\n\n /**\n * Returns confirmed signatures for transactions involving an\n * address backwards in time from the provided signature or most recent confirmed block\n *\n *\n * @param address queried address\n * @param options\n */\n async getConfirmedSignaturesForAddress2(\n address: PublicKey,\n options: ?ConfirmedSignaturesForAddress2Options,\n ): Promise> {\n const unsafeRes = await this._rpcRequest(\n 'getConfirmedSignaturesForAddress2',\n [address.toBase58(), options],\n );\n const result = GetConfirmedSignaturesForAddress2RpcResult(unsafeRes);\n if (result.error) {\n throw new Error(\n 'failed to get confirmed signatures for address: ' +\n result.error.message,\n );\n }\n assert(typeof result.result !== 'undefined');\n return result.result;\n }\n\n /**\n * Fetch the contents of a Nonce account from the cluster, return with context\n */\n async getNonceAndContext(\n nonceAccount: PublicKey,\n commitment: ?Commitment,\n ): Promise> {\n const {context, value: accountInfo} = await this.getAccountInfoAndContext(\n nonceAccount,\n commitment,\n );\n\n let value = null;\n if (accountInfo !== null) {\n value = NonceAccount.fromAccountData(accountInfo.data);\n }\n\n return {\n context,\n value,\n };\n }\n\n /**\n * Fetch the contents of a Nonce account from the cluster\n */\n async getNonce(\n nonceAccount: PublicKey,\n commitment: ?Commitment,\n ): Promise {\n return await this.getNonceAndContext(nonceAccount, commitment)\n .then(x => x.value)\n .catch(e => {\n throw new Error(\n 'failed to get nonce for account ' +\n nonceAccount.toBase58() +\n ': ' +\n e,\n );\n });\n }\n\n /**\n * Request an allocation of lamports to the specified account\n */\n async requestAirdrop(\n to: PublicKey,\n amount: number,\n ): Promise {\n const unsafeRes = await this._rpcRequest('requestAirdrop', [\n to.toBase58(),\n amount,\n ]);\n const res = RequestAirdropRpcResult(unsafeRes);\n if (res.error) {\n throw new Error(\n 'airdrop to ' + to.toBase58() + ' failed: ' + res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n async _recentBlockhash(disableCache: boolean): Promise {\n if (!disableCache) {\n // Attempt to use a recent blockhash for up to 30 seconds\n const expired =\n Date.now() - this._blockhashInfo.lastFetch >=\n BLOCKHASH_CACHE_TIMEOUT_MS;\n if (this._blockhashInfo.recentBlockhash !== null && !expired) {\n return this._blockhashInfo.recentBlockhash;\n }\n }\n\n return await this._pollNewBlockhash();\n }\n\n async _pollNewBlockhash(): Promise {\n const startTime = Date.now();\n for (let i = 0; i < 50; i++) {\n const {blockhash} = await this.getRecentBlockhash('max');\n\n if (this._blockhashInfo.recentBlockhash != blockhash) {\n this._blockhashInfo = {\n recentBlockhash: blockhash,\n lastFetch: new Date(),\n transactionSignatures: [],\n simulatedSignatures: [],\n };\n return blockhash;\n }\n\n // Sleep for approximately half a slot\n await sleep(MS_PER_SLOT / 2);\n }\n\n throw new Error(\n `Unable to obtain a new blockhash after ${Date.now() - startTime}ms`,\n );\n }\n\n /**\n * Simulate a transaction\n */\n async simulateTransaction(\n transaction: Transaction,\n signers?: Array,\n ): Promise> {\n if (transaction.nonceInfo && signers) {\n transaction.sign(...signers);\n } else {\n let disableCache = this._disableBlockhashCaching;\n for (;;) {\n transaction.recentBlockhash = await this._recentBlockhash(disableCache);\n\n if (!signers) break;\n\n transaction.sign(...signers);\n if (!transaction.signature) {\n throw new Error('!signature'); // should never happen\n }\n\n // If the signature of this transaction has not been seen before with the\n // current recentBlockhash, all done.\n const signature = transaction.signature.toString('base64');\n if (\n !this._blockhashInfo.simulatedSignatures.includes(signature) &&\n !this._blockhashInfo.transactionSignatures.includes(signature)\n ) {\n this._blockhashInfo.simulatedSignatures.push(signature);\n break;\n } else {\n disableCache = true;\n }\n }\n }\n\n const signData = transaction.serializeMessage();\n const wireTransaction = transaction._serialize(signData);\n const encodedTransaction = bs58.encode(wireTransaction);\n const args = [encodedTransaction];\n\n if (signers) {\n args.push({sigVerify: true});\n }\n\n const unsafeRes = await this._rpcRequest('simulateTransaction', args);\n const res = SimulatedTransactionResponseValidator(unsafeRes);\n if (res.error) {\n throw new Error('failed to simulate transaction: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n assert(res.result);\n return res.result;\n }\n\n /**\n * Sign and send a transaction\n */\n async sendTransaction(\n transaction: Transaction,\n signers: Array,\n options?: SendOptions,\n ): Promise {\n if (transaction.nonceInfo) {\n transaction.sign(...signers);\n } else {\n let disableCache = this._disableBlockhashCaching;\n for (;;) {\n transaction.recentBlockhash = await this._recentBlockhash(disableCache);\n transaction.sign(...signers);\n if (!transaction.signature) {\n throw new Error('!signature'); // should never happen\n }\n\n // If the signature of this transaction has not been seen before with the\n // current recentBlockhash, all done.\n const signature = transaction.signature.toString('base64');\n if (!this._blockhashInfo.transactionSignatures.includes(signature)) {\n this._blockhashInfo.transactionSignatures.push(signature);\n break;\n } else {\n disableCache = true;\n }\n }\n }\n\n const wireTransaction = transaction.serialize();\n return await this.sendRawTransaction(wireTransaction, options);\n }\n\n /**\n * @private\n */\n async validatorExit(): Promise {\n const unsafeRes = await this._rpcRequest('validatorExit', []);\n const res = jsonRpcResult('boolean')(unsafeRes);\n if (res.error) {\n throw new Error('validator exit failed: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n return res.result;\n }\n\n /**\n * Send a transaction that has already been signed and serialized into the\n * wire format\n */\n async sendRawTransaction(\n rawTransaction: Buffer | Uint8Array | Array,\n options: ?SendOptions,\n ): Promise {\n const encodedTransaction = bs58.encode(toBuffer(rawTransaction));\n const result = await this.sendEncodedTransaction(\n encodedTransaction,\n options,\n );\n return result;\n }\n\n /**\n * Send a transaction that has already been signed, serialized into the\n * wire format, and encoded as a base58 string\n */\n async sendEncodedTransaction(\n encodedTransaction: string,\n options: ?SendOptions,\n ): Promise {\n const args = [encodedTransaction];\n const skipPreflight = options && options.skipPreflight;\n if (skipPreflight) args.push({skipPreflight});\n const unsafeRes = await this._rpcRequest('sendTransaction', args);\n const res = SendTransactionRpcResult(unsafeRes);\n if (res.error) {\n throw new Error('failed to send transaction: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n assert(res.result);\n return res.result;\n }\n\n /**\n * @private\n */\n _wsOnOpen() {\n this._rpcWebSocketConnected = true;\n this._updateSubscriptions();\n }\n\n /**\n * @private\n */\n _wsOnError(err: Error) {\n console.error('ws error:', err.message);\n }\n\n /**\n * @private\n */\n _wsOnClose() {\n this._rpcWebSocketConnected = false;\n this._resetSubscriptions();\n }\n\n /**\n * @private\n */\n async _subscribe(\n sub: SubInfo,\n rpcMethod: string,\n rpcArgs: RpcArgs,\n ) {\n if (sub.subscriptionId == null) {\n sub.subscriptionId = 'subscribing';\n try {\n const id = await this._rpcWebSocket.call(rpcMethod, rpcArgs);\n if (sub.subscriptionId === 'subscribing') {\n // eslint-disable-next-line require-atomic-updates\n sub.subscriptionId = id;\n }\n } catch (err) {\n if (sub.subscriptionId === 'subscribing') {\n // eslint-disable-next-line require-atomic-updates\n sub.subscriptionId = null;\n }\n console.error(`${rpcMethod} error for argument`, rpcArgs, err.message);\n }\n }\n }\n\n /**\n * @private\n */\n async _unsubscribe(\n sub: SubInfo,\n rpcMethod: string,\n ) {\n const subscriptionId = sub.subscriptionId;\n if (subscriptionId != null && typeof subscriptionId != 'string') {\n const unsubscribeId: number = subscriptionId;\n try {\n await this._rpcWebSocket.call(rpcMethod, [unsubscribeId]);\n } catch (err) {\n console.error(`${rpcMethod} error:`, err.message);\n }\n }\n }\n\n /**\n * @private\n */\n _resetSubscriptions() {\n (Object.values(this._accountChangeSubscriptions): any).forEach(\n s => (s.subscriptionId = null),\n );\n (Object.values(this._programAccountChangeSubscriptions): any).forEach(\n s => (s.subscriptionId = null),\n );\n (Object.values(this._signatureSubscriptions): any).forEach(\n s => (s.subscriptionId = null),\n );\n (Object.values(this._slotSubscriptions): any).forEach(\n s => (s.subscriptionId = null),\n );\n (Object.values(this._rootSubscriptions): any).forEach(\n s => (s.subscriptionId = null),\n );\n }\n\n /**\n * @private\n */\n _updateSubscriptions() {\n const accountKeys = Object.keys(this._accountChangeSubscriptions).map(\n Number,\n );\n const programKeys = Object.keys(\n this._programAccountChangeSubscriptions,\n ).map(Number);\n const slotKeys = Object.keys(this._slotSubscriptions).map(Number);\n const signatureKeys = Object.keys(this._signatureSubscriptions).map(Number);\n const rootKeys = Object.keys(this._rootSubscriptions).map(Number);\n if (\n accountKeys.length === 0 &&\n programKeys.length === 0 &&\n slotKeys.length === 0 &&\n signatureKeys.length === 0 &&\n rootKeys.length === 0\n ) {\n this._rpcWebSocket.close();\n return;\n }\n\n if (!this._rpcWebSocketConnected) {\n this._resetSubscriptions();\n this._rpcWebSocket.connect();\n return;\n }\n\n for (let id of accountKeys) {\n const sub = this._accountChangeSubscriptions[id];\n this._subscribe(\n sub,\n 'accountSubscribe',\n this._buildArgs([sub.publicKey], sub.commitment, 'base64'),\n );\n }\n\n for (let id of programKeys) {\n const sub = this._programAccountChangeSubscriptions[id];\n this._subscribe(\n sub,\n 'programSubscribe',\n this._buildArgs([sub.programId], sub.commitment, 'base64'),\n );\n }\n\n for (let id of slotKeys) {\n const sub = this._slotSubscriptions[id];\n this._subscribe(sub, 'slotSubscribe', []);\n }\n\n for (let id of signatureKeys) {\n const sub = this._signatureSubscriptions[id];\n this._subscribe(\n sub,\n 'signatureSubscribe',\n this._buildArgs([sub.signature], sub.commitment),\n );\n }\n\n for (let id of rootKeys) {\n const sub = this._rootSubscriptions[id];\n this._subscribe(sub, 'rootSubscribe', []);\n }\n }\n\n /**\n * @private\n */\n _wsOnAccountNotification(notification: Object) {\n const res = AccountNotificationResult(notification);\n if (res.error) {\n throw new Error('account notification failed: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n const keys = Object.keys(this._accountChangeSubscriptions).map(Number);\n for (let id of keys) {\n const sub = this._accountChangeSubscriptions[id];\n if (sub.subscriptionId === res.subscription) {\n const {result} = res;\n const {value, context} = result;\n\n assert(value.data[1] === 'base64');\n sub.callback(\n {\n executable: value.executable,\n owner: new PublicKey(value.owner),\n lamports: value.lamports,\n data: Buffer.from(value.data[0], 'base64'),\n },\n context,\n );\n return true;\n }\n }\n }\n\n /**\n * Register a callback to be invoked whenever the specified account changes\n *\n * @param publicKey Public key of the account to monitor\n * @param callback Function to invoke whenever the account is changed\n * @param commitment Specify the commitment level account changes must reach before notification\n * @return subscription id\n */\n onAccountChange(\n publicKey: PublicKey,\n callback: AccountChangeCallback,\n commitment: ?Commitment,\n ): number {\n const id = ++this._accountChangeSubscriptionCounter;\n this._accountChangeSubscriptions[id] = {\n publicKey: publicKey.toBase58(),\n callback,\n commitment,\n subscriptionId: null,\n };\n this._updateSubscriptions();\n return id;\n }\n\n /**\n * Deregister an account notification callback\n *\n * @param id subscription id to deregister\n */\n async removeAccountChangeListener(id: number): Promise {\n if (this._accountChangeSubscriptions[id]) {\n const subInfo = this._accountChangeSubscriptions[id];\n delete this._accountChangeSubscriptions[id];\n await this._unsubscribe(subInfo, 'accountUnsubscribe');\n this._updateSubscriptions();\n } else {\n throw new Error(`Unknown account change id: ${id}`);\n }\n }\n\n /**\n * @private\n */\n _wsOnProgramAccountNotification(notification: Object) {\n const res = ProgramAccountNotificationResult(notification);\n if (res.error) {\n throw new Error(\n 'program account notification failed: ' + res.error.message,\n );\n }\n assert(typeof res.result !== 'undefined');\n const keys = Object.keys(this._programAccountChangeSubscriptions).map(\n Number,\n );\n for (let id of keys) {\n const sub = this._programAccountChangeSubscriptions[id];\n if (sub.subscriptionId === res.subscription) {\n const {result} = res;\n const {value, context} = result;\n\n assert(value.account.data[1] === 'base64');\n sub.callback(\n {\n accountId: value.pubkey,\n accountInfo: {\n executable: value.account.executable,\n owner: new PublicKey(value.account.owner),\n lamports: value.account.lamports,\n data: Buffer.from(value.account.data[0], 'base64'),\n },\n },\n context,\n );\n return true;\n }\n }\n }\n\n /**\n * Register a callback to be invoked whenever accounts owned by the\n * specified program change\n *\n * @param programId Public key of the program to monitor\n * @param callback Function to invoke whenever the account is changed\n * @param commitment Specify the commitment level account changes must reach before notification\n * @return subscription id\n */\n onProgramAccountChange(\n programId: PublicKey,\n callback: ProgramAccountChangeCallback,\n commitment: ?Commitment,\n ): number {\n const id = ++this._programAccountChangeSubscriptionCounter;\n this._programAccountChangeSubscriptions[id] = {\n programId: programId.toBase58(),\n callback,\n commitment,\n subscriptionId: null,\n };\n this._updateSubscriptions();\n return id;\n }\n\n /**\n * Deregister an account notification callback\n *\n * @param id subscription id to deregister\n */\n async removeProgramAccountChangeListener(id: number): Promise {\n if (this._programAccountChangeSubscriptions[id]) {\n const subInfo = this._programAccountChangeSubscriptions[id];\n delete this._programAccountChangeSubscriptions[id];\n await this._unsubscribe(subInfo, 'programUnsubscribe');\n this._updateSubscriptions();\n } else {\n throw new Error(`Unknown program account change id: ${id}`);\n }\n }\n\n /**\n * @private\n */\n _wsOnSlotNotification(notification: Object) {\n const res = SlotNotificationResult(notification);\n if (res.error) {\n throw new Error('slot notification failed: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n const {parent, slot, root} = res.result;\n const keys = Object.keys(this._slotSubscriptions).map(Number);\n for (let id of keys) {\n const sub = this._slotSubscriptions[id];\n if (sub.subscriptionId === res.subscription) {\n sub.callback({\n parent,\n slot,\n root,\n });\n return true;\n }\n }\n }\n\n /**\n * Register a callback to be invoked upon slot changes\n *\n * @param callback Function to invoke whenever the slot changes\n * @return subscription id\n */\n onSlotChange(callback: SlotChangeCallback): number {\n const id = ++this._slotSubscriptionCounter;\n this._slotSubscriptions[id] = {\n callback,\n subscriptionId: null,\n };\n this._updateSubscriptions();\n return id;\n }\n\n /**\n * Deregister a slot notification callback\n *\n * @param id subscription id to deregister\n */\n async removeSlotChangeListener(id: number): Promise {\n if (this._slotSubscriptions[id]) {\n const subInfo = this._slotSubscriptions[id];\n delete this._slotSubscriptions[id];\n await this._unsubscribe(subInfo, 'slotUnsubscribe');\n this._updateSubscriptions();\n } else {\n throw new Error(`Unknown slot change id: ${id}`);\n }\n }\n\n _buildArgs(\n args: Array,\n override: ?Commitment,\n encoding?: 'jsonParsed' | 'base64',\n ): Array {\n const commitment = override || this._commitment;\n if (commitment || encoding) {\n let options: any = {};\n if (encoding) {\n options.encoding = encoding;\n }\n if (commitment) {\n options.commitment = commitment;\n }\n args.push(options);\n }\n return args;\n }\n\n /**\n * @private\n */\n _wsOnSignatureNotification(notification: Object) {\n const res = SignatureNotificationResult(notification);\n if (res.error) {\n throw new Error('signature notification failed: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n const keys = Object.keys(this._signatureSubscriptions).map(Number);\n for (let id of keys) {\n const sub = this._signatureSubscriptions[id];\n if (sub.subscriptionId === res.subscription) {\n // Signatures subscriptions are auto-removed by the RPC service so\n // no need to explicitly send an unsubscribe message\n delete this._signatureSubscriptions[id];\n this._updateSubscriptions();\n sub.callback(res.result.value, res.result.context);\n return;\n }\n }\n }\n\n /**\n * Register a callback to be invoked upon signature updates\n *\n * @param signature Transaction signature string in base 58\n * @param callback Function to invoke on signature notifications\n * @param commitment Specify the commitment level signature must reach before notification\n * @return subscription id\n */\n onSignature(\n signature: TransactionSignature,\n callback: SignatureResultCallback,\n commitment: ?Commitment,\n ): number {\n const id = ++this._signatureSubscriptionCounter;\n this._signatureSubscriptions[id] = {\n signature,\n callback,\n commitment,\n subscriptionId: null,\n };\n this._updateSubscriptions();\n return id;\n }\n\n /**\n * Deregister a signature notification callback\n *\n * @param id subscription id to deregister\n */\n async removeSignatureListener(id: number): Promise {\n if (this._signatureSubscriptions[id]) {\n const subInfo = this._signatureSubscriptions[id];\n delete this._signatureSubscriptions[id];\n await this._unsubscribe(subInfo, 'signatureUnsubscribe');\n this._updateSubscriptions();\n } else {\n throw new Error(`Unknown signature result id: ${id}`);\n }\n }\n\n /**\n * @private\n */\n _wsOnRootNotification(notification: Object) {\n const res = RootNotificationResult(notification);\n if (res.error) {\n throw new Error('root notification failed: ' + res.error.message);\n }\n assert(typeof res.result !== 'undefined');\n const root = res.result;\n const keys = Object.keys(this._rootSubscriptions).map(Number);\n for (let id of keys) {\n const sub = this._rootSubscriptions[id];\n if (sub.subscriptionId === res.subscription) {\n sub.callback(root);\n return true;\n }\n }\n }\n\n /**\n * Register a callback to be invoked upon root changes\n *\n * @param callback Function to invoke whenever the root changes\n * @return subscription id\n */\n onRootChange(callback: RootChangeCallback): number {\n const id = ++this._rootSubscriptionCounter;\n this._rootSubscriptions[id] = {\n callback,\n subscriptionId: null,\n };\n this._updateSubscriptions();\n return id;\n }\n\n /**\n * Deregister a root notification callback\n *\n * @param id subscription id to deregister\n */\n async removeRootChangeListener(id: number): Promise {\n if (this._rootSubscriptions[id]) {\n const subInfo = this._rootSubscriptions[id];\n delete this._rootSubscriptions[id];\n await this._unsubscribe(subInfo, 'rootUnsubscribe');\n this._updateSubscriptions();\n } else {\n throw new Error(`Unknown root change id: ${id}`);\n }\n }\n}\n","// @flow\n\nimport {Connection} from '../connection';\nimport {Transaction} from '../transaction';\nimport type {Account} from '../account';\nimport type {ConfirmOptions} from '../connection';\nimport type {TransactionSignature} from '../transaction';\n\n/**\n * Sign, send and confirm a transaction.\n *\n * If `confirmations` count is not specified, wait for transaction to be finalized.\n *\n * @param {Connection} connection\n * @param {Transaction} transaction\n * @param {Array} signers\n * @param {ConfirmOptions} [options]\n * @returns {Promise}\n */\nexport async function sendAndConfirmTransaction(\n connection: Connection,\n transaction: Transaction,\n signers: Array,\n options?: ConfirmOptions,\n): Promise {\n const start = Date.now();\n const signature = await connection.sendTransaction(\n transaction,\n signers,\n options,\n );\n const status = (\n await connection.confirmTransaction(\n signature,\n options && options.confirmations,\n )\n ).value;\n\n if (status) {\n if (status.err) {\n throw new Error(\n `Transaction ${signature} failed (${JSON.stringify(status)})`,\n );\n }\n return signature;\n }\n\n const duration = (Date.now() - start) / 1000;\n throw new Error(\n `Transaction was not confirmed in ${duration.toFixed(\n 2,\n )} seconds (${JSON.stringify(status)})`,\n );\n}\n","// @flow\n\nimport * as BufferLayout from 'buffer-layout';\n\nimport * as Layout from './layout';\n\n/**\n * @typedef {Object} InstructionType\n * @property (index} The Instruction index (from solana upstream program)\n * @property (BufferLayout} The BufferLayout to use to build data\n */\nexport type InstructionType = {|\n index: number,\n layout: typeof BufferLayout,\n|};\n\n/**\n * Populate a buffer of instruction data using an InstructionType\n */\nexport function encodeData(type: InstructionType, fields: Object): Buffer {\n const allocLength =\n type.layout.span >= 0 ? type.layout.span : Layout.getAlloc(type, fields);\n const data = Buffer.alloc(allocLength);\n const layoutFields = Object.assign({instruction: type.index}, fields);\n type.layout.encode(layoutFields, data);\n return data;\n}\n\n/**\n * Decode instruction data buffer using an InstructionType\n */\nexport function decodeData(type: InstructionType, buffer: Buffer): Object {\n let data;\n try {\n data = type.layout.decode(buffer);\n } catch (err) {\n throw new Error('invalid instruction; ' + err);\n }\n\n if (data.instruction !== type.index) {\n throw new Error(\n `invalid instruction; instruction index mismatch ${data.instruction} != ${type.index}`,\n );\n }\n\n return data;\n}\n","// @flow\n\nimport * as BufferLayout from 'buffer-layout';\n\nimport {encodeData, decodeData} from './instruction';\nimport * as Layout from './layout';\nimport {NONCE_ACCOUNT_LENGTH} from './nonce-account';\nimport {PublicKey} from './publickey';\nimport {SYSVAR_RECENT_BLOCKHASHES_PUBKEY, SYSVAR_RENT_PUBKEY} from './sysvar';\nimport {Transaction, TransactionInstruction} from './transaction';\n\n/**\n * Create account system transaction params\n * @typedef {Object} CreateAccountParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} newAccountPubkey\n * @property {number} lamports\n * @property {number} space\n * @property {PublicKey} programId\n */\nexport type CreateAccountParams = {|\n fromPubkey: PublicKey,\n newAccountPubkey: PublicKey,\n lamports: number,\n space: number,\n programId: PublicKey,\n|};\n\n/**\n * Transfer system transaction params\n * @typedef {Object} TransferParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} toPubkey\n * @property {number} lamports\n */\nexport type TransferParams = {|\n fromPubkey: PublicKey,\n toPubkey: PublicKey,\n lamports: number,\n|};\n\n/**\n * Assign system transaction params\n * @typedef {Object} AssignParams\n * @property {PublicKey} accountPubkey\n * @property {PublicKey} programId\n */\nexport type AssignParams = {|\n accountPubkey: PublicKey,\n programId: PublicKey,\n|};\n\n/**\n * Create account with seed system transaction params\n * @typedef {Object} CreateAccountWithSeedParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} newAccountPubkey\n * @property {PublicKey} basePubkey\n * @property {string} seed\n * @property {number} lamports\n * @property {number} space\n * @property {PublicKey} programId\n */\nexport type CreateAccountWithSeedParams = {|\n fromPubkey: PublicKey,\n newAccountPubkey: PublicKey,\n basePubkey: PublicKey,\n seed: string,\n lamports: number,\n space: number,\n programId: PublicKey,\n|};\n\n/**\n * Create nonce account system transaction params\n * @typedef {Object} CreateNonceAccountParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} noncePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {number} lamports\n */\nexport type CreateNonceAccountParams = {|\n fromPubkey: PublicKey,\n noncePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n lamports: number,\n|};\n\n/**\n * Create nonce account with seed system transaction params\n * @typedef {Object} CreateNonceAccountWithSeedParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} noncePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {PublicKey} basePubkey\n * @property {string} seed\n * @property {number} lamports\n */\nexport type CreateNonceAccountWithSeedParams = {|\n fromPubkey: PublicKey,\n noncePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n lamports: number,\n basePubkey: PublicKey,\n seed: string,\n|};\n\n/**\n * Initialize nonce account system instruction params\n * @typedef {Object} InitializeNonceParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} programId\n */\nexport type InitializeNonceParams = {|\n noncePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n|};\n\n/**\n * Advance nonce account system instruction params\n * @typedef {Object} AdvanceNonceParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} programId\n */\nexport type AdvanceNonceParams = {|\n noncePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n|};\n\n/**\n * Withdraw nonce account system transaction params\n * @typedef {Object} WithdrawNonceParams\n * @property {PublicKey} noncePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {PublicKey} toPubkey\n * @property {number} lamports\n */\nexport type WithdrawNonceParams = {|\n noncePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n toPubkey: PublicKey,\n lamports: number,\n|};\n\n/**\n * Authorize nonce account system transaction params\n * @typedef {Object} AuthorizeNonceParams\n * @property {PublicKey} noncePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {PublicKey} newAuthorizedPubkey\n */\nexport type AuthorizeNonceParams = {|\n noncePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n newAuthorizedPubkey: PublicKey,\n|};\n\n/**\n * Allocate account system transaction params\n * @typedef {Object} AllocateParams\n * @property {PublicKey} accountPubkey\n * @property {number} space\n */\nexport type AllocateParams = {|\n accountPubkey: PublicKey,\n space: number,\n|};\n\n/**\n * Allocate account with seed system transaction params\n * @typedef {Object} AllocateWithSeedParams\n * @property {PublicKey} accountPubkey\n * @property {PublicKey} basePubkey\n * @property {string} seed\n * @property {number} space\n * @property {PublicKey} programId\n */\nexport type AllocateWithSeedParams = {|\n accountPubkey: PublicKey,\n basePubkey: PublicKey,\n seed: string,\n space: number,\n programId: PublicKey,\n|};\n\n/**\n * Assign account with seed system transaction params\n * @typedef {Object} AssignWithSeedParams\n * @property {PublicKey} accountPubkey\n * @property {PublicKey} basePubkey\n * @property {string} seed\n * @property {PublicKey} programId\n */\nexport type AssignWithSeedParams = {|\n accountPubkey: PublicKey,\n basePubkey: PublicKey,\n seed: string,\n programId: PublicKey,\n|};\n\n/**\n * System Instruction class\n */\nexport class SystemInstruction {\n /**\n * Decode a system instruction and retrieve the instruction type.\n */\n static decodeInstructionType(\n instruction: TransactionInstruction,\n ): SystemInstructionType {\n this.checkProgramId(instruction.programId);\n\n const instructionTypeLayout = BufferLayout.u32('instruction');\n const typeIndex = instructionTypeLayout.decode(instruction.data);\n\n let type;\n for (const t of Object.keys(SYSTEM_INSTRUCTION_LAYOUTS)) {\n if (SYSTEM_INSTRUCTION_LAYOUTS[t].index == typeIndex) {\n type = t;\n }\n }\n\n if (!type) {\n throw new Error('Instruction type incorrect; not a SystemInstruction');\n }\n\n return type;\n }\n\n /**\n * Decode a create account system instruction and retrieve the instruction params.\n */\n static decodeCreateAccount(\n instruction: TransactionInstruction,\n ): CreateAccountParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {lamports, space, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Create,\n instruction.data,\n );\n\n return {\n fromPubkey: instruction.keys[0].pubkey,\n newAccountPubkey: instruction.keys[1].pubkey,\n lamports,\n space,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode a transfer system instruction and retrieve the instruction params.\n */\n static decodeTransfer(instruction: TransactionInstruction): TransferParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {lamports} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Transfer,\n instruction.data,\n );\n\n return {\n fromPubkey: instruction.keys[0].pubkey,\n toPubkey: instruction.keys[1].pubkey,\n lamports,\n };\n }\n\n /**\n * Decode an allocate system instruction and retrieve the instruction params.\n */\n static decodeAllocate(instruction: TransactionInstruction): AllocateParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {space} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Allocate,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n space,\n };\n }\n\n /**\n * Decode an allocate with seed system instruction and retrieve the instruction params.\n */\n static decodeAllocateWithSeed(\n instruction: TransactionInstruction,\n ): AllocateWithSeedParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {base, seed, space, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AllocateWithSeed,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n basePubkey: new PublicKey(base),\n seed,\n space,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode an assign system instruction and retrieve the instruction params.\n */\n static decodeAssign(instruction: TransactionInstruction): AssignParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.Assign,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode an assign with seed system instruction and retrieve the instruction params.\n */\n static decodeAssignWithSeed(\n instruction: TransactionInstruction,\n ): AssignWithSeedParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 1);\n\n const {base, seed, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AssignWithSeed,\n instruction.data,\n );\n\n return {\n accountPubkey: instruction.keys[0].pubkey,\n basePubkey: new PublicKey(base),\n seed,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode a create account with seed system instruction and retrieve the instruction params.\n */\n static decodeCreateWithSeed(\n instruction: TransactionInstruction,\n ): CreateAccountWithSeedParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {base, seed, lamports, space, programId} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.CreateWithSeed,\n instruction.data,\n );\n\n return {\n fromPubkey: instruction.keys[0].pubkey,\n newAccountPubkey: instruction.keys[1].pubkey,\n basePubkey: new PublicKey(base),\n seed,\n lamports,\n space,\n programId: new PublicKey(programId),\n };\n }\n\n /**\n * Decode a nonce initialize system instruction and retrieve the instruction params.\n */\n static decodeNonceInitialize(\n instruction: TransactionInstruction,\n ): InitializeNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n const {authorized} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.InitializeNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: new PublicKey(authorized),\n };\n }\n\n /**\n * Decode a nonce advance system instruction and retrieve the instruction params.\n */\n static decodeNonceAdvance(\n instruction: TransactionInstruction,\n ): AdvanceNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n\n decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AdvanceNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n };\n }\n\n /**\n * Decode a nonce withdraw system instruction and retrieve the instruction params.\n */\n static decodeNonceWithdraw(\n instruction: TransactionInstruction,\n ): WithdrawNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 5);\n\n const {lamports} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.WithdrawNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n toPubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[4].pubkey,\n lamports,\n };\n }\n\n /**\n * Decode a nonce authorize system instruction and retrieve the instruction params.\n */\n static decodeNonceAuthorize(\n instruction: TransactionInstruction,\n ): AuthorizeNonceParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {authorized} = decodeData(\n SYSTEM_INSTRUCTION_LAYOUTS.AuthorizeNonceAccount,\n instruction.data,\n );\n\n return {\n noncePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[1].pubkey,\n newAuthorizedPubkey: new PublicKey(authorized),\n };\n }\n\n /**\n * @private\n */\n static checkProgramId(programId: PublicKey) {\n if (!programId.equals(SystemProgram.programId)) {\n throw new Error('invalid instruction; programId is not SystemProgram');\n }\n }\n\n /**\n * @private\n */\n static checkKeyLength(keys: Array, expectedLength: number) {\n if (keys.length < expectedLength) {\n throw new Error(\n `invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`,\n );\n }\n }\n}\n\n/**\n * An enumeration of valid SystemInstructionType's\n * @typedef {'Create' | 'Assign' | 'Transfer' | 'CreateWithSeed'\n | 'AdvanceNonceAccount' | 'WithdrawNonceAccount' | 'InitializeNonceAccount'\n | 'AuthorizeNonceAccount'} SystemInstructionType\n */\nexport type SystemInstructionType = $Keys;\n\n/**\n * An enumeration of valid system InstructionType's\n */\nexport const SYSTEM_INSTRUCTION_LAYOUTS = Object.freeze({\n Create: {\n index: 0,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n BufferLayout.ns64('space'),\n Layout.publicKey('programId'),\n ]),\n },\n Assign: {\n index: 1,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('programId'),\n ]),\n },\n Transfer: {\n index: 2,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n ]),\n },\n CreateWithSeed: {\n index: 3,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('base'),\n Layout.rustString('seed'),\n BufferLayout.ns64('lamports'),\n BufferLayout.ns64('space'),\n Layout.publicKey('programId'),\n ]),\n },\n AdvanceNonceAccount: {\n index: 4,\n layout: BufferLayout.struct([BufferLayout.u32('instruction')]),\n },\n WithdrawNonceAccount: {\n index: 5,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n ]),\n },\n InitializeNonceAccount: {\n index: 6,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('authorized'),\n ]),\n },\n AuthorizeNonceAccount: {\n index: 7,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('authorized'),\n ]),\n },\n Allocate: {\n index: 8,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('space'),\n ]),\n },\n AllocateWithSeed: {\n index: 9,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('base'),\n Layout.rustString('seed'),\n BufferLayout.ns64('space'),\n Layout.publicKey('programId'),\n ]),\n },\n AssignWithSeed: {\n index: 10,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('base'),\n Layout.rustString('seed'),\n Layout.publicKey('programId'),\n ]),\n },\n});\n\n/**\n * Factory class for transactions to interact with the System program\n */\nexport class SystemProgram {\n /**\n * Public key that identifies the System program\n */\n static get programId(): PublicKey {\n return new PublicKey('11111111111111111111111111111111');\n }\n\n /**\n * Generate a Transaction that creates a new account\n */\n static createAccount(params: CreateAccountParams): Transaction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Create;\n const data = encodeData(type, {\n lamports: params.lamports,\n space: params.space,\n programId: params.programId.toBuffer(),\n });\n\n return new Transaction().add({\n keys: [\n {pubkey: params.fromPubkey, isSigner: true, isWritable: true},\n {pubkey: params.newAccountPubkey, isSigner: true, isWritable: true},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that transfers lamports from one account to another\n */\n static transfer(params: TransferParams): Transaction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Transfer;\n const data = encodeData(type, {lamports: params.lamports});\n\n return new Transaction().add({\n keys: [\n {pubkey: params.fromPubkey, isSigner: true, isWritable: true},\n {pubkey: params.toPubkey, isSigner: false, isWritable: true},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that assigns an account to a program\n */\n static assign(params: AssignParams | AssignWithSeedParams): Transaction {\n let data;\n if (params.basePubkey) {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AssignWithSeed;\n data = encodeData(type, {\n base: params.basePubkey.toBuffer(),\n seed: params.seed,\n programId: params.programId.toBuffer(),\n });\n } else {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Assign;\n data = encodeData(type, {programId: params.programId.toBuffer()});\n }\n\n return new Transaction().add({\n keys: [{pubkey: params.accountPubkey, isSigner: true, isWritable: true}],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that creates a new account at\n * an address generated with `from`, a seed, and programId\n */\n static createAccountWithSeed(\n params: CreateAccountWithSeedParams,\n ): Transaction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.CreateWithSeed;\n const data = encodeData(type, {\n base: params.basePubkey.toBuffer(),\n seed: params.seed,\n lamports: params.lamports,\n space: params.space,\n programId: params.programId.toBuffer(),\n });\n\n return new Transaction().add({\n keys: [\n {pubkey: params.fromPubkey, isSigner: true, isWritable: true},\n {pubkey: params.newAccountPubkey, isSigner: false, isWritable: true},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that creates a new Nonce account\n */\n static createNonceAccount(\n params: CreateNonceAccountParams | CreateNonceAccountWithSeedParams,\n ): Transaction {\n let transaction;\n if (params.basePubkey && params.seed) {\n transaction = SystemProgram.createAccountWithSeed({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.noncePubkey,\n basePubkey: params.basePubkey,\n seed: params.seed,\n lamports: params.lamports,\n space: NONCE_ACCOUNT_LENGTH,\n programId: this.programId,\n });\n } else {\n transaction = SystemProgram.createAccount({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.noncePubkey,\n lamports: params.lamports,\n space: NONCE_ACCOUNT_LENGTH,\n programId: this.programId,\n });\n }\n\n const initParams = {\n noncePubkey: params.noncePubkey,\n authorizedPubkey: params.authorizedPubkey,\n };\n\n transaction.add(this.nonceInitialize(initParams));\n return transaction;\n }\n\n /**\n * Generate an instruction to initialize a Nonce account\n */\n static nonceInitialize(\n params: InitializeNonceParams,\n ): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.InitializeNonceAccount;\n const data = encodeData(type, {\n authorized: params.authorizedPubkey.toBuffer(),\n });\n const instructionData = {\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {\n pubkey: SYSVAR_RECENT_BLOCKHASHES_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false},\n ],\n programId: this.programId,\n data,\n };\n return new TransactionInstruction(instructionData);\n }\n\n /**\n * Generate an instruction to advance the nonce in a Nonce account\n */\n static nonceAdvance(params: AdvanceNonceParams): TransactionInstruction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AdvanceNonceAccount;\n const data = encodeData(type);\n const instructionData = {\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {\n pubkey: SYSVAR_RECENT_BLOCKHASHES_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: params.authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n };\n return new TransactionInstruction(instructionData);\n }\n\n /**\n * Generate a Transaction that withdraws lamports from a Nonce account\n */\n static nonceWithdraw(params: WithdrawNonceParams): Transaction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.WithdrawNonceAccount;\n const data = encodeData(type, {lamports: params.lamports});\n\n return new Transaction().add({\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {pubkey: params.toPubkey, isSigner: false, isWritable: true},\n {\n pubkey: SYSVAR_RECENT_BLOCKHASHES_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {\n pubkey: SYSVAR_RENT_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: params.authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that authorizes a new PublicKey as the authority\n * on a Nonce account.\n */\n static nonceAuthorize(params: AuthorizeNonceParams): Transaction {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AuthorizeNonceAccount;\n const data = encodeData(type, {\n authorized: params.newAuthorizedPubkey.toBuffer(),\n });\n\n return new Transaction().add({\n keys: [\n {pubkey: params.noncePubkey, isSigner: false, isWritable: true},\n {pubkey: params.authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that allocates space in an account without funding\n */\n static allocate(\n params: AllocateParams | AllocateWithSeedParams,\n ): Transaction {\n let data;\n if (params.basePubkey) {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.AllocateWithSeed;\n data = encodeData(type, {\n base: params.basePubkey.toBuffer(),\n seed: params.seed,\n space: params.space,\n programId: params.programId.toBuffer(),\n });\n } else {\n const type = SYSTEM_INSTRUCTION_LAYOUTS.Allocate;\n data = encodeData(type, {\n space: params.space,\n });\n }\n\n return new Transaction().add({\n keys: [{pubkey: params.accountPubkey, isSigner: true, isWritable: true}],\n programId: this.programId,\n data,\n });\n }\n}\n","// @flow\n\nimport * as BufferLayout from 'buffer-layout';\n\nimport {Account} from './account';\nimport {PublicKey} from './publickey';\nimport {NUM_TICKS_PER_SECOND} from './timing';\nimport {Transaction, PACKET_DATA_SIZE} from './transaction';\nimport {SYSVAR_RENT_PUBKEY} from './sysvar';\nimport {sendAndConfirmTransaction} from './util/send-and-confirm-transaction';\nimport {sleep} from './util/sleep';\nimport type {Connection} from './connection';\nimport {SystemProgram} from './system-program';\n\n/**\n * Program loader interface\n */\nexport class Loader {\n /**\n * Amount of program data placed in each load Transaction\n */\n static get chunkSize(): number {\n // Keep program chunks under PACKET_DATA_SIZE, leaving enough room for the\n // rest of the Transaction fields\n //\n // TODO: replace 300 with a proper constant for the size of the other\n // Transaction fields\n return PACKET_DATA_SIZE - 300;\n }\n\n /**\n * Minimum number of signatures required to load a program not including\n * retries\n *\n * Can be used to calculate transaction fees\n */\n static getMinNumSignatures(dataLength: number): number {\n return Math.ceil(dataLength / Loader.chunkSize);\n }\n\n /**\n * Loads a generic program\n *\n * @param connection The connection to use\n * @param payer System account that pays to load the program\n * @param program Account to load the program into\n * @param programId Public key that identifies the loader\n * @param data Program octets\n */\n static async load(\n connection: Connection,\n payer: Account,\n program: Account,\n programId: PublicKey,\n data: Buffer | Uint8Array | Array,\n ): Promise {\n {\n const balanceNeeded = await connection.getMinimumBalanceForRentExemption(\n data.length,\n );\n const transaction = SystemProgram.createAccount({\n fromPubkey: payer.publicKey,\n newAccountPubkey: program.publicKey,\n lamports: balanceNeeded > 0 ? balanceNeeded : 1,\n space: data.length,\n programId,\n });\n await sendAndConfirmTransaction(\n connection,\n transaction,\n [payer, program],\n {\n confirmations: 1,\n skipPreflight: true,\n },\n );\n }\n\n const dataLayout = BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.u32('offset'),\n BufferLayout.u32('bytesLength'),\n BufferLayout.u32('bytesLengthPadding'),\n BufferLayout.seq(\n BufferLayout.u8('byte'),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'bytes',\n ),\n ]);\n\n const chunkSize = Loader.chunkSize;\n let offset = 0;\n let array = data;\n let transactions = [];\n while (array.length > 0) {\n const bytes = array.slice(0, chunkSize);\n const data = Buffer.alloc(chunkSize + 16);\n dataLayout.encode(\n {\n instruction: 0, // Load instruction\n offset,\n bytes,\n },\n data,\n );\n\n const transaction = new Transaction().add({\n keys: [{pubkey: program.publicKey, isSigner: true, isWritable: true}],\n programId,\n data,\n });\n transactions.push(\n sendAndConfirmTransaction(connection, transaction, [payer, program], {\n confirmations: 1,\n skipPreflight: true,\n }),\n );\n\n // Delay ~1 tick between write transactions in an attempt to reduce AccountInUse errors\n // since all the write transactions modify the same program account\n await sleep(1000 / NUM_TICKS_PER_SECOND);\n\n // Run up to 8 Loads in parallel to prevent too many parallel transactions from\n // getting rejected with AccountInUse.\n //\n // TODO: 8 was selected empirically and should probably be revisited\n if (transactions.length === 8) {\n await Promise.all(transactions);\n transactions = [];\n }\n\n offset += chunkSize;\n array = array.slice(chunkSize);\n }\n await Promise.all(transactions);\n\n // Finalize the account loaded with program data for execution\n {\n const dataLayout = BufferLayout.struct([BufferLayout.u32('instruction')]);\n\n const data = Buffer.alloc(dataLayout.span);\n dataLayout.encode(\n {\n instruction: 1, // Finalize instruction\n },\n data,\n );\n\n const transaction = new Transaction().add({\n keys: [\n {pubkey: program.publicKey, isSigner: true, isWritable: true},\n {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false},\n ],\n programId,\n data,\n });\n await sendAndConfirmTransaction(\n connection,\n transaction,\n [payer, program],\n {\n confirmations: 1,\n skipPreflight: true,\n },\n );\n }\n }\n}\n","// @flow\n\nimport {Account} from './account';\nimport {PublicKey} from './publickey';\nimport {Loader} from './loader';\nimport type {Connection} from './connection';\n\n/**\n * Factory class for transactions to interact with a program loader\n */\nexport class BpfLoader {\n /**\n * Public key that identifies the BpfLoader\n */\n static programId(version: number = 2): PublicKey {\n if (version === 1) {\n return new PublicKey('BPFLoader1111111111111111111111111111111111');\n } else {\n return new PublicKey('BPFLoader2111111111111111111111111111111111');\n }\n }\n\n /**\n * Minimum number of signatures required to load a program not including\n * retries\n *\n * Can be used to calculate transaction fees\n */\n static getMinNumSignatures(dataLength: number): number {\n return Loader.getMinNumSignatures(dataLength);\n }\n\n /**\n * Load a BPF program\n *\n * @param connection The connection to use\n * @param payer Account that will pay program loading fees\n * @param program Account to load the program into\n * @param elf The entire ELF containing the BPF program\n * @param version The version of the BPF loader to use\n */\n static load(\n connection: Connection,\n payer: Account,\n program: Account,\n elf: Buffer | Uint8Array | Array,\n version: number = 2,\n ): Promise {\n return Loader.load(\n connection,\n payer,\n program,\n BpfLoader.programId(version),\n elf,\n );\n }\n}\n","// @flow\n\nimport * as BufferLayout from 'buffer-layout';\n\nimport {encodeData, decodeData} from './instruction';\nimport * as Layout from './layout';\nimport {PublicKey} from './publickey';\nimport {SystemProgram} from './system-program';\nimport {\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_STAKE_HISTORY_PUBKEY,\n} from './sysvar';\nimport {Transaction, TransactionInstruction} from './transaction';\n\nexport const STAKE_CONFIG_ID = new PublicKey(\n 'StakeConfig11111111111111111111111111111111',\n);\n\nexport class Authorized {\n staker: PublicKey;\n withdrawer: PublicKey;\n\n /**\n * Create a new Authorized object\n */\n constructor(staker: PublicKey, withdrawer: PublicKey) {\n this.staker = staker;\n this.withdrawer = withdrawer;\n }\n}\n\nexport class Lockup {\n unixTimestamp: number;\n epoch: number;\n custodian: PublicKey;\n\n /**\n * Create a new Lockup object\n */\n constructor(unixTimestamp: number, epoch: number, custodian: PublicKey) {\n this.unixTimestamp = unixTimestamp;\n this.epoch = epoch;\n this.custodian = custodian;\n }\n}\n\n/**\n * Create stake account transaction params\n * @typedef {Object} CreateStakeAccountParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} stakePubkey\n * @property {Authorized} authorized\n * @property {Lockup} lockup\n * @property {number} lamports\n */\nexport type CreateStakeAccountParams = {|\n fromPubkey: PublicKey,\n stakePubkey: PublicKey,\n authorized: Authorized,\n lockup: Lockup,\n lamports: number,\n|};\n\n/**\n * Create stake account with seed transaction params\n * @typedef {Object} CreateStakeAccountWithSeedParams\n * @property {PublicKey} fromPubkey\n * @property {PublicKey} stakePubkey\n * @property {PublicKey} basePubkey\n * @property {string} seed\n * @property {Authorized} authorized\n * @property {Lockup} lockup\n * @property {number} lamports\n */\nexport type CreateStakeAccountWithSeedParams = {|\n fromPubkey: PublicKey,\n stakePubkey: PublicKey,\n basePubkey: PublicKey,\n seed: string,\n authorized: Authorized,\n lockup: Lockup,\n lamports: number,\n|};\n\n/**\n * Initialize stake instruction params\n * @typedef {Object} InitializeStakeParams\n * @property {PublicKey} stakePubkey\n * @property {Authorized} authorized\n * @property {Lockup} lockup\n */\nexport type InitializeStakeParams = {|\n stakePubkey: PublicKey,\n authorized: Authorized,\n lockup: Lockup,\n|};\n\n/**\n * Delegate stake instruction params\n * @typedef {Object} DelegateStakeParams\n * @property {PublicKey} stakePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {PublicKey} votePubkey\n */\nexport type DelegateStakeParams = {|\n stakePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n votePubkey: PublicKey,\n|};\n\n/**\n * Authorize stake instruction params\n * @typedef {Object} AuthorizeStakeParams\n * @property {PublicKey} stakePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {PublicKey} newAuthorizedPubkey\n * @property {StakeAuthorizationType} stakeAuthorizationType\n */\nexport type AuthorizeStakeParams = {|\n stakePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n newAuthorizedPubkey: PublicKey,\n stakeAuthorizationType: StakeAuthorizationType,\n|};\n\n/**\n * Authorize stake instruction params using a derived key\n * @typedef {Object} AuthorizeWithSeedStakeParams\n * @property {PublicKey} stakePubkey\n * @property {PublicKey} authorityBase\n * @property {string} authoritySeed\n * @property {PublicKey} authorityOwner\n * @property {PublicKey} newAuthorizedPubkey\n * @property {StakeAuthorizationType} stakeAuthorizationType\n */\nexport type AuthorizeWithSeedStakeParams = {|\n stakePubkey: PublicKey,\n authorityBase: PublicKey,\n authoritySeed: string,\n authorityOwner: PublicKey,\n newAuthorizedPubkey: PublicKey,\n stakeAuthorizationType: StakeAuthorizationType,\n|};\n\n/**\n * Split stake instruction params\n * @typedef {Object} SplitStakeParams\n * @property {PublicKey} stakePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {PublicKey} splitStakePubkey\n * @property {number} lamports\n */\nexport type SplitStakeParams = {|\n stakePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n splitStakePubkey: PublicKey,\n lamports: number,\n|};\n\n/**\n * Withdraw stake instruction params\n * @typedef {Object} WithdrawStakeParams\n * @property {PublicKey} stakePubkey\n * @property {PublicKey} authorizedPubkey\n * @property {PublicKey} toPubkey\n * @property {number} lamports\n */\nexport type WithdrawStakeParams = {|\n stakePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n toPubkey: PublicKey,\n lamports: number,\n|};\n\n/**\n * Deactivate stake instruction params\n * @typedef {Object} DeactivateStakeParams\n * @property {PublicKey} stakePubkey\n * @property {PublicKey} authorizedPubkey\n */\nexport type DeactivateStakeParams = {|\n stakePubkey: PublicKey,\n authorizedPubkey: PublicKey,\n|};\n\n/**\n * Stake Instruction class\n */\nexport class StakeInstruction {\n /**\n * Decode a stake instruction and retrieve the instruction type.\n */\n static decodeInstructionType(\n instruction: TransactionInstruction,\n ): StakeInstructionType {\n this.checkProgramId(instruction.programId);\n\n const instructionTypeLayout = BufferLayout.u32('instruction');\n const typeIndex = instructionTypeLayout.decode(instruction.data);\n\n let type;\n for (const t of Object.keys(STAKE_INSTRUCTION_LAYOUTS)) {\n if (STAKE_INSTRUCTION_LAYOUTS[t].index == typeIndex) {\n type = t;\n }\n }\n\n if (!type) {\n throw new Error('Instruction type incorrect; not a StakeInstruction');\n }\n\n return type;\n }\n\n /**\n * Decode a initialize stake instruction and retrieve the instruction params.\n */\n static decodeInitialize(\n instruction: TransactionInstruction,\n ): InitializeStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n\n const {authorized, lockup} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Initialize,\n instruction.data,\n );\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n authorized: new Authorized(\n new PublicKey(authorized.staker),\n new PublicKey(authorized.withdrawer),\n ),\n lockup: new Lockup(\n lockup.unixTimestamp,\n lockup.epoch,\n new PublicKey(lockup.custodian),\n ),\n };\n }\n\n /**\n * Decode a delegate stake instruction and retrieve the instruction params.\n */\n static decodeDelegate(\n instruction: TransactionInstruction,\n ): DelegateStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 6);\n decodeData(STAKE_INSTRUCTION_LAYOUTS.Delegate, instruction.data);\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n votePubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[5].pubkey,\n };\n }\n\n /**\n * Decode an authorize stake instruction and retrieve the instruction params.\n */\n static decodeAuthorize(\n instruction: TransactionInstruction,\n ): AuthorizeStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n const {newAuthorized, stakeAuthorizationType} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Authorize,\n instruction.data,\n );\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n newAuthorizedPubkey: new PublicKey(newAuthorized),\n stakeAuthorizationType: {\n index: stakeAuthorizationType,\n },\n };\n }\n\n /**\n * Decode an authorize-with-seed stake instruction and retrieve the instruction params.\n */\n static decodeAuthorizeWithSeed(\n instruction: TransactionInstruction,\n ): AuthorizeWithSeedStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 2);\n const {newAuthorized, stakeAuthorizationType, authoritySeed, authorityOwner} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed,\n instruction.data,\n );\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n authorityBase: instruction.keys[1].pubkey,\n authoritySeed: authoritySeed,\n authorityOwner: new PublicKey(authorityOwner),\n newAuthorizedPubkey: new PublicKey(newAuthorized),\n stakeAuthorizationType: {\n index: stakeAuthorizationType,\n },\n };\n }\n\n /**\n * Decode a split stake instruction and retrieve the instruction params.\n */\n static decodeSplit(instruction: TransactionInstruction): SplitStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n const {lamports} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Split,\n instruction.data,\n );\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n splitStakePubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n lamports,\n };\n }\n\n /**\n * Decode a withdraw stake instruction and retrieve the instruction params.\n */\n static decodeWithdraw(\n instruction: TransactionInstruction,\n ): WithdrawStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 5);\n const {lamports} = decodeData(\n STAKE_INSTRUCTION_LAYOUTS.Withdraw,\n instruction.data,\n );\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n toPubkey: instruction.keys[1].pubkey,\n authorizedPubkey: instruction.keys[4].pubkey,\n lamports,\n };\n }\n\n /**\n * Decode a deactivate stake instruction and retrieve the instruction params.\n */\n static decodeDeactivate(\n instruction: TransactionInstruction,\n ): DeactivateStakeParams {\n this.checkProgramId(instruction.programId);\n this.checkKeyLength(instruction.keys, 3);\n decodeData(STAKE_INSTRUCTION_LAYOUTS.Deactivate, instruction.data);\n\n return {\n stakePubkey: instruction.keys[0].pubkey,\n authorizedPubkey: instruction.keys[2].pubkey,\n };\n }\n\n /**\n * @private\n */\n static checkProgramId(programId: PublicKey) {\n if (!programId.equals(StakeProgram.programId)) {\n throw new Error('invalid instruction; programId is not StakeProgram');\n }\n }\n\n /**\n * @private\n */\n static checkKeyLength(keys: Array, expectedLength: number) {\n if (keys.length < expectedLength) {\n throw new Error(\n `invalid instruction; found ${keys.length} keys, expected at least ${expectedLength}`,\n );\n }\n }\n}\n\n/**\n * An enumeration of valid StakeInstructionType's\n * @typedef { 'Initialize' | 'Authorize' | 'AuthorizeWithSeed' | 'Delegate' | 'Split' | 'Withdraw'\n | 'Deactivate' } StakeInstructionType\n */\nexport type StakeInstructionType = $Keys;\n\n/**\n * An enumeration of valid stake InstructionType's\n */\nexport const STAKE_INSTRUCTION_LAYOUTS = Object.freeze({\n Initialize: {\n index: 0,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.authorized(),\n Layout.lockup(),\n ]),\n },\n Authorize: {\n index: 1,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('newAuthorized'),\n BufferLayout.u32('stakeAuthorizationType'),\n ]),\n },\n Delegate: {\n index: 2,\n layout: BufferLayout.struct([BufferLayout.u32('instruction')]),\n },\n Split: {\n index: 3,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n ]),\n },\n Withdraw: {\n index: 4,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n BufferLayout.ns64('lamports'),\n ]),\n },\n Deactivate: {\n index: 5,\n layout: BufferLayout.struct([BufferLayout.u32('instruction')]),\n },\n AuthorizeWithSeed: {\n index: 8,\n layout: BufferLayout.struct([\n BufferLayout.u32('instruction'),\n Layout.publicKey('newAuthorized'),\n BufferLayout.u32('stakeAuthorizationType'),\n Layout.rustString('authoritySeed'),\n Layout.publicKey('authorityOwner'),\n ]),\n },\n});\n\n/**\n * @typedef {Object} StakeAuthorizationType\n * @property (index} The Stake Authorization index (from solana-stake-program)\n */\nexport type StakeAuthorizationType = {|\n index: number,\n|};\n\n/**\n * An enumeration of valid StakeAuthorizationLayout's\n */\nexport const StakeAuthorizationLayout = Object.freeze({\n Staker: {\n index: 0,\n },\n Withdrawer: {\n index: 1,\n },\n});\n\n/**\n * Factory class for transactions to interact with the Stake program\n */\nexport class StakeProgram {\n /**\n * Public key that identifies the Stake program\n */\n static get programId(): PublicKey {\n return new PublicKey('Stake11111111111111111111111111111111111111');\n }\n\n /**\n * Max space of a Stake account\n */\n static get space(): number {\n return 4008;\n }\n\n /**\n * Generate an Initialize instruction to add to a Stake Create transaction\n */\n static initialize(params: InitializeStakeParams): TransactionInstruction {\n const {stakePubkey, authorized, lockup} = params;\n const type = STAKE_INSTRUCTION_LAYOUTS.Initialize;\n const data = encodeData(type, {\n authorized: {\n staker: authorized.staker.toBuffer(),\n withdrawer: authorized.withdrawer.toBuffer(),\n },\n lockup: {\n unixTimestamp: lockup.unixTimestamp,\n epoch: lockup.epoch,\n custodian: lockup.custodian.toBuffer(),\n },\n });\n const instructionData = {\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false},\n ],\n programId: this.programId,\n data,\n };\n return new TransactionInstruction(instructionData);\n }\n\n /**\n * Generate a Transaction that creates a new Stake account at\n * an address generated with `from`, a seed, and the Stake programId\n */\n static createAccountWithSeed(\n params: CreateStakeAccountWithSeedParams,\n ): Transaction {\n let transaction = SystemProgram.createAccountWithSeed({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.stakePubkey,\n basePubkey: params.basePubkey,\n seed: params.seed,\n lamports: params.lamports,\n space: this.space,\n programId: this.programId,\n });\n\n const {stakePubkey, authorized, lockup} = params;\n return transaction.add(this.initialize({stakePubkey, authorized, lockup}));\n }\n\n /**\n * Generate a Transaction that creates a new Stake account\n */\n static createAccount(params: CreateStakeAccountParams): Transaction {\n let transaction = SystemProgram.createAccount({\n fromPubkey: params.fromPubkey,\n newAccountPubkey: params.stakePubkey,\n lamports: params.lamports,\n space: this.space,\n programId: this.programId,\n });\n\n const {stakePubkey, authorized, lockup} = params;\n return transaction.add(this.initialize({stakePubkey, authorized, lockup}));\n }\n\n /**\n * Generate a Transaction that delegates Stake tokens to a validator\n * Vote PublicKey. This transaction can also be used to redelegate Stake\n * to a new validator Vote PublicKey.\n */\n static delegate(params: DelegateStakeParams): Transaction {\n const {stakePubkey, authorizedPubkey, votePubkey} = params;\n\n const type = STAKE_INSTRUCTION_LAYOUTS.Delegate;\n const data = encodeData(type);\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: votePubkey, isSigner: false, isWritable: false},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {\n pubkey: SYSVAR_STAKE_HISTORY_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: STAKE_CONFIG_ID, isSigner: false, isWritable: false},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that authorizes a new PublicKey as Staker\n * or Withdrawer on the Stake account.\n */\n static authorize(params: AuthorizeStakeParams): Transaction {\n const {\n stakePubkey,\n authorizedPubkey,\n newAuthorizedPubkey,\n stakeAuthorizationType,\n } = params;\n\n const type = STAKE_INSTRUCTION_LAYOUTS.Authorize;\n const data = encodeData(type, {\n newAuthorized: newAuthorizedPubkey.toBuffer(),\n stakeAuthorizationType: stakeAuthorizationType.index,\n });\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: true},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that authorizes a new PublicKey as Staker\n * or Withdrawer on the Stake account.\n */\n static authorizeWithSeed(params: AuthorizeWithSeedStakeParams): Transaction {\n const {\n stakePubkey,\n authorityBase,\n authoritySeed,\n authorityOwner,\n newAuthorizedPubkey,\n stakeAuthorizationType,\n } = params;\n\n const type = STAKE_INSTRUCTION_LAYOUTS.AuthorizeWithSeed;\n const data = encodeData(type, {\n newAuthorized: newAuthorizedPubkey.toBuffer(),\n stakeAuthorizationType: stakeAuthorizationType.index,\n authoritySeed: authoritySeed,\n authorityOwner: authorityOwner.toBuffer(),\n });\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: authorityBase, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that splits Stake tokens into another stake account\n */\n static split(params: SplitStakeParams): Transaction {\n const {stakePubkey, authorizedPubkey, splitStakePubkey, lamports} = params;\n\n let transaction = SystemProgram.createAccount({\n fromPubkey: authorizedPubkey,\n newAccountPubkey: splitStakePubkey,\n lamports: 0,\n space: this.space,\n programId: this.programId,\n });\n const type = STAKE_INSTRUCTION_LAYOUTS.Split;\n const data = encodeData(type, {lamports});\n\n return transaction.add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: splitStakePubkey, isSigner: false, isWritable: true},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that withdraws deactivated Stake tokens.\n */\n static withdraw(params: WithdrawStakeParams): Transaction {\n const {stakePubkey, authorizedPubkey, toPubkey, lamports} = params;\n const type = STAKE_INSTRUCTION_LAYOUTS.Withdraw;\n const data = encodeData(type, {lamports});\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: toPubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {\n pubkey: SYSVAR_STAKE_HISTORY_PUBKEY,\n isSigner: false,\n isWritable: false,\n },\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n\n /**\n * Generate a Transaction that deactivates Stake tokens.\n */\n static deactivate(params: DeactivateStakeParams): Transaction {\n const {stakePubkey, authorizedPubkey} = params;\n const type = STAKE_INSTRUCTION_LAYOUTS.Deactivate;\n const data = encodeData(type);\n\n return new Transaction().add({\n keys: [\n {pubkey: stakePubkey, isSigner: false, isWritable: true},\n {pubkey: SYSVAR_CLOCK_PUBKEY, isSigner: false, isWritable: false},\n {pubkey: authorizedPubkey, isSigner: true, isWritable: false},\n ],\n programId: this.programId,\n data,\n });\n }\n}\n","// @flow\n\nimport {struct} from 'superstruct';\n\nimport * as Layout from './layout';\nimport * as shortvec from './util/shortvec-encoding';\nimport {PublicKey} from './publickey';\n\nexport const VALIDATOR_INFO_KEY = new PublicKey(\n 'Va1idator1nfo111111111111111111111111111111',\n);\n\n/**\n * @private\n */\ntype ConfigKey = {|\n publicKey: PublicKey,\n isSigner: boolean,\n|};\n\n/**\n * Info used to identity validators.\n *\n * @typedef {Object} Info\n * @property {string} name validator name\n * @property {?string} website optional, validator website\n * @property {?string} details optional, extra information the validator chose to share\n * @property {?string} keybaseUsername optional, used to identify validators on keybase.io\n */\nexport type Info = {|\n name: string,\n website?: string,\n details?: string,\n keybaseUsername?: string,\n|};\n\nconst InfoString = struct({\n name: 'string',\n website: 'string?',\n details: 'string?',\n keybaseUsername: 'string?',\n});\n\n/**\n * ValidatorInfo class\n */\nexport class ValidatorInfo {\n /**\n * validator public key\n */\n key: PublicKey;\n /**\n * validator information\n */\n info: Info;\n\n /**\n * Construct a valid ValidatorInfo\n *\n * @param key validator public key\n * @param info validator information\n */\n constructor(key: PublicKey, info: Info) {\n this.key = key;\n this.info = info;\n }\n\n /**\n * Deserialize ValidatorInfo from the config account data. Exactly two config\n * keys are required in the data.\n *\n * @param buffer config account data\n * @return null if info was not found\n */\n static fromConfigData(\n buffer: Buffer | Uint8Array | Array,\n ): ValidatorInfo | null {\n const PUBKEY_LENGTH = 32;\n\n let byteArray = [...buffer];\n const configKeyCount = shortvec.decodeLength(byteArray);\n if (configKeyCount !== 2) return null;\n\n const configKeys: Array = [];\n for (let i = 0; i < 2; i++) {\n const publicKey = new PublicKey(byteArray.slice(0, PUBKEY_LENGTH));\n byteArray = byteArray.slice(PUBKEY_LENGTH);\n const isSigner = byteArray.slice(0, 1)[0] === 1;\n byteArray = byteArray.slice(1);\n configKeys.push({publicKey, isSigner});\n }\n\n if (configKeys[0].publicKey.equals(VALIDATOR_INFO_KEY)) {\n if (configKeys[1].isSigner) {\n const rawInfo = Layout.rustString().decode(Buffer.from(byteArray));\n const info = InfoString(JSON.parse(rawInfo));\n return new ValidatorInfo(configKeys[1].publicKey, info);\n }\n }\n\n return null;\n }\n}\n","// @flow\nimport * as BufferLayout from 'buffer-layout';\n\nimport * as Layout from './layout';\nimport {PublicKey} from './publickey';\nimport {toBuffer} from './util/to-buffer';\n\nexport const VOTE_PROGRAM_ID = new PublicKey(\n 'Vote111111111111111111111111111111111111111',\n);\n\nexport type Lockout = {|\n slot: number,\n confirmationCount: number,\n|};\n\n/**\n * History of how many credits earned by the end of each epoch\n */\nexport type EpochCredits = {|\n epoch: number,\n credits: number,\n prevCredits: number,\n|};\n\n/**\n * See https://github.com/solana-labs/solana/blob/8a12ed029cfa38d4a45400916c2463fb82bbec8c/programs/vote_api/src/vote_state.rs#L68-L88\n *\n * @private\n */\nconst VoteAccountLayout = BufferLayout.struct([\n Layout.publicKey('nodePubkey'),\n Layout.publicKey('authorizedVoterPubkey'),\n Layout.publicKey('authorizedWithdrawerPubkey'),\n BufferLayout.u8('commission'),\n BufferLayout.nu64(), // votes.length\n BufferLayout.seq(\n BufferLayout.struct([\n BufferLayout.nu64('slot'),\n BufferLayout.u32('confirmationCount'),\n ]),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'votes',\n ),\n BufferLayout.u8('rootSlotValid'),\n BufferLayout.nu64('rootSlot'),\n BufferLayout.nu64('epoch'),\n BufferLayout.nu64('credits'),\n BufferLayout.nu64('lastEpochCredits'),\n BufferLayout.nu64(), // epochCredits.length\n BufferLayout.seq(\n BufferLayout.struct([\n BufferLayout.nu64('epoch'),\n BufferLayout.nu64('credits'),\n BufferLayout.nu64('prevCredits'),\n ]),\n BufferLayout.offset(BufferLayout.u32(), -8),\n 'epochCredits',\n ),\n]);\n\n/**\n * VoteAccount class\n */\nexport class VoteAccount {\n nodePubkey: PublicKey;\n authorizedVoterPubkey: PublicKey;\n authorizedWithdrawerPubkey: PublicKey;\n commission: number;\n votes: Array;\n rootSlot: number | null;\n epoch: number;\n credits: number;\n lastEpochCredits: number;\n epochCredits: Array;\n\n /**\n * Deserialize VoteAccount from the account data.\n *\n * @param buffer account data\n * @return VoteAccount\n */\n static fromAccountData(\n buffer: Buffer | Uint8Array | Array,\n ): VoteAccount {\n const va = VoteAccountLayout.decode(toBuffer(buffer), 0);\n va.nodePubkey = new PublicKey(va.nodePubkey);\n va.authorizedVoterPubkey = new PublicKey(va.authorizedVoterPubkey);\n va.authorizedWithdrawerPubkey = new PublicKey(\n va.authorizedWithdrawerPubkey,\n );\n if (!va.rootSlotValid) {\n va.rootSlot = null;\n }\n return va;\n }\n}\n","// @flow\n\nimport {Connection} from '../connection';\nimport type {TransactionSignature} from '../transaction';\nimport type {ConfirmOptions} from '../connection';\n\n/**\n * Send and confirm a raw transaction\n *\n * If `confirmations` count is not specified, wait for transaction to be finalized.\n *\n * @param {Connection} connection\n * @param {Buffer} rawTransaction\n * @param {ConfirmOptions} [options]\n * @returns {Promise}\n */\nexport async function sendAndConfirmRawTransaction(\n connection: Connection,\n rawTransaction: Buffer,\n options?: ConfirmOptions,\n): Promise {\n const start = Date.now();\n const signature = await connection.sendRawTransaction(\n rawTransaction,\n options,\n );\n const status = (\n await connection.confirmTransaction(\n signature,\n options && options.confirmations,\n )\n ).value;\n\n if (status) {\n if (status.err) {\n throw new Error(\n `Raw transaction ${signature} failed (${JSON.stringify(status)})`,\n );\n }\n return signature;\n }\n\n const duration = (Date.now() - start) / 1000;\n throw new Error(\n `Raw transaction '${signature}' was not confirmed in ${duration.toFixed(\n 2,\n )} seconds`,\n );\n}\n","//@flow\n\n/**\n * @private\n */\nconst endpoint = {\n http: {\n devnet: 'http://devnet.solana.com',\n testnet: 'http://testnet.solana.com',\n 'mainnet-beta': 'http://api.mainnet-beta.solana.com',\n },\n https: {\n devnet: 'https://devnet.solana.com',\n testnet: 'https://testnet.solana.com',\n 'mainnet-beta': 'https://api.mainnet-beta.solana.com',\n },\n};\n\nexport type Cluster = 'devnet' | 'testnet' | 'mainnet-beta';\n\n/**\n * Retrieves the RPC API URL for the specified cluster\n */\nexport function clusterApiUrl(cluster?: Cluster, tls?: boolean): string {\n const key = tls === false ? 'http' : 'https';\n\n if (!cluster) {\n return endpoint[key]['devnet'];\n }\n\n const url = endpoint[key][cluster];\n if (!url) {\n throw new Error(`Unknown ${key} cluster: ${cluster}`);\n }\n return url;\n}\n","// @flow\nexport {Account} from './account';\nexport {BpfLoader} from './bpf-loader';\nexport {Connection} from './connection';\nexport {Loader} from './loader';\nexport {Message} from './message';\nexport {NonceAccount, NONCE_ACCOUNT_LENGTH} from './nonce-account';\nexport {PublicKey} from './publickey';\nexport {\n STAKE_CONFIG_ID,\n Authorized,\n Lockup,\n StakeAuthorizationLayout,\n StakeInstruction,\n STAKE_INSTRUCTION_LAYOUTS,\n StakeProgram,\n} from './stake-program';\nexport {\n SystemInstruction,\n SystemProgram,\n SYSTEM_INSTRUCTION_LAYOUTS,\n} from './system-program';\nexport {Transaction, TransactionInstruction} from './transaction';\nexport {VALIDATOR_INFO_KEY, ValidatorInfo} from './validator-info';\nexport {VOTE_PROGRAM_ID, VoteAccount} from './vote-account';\nexport {\n SYSVAR_CLOCK_PUBKEY,\n SYSVAR_RENT_PUBKEY,\n SYSVAR_REWARDS_PUBKEY,\n SYSVAR_STAKE_HISTORY_PUBKEY,\n} from './sysvar';\nexport {sendAndConfirmTransaction} from './util/send-and-confirm-transaction';\nexport {sendAndConfirmRawTransaction} from './util/send-and-confirm-raw-transaction';\nexport {clusterApiUrl} from './util/cluster';\n\n/**\n * There are 1-billion lamports in one SOL\n */\nexport const LAMPORTS_PER_SOL = 1000000000;\n"],"names":["_classCallCheck","instance","Constructor","TypeError","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","protoProps","staticProps","prototype","_defineProperty","obj","value","nacl","gf","init","r","Float64Array","randombytes","Error","_0","Uint8Array","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","l","vn","xi","y","yi","n","d","crypto_verify_16","crypto_verify_32","core_salsa20","o","p","k","c","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","u","core_hsalsa20","crypto_core_salsa20","out","inp","crypto_core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","m","mpos","b","z","crypto_stream_salsa20","crypto_stream","s","sn","crypto_stream_xor","poly1305","this","buffer","Uint16Array","pad","leftover","fin","t0","t1","t2","t3","t4","t5","t6","t7","blocks","bytes","hibit","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","finish","mac","macpos","g","mask","f","update","want","crypto_onetimeauth","outpos","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","Math","floor","sel25519","q","t","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","e","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","crypto_box_afternm","crypto_box_open_afternm","crypto_box","crypto_box_open","K","crypto_hashblocks_hl","hh","hl","wh","Int32Array","wl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","pos","crypto_hash","add","cswap","pack","tx","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","unpackneg","chk","num","den","den2","den4","den6","crypto_sign_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","lowlevel","checkLengths","checkBoxLengths","checkArrayTypes","arguments","cleanup","arr","randomBytes","secretbox","msg","nonce","open","box","keyLength","nonceLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","publicKey","secretKey","before","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","fn","crypto","self","msCrypto","getRandomValues","QUOTA","min","require","require$$0","module","exports","global","window","lookup","revLookup","Arr","Array","inited","code","len","charCodeAt","toByteArray","b64","placeHolders","tripletToBase64","encodeChunk","uint8","start","end","output","push","join","fromByteArray","extraBytes","parts","maxChunkLength","len2","read","offset","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","pow","write","rt","abs","isNaN","log","LN2","toString","isArray","call","INSPECT_MAX_BYTES","Buffer","TYPED_ARRAY_SUPPORT","undefined","_kMaxLength","kMaxLength","createBuffer","that","RangeError","__proto__","arg","encodingOrOffset","allocUnsafe","from","poolSize","_augment","ArrayBuffer","fromArrayBuffer","fromString","fromObject","assertSize","size","alloc","fill","encoding","checked","allocUnsafeSlow","string","isEncoding","byteLength","actual","slice","fromArrayLike","array","byteOffset","internalIsBuffer","copy","isnan","type","data","SlowBuffer","isBuffer","_isBuffer","compare","String","toLowerCase","concat","list","buf","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","swap16","swap32","swap64","apply","equals","inspect","str","max","match","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","includes","hexWrite","Number","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","isFinite","toJSON","_arr","base64.fromByteArray","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","ret","toHex","newBuf","sliceLen","checkOffset","ext","readUIntLE","noAssert","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","ieee754.read","readFloatBE","readDoubleLE","readDoubleBE","checkInt","writeUIntLE","maxBytes","writeUIntBE","writeUInt8","objectWriteUInt16","littleEndian","writeUInt16LE","writeUInt16BE","objectWriteUInt32","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","checkIEEE754","writeFloat","ieee754.write","writeFloatLE","writeFloatBE","writeDouble","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","base64clean","stringtrim","replace","trim","units","leadSurrogate","byteArray","hi","lo","base64.toByteArray","src","dst","isFastBuffer","isSlowBuffer","constructor","toBuffer","runtime","Op","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","create","context","Context","_invoke","makeInvokeMethod","tryCatch","err","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","displayName","defineIteratorMethods","forEach","method","isGeneratorFunction","genFun","ctor","name","mark","setPrototypeOf","awrap","__await","AsyncIterator","PromiseImpl","invoke","resolve","reject","record","result","then","unwrapped","error","previousPromise","enqueue","callInvokeWithMethodAndArg","async","Promise","iter","next","done","state","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","keys","object","reverse","pop","iterable","iteratorMethod","skipTempReset","prev","charAt","stop","rootEntry","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","catch","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","args","assert","inherits","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","_init","wordSize","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","_strip","toArray","ceil","w","off","parseHex","parseBase","limbLen","limbPow","total","mod","word","imuln","_iaddn","dest","move","_move","clone","_expand","strip","_normSign","for","zeros","groupSizes","groupBases","padding","groupSize","groupBase","isZero","modrn","idivn","toNumber","toArrayLike","allocate","ArrayType","reqLength","postfix","_toArrayLikeLE","position","shift","_toArrayLikeBE","clz32","_countBits","_zeroBits","bitLength","toBitArray","bit","wbit","zeroBits","toTwos","width","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","isub","smallMulTo","ncarry","rword","maxJ","comb10MulTo","mid","a0","a1","a2","a3","a4","a5","a6","a7","a8","al8","ah8","a9","al9","ah9","bl8","bh8","bl9","bh9","imul","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","mulTo","mulf","isNegNum","muln","sqr","isqr","iushln","bits","carryMask","newCarry","ishln","iushrn","hint","extended","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","bhiBits","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","andln","acc","modn","egcd","B","C","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","ireduce","rlen","split","imulK","input","K256","outLen","P224","P192","P25519","_prime","prime","imod","mod3","one","nOne","lpow","inv","windowSize","wnd","current","currentLen","mont","Mont","rinv","minv","copyProps","SafeBuffer","ALPHABET","ALPHABET_MAP","BASE","LEADER","encode","source","digits","decodeUnsafe","decode","basex","_globalThis","globalThis","bufferToHex","view","DataView","hexCodes","getUint32","padStart","algorithm","options","TextEncoder","outputFormat","subtle","digest","naclLowLevel","PublicKey","decoded","bs58","_bn","zeroPad","toBase58","fromPublicKey","programId","sha256","seeds","publicKeyBytes","is_on_curve","seedsWithNonce","createProgramAddress","address","Account","_keypair","defaultSetTimout","defaultClearTimeout","cachedSetTimeout","cachedClearTimeout","setTimeout","clearTimeout","runTimeout","fun","runClearTimeout","marker","queue","draining","currentQueue","queueIndex","cleanUpNextTick","drainQueue","timeout","run","nextTick","Item","title","platform","browser","env","argv","version","versions","release","config","noop","on","addListener","once","removeListener","removeAllListeners","emit","binding","cwd","chdir","umask","performance","performanceNow","now","mozNow","msNow","oNow","webkitNow","Date","getTime","hrtime","previousTimestamp","clocktime","seconds","nanoseconds","startTime","uptime","currentTime","dif","opts","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","bold","italic","underline","inverse","white","grey","black","blue","cyan","green","magenta","yellow","styles","special","boolean","null","date","regexp","styleType","style","arrayToHash","idx","recurseTimes","isFunction","isString","primitive","formatPrimitive","visibleKeys","getOwnPropertyNames","isError","formatError","isRegExp","RegExp","isDate","braces","toUTCString","formatArray","map","formatProperty","reduceToSingleString","simple","JSON","stringify","isNumber","isNull","desc","getOwnPropertyDescriptor","get","line","cur","ar","isNullOrUndefined","re","isObject","objectToString","isPrimitive","origin","prop","objectKeys","pSlice","_functionsHaveNames","functionsHaveNames","foo","pToString","arrbuf","message","fail","ok","regex","getName","func","AssertionError","expected","operator","generatedMessage","getMessage","stackStartFunction","captureStackTrace","stack","fn_name","next_line","substring","truncate","something","utilInspect","rawname","equal","notEqual","deepEqual","_deepEqual","deepStrictEqual","strict","memos","multiline","lastIndex","ignoreCase","Float32Array","actualIndex","objEquiv","isArguments","actualVisitedObjects","aIsArgs","bIsArgs","ka","kb","sort","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","expectedException","test","isPrototypeOf","_tryBlock","block","_throws","shouldThrow","userProvidedMessage","isUnwantedException","isUnexpectedException","throws","doesNotThrow","ifError","Layout","[object Object]","span","property","isInteger","rv","assign","nameWithProperty","ExternalLayout","OffsetLayout","layout","super","UInt","UIntBE","V2E32","divmodInt64","hi32","lo32","roundedInt64","NearUInt64","NearInt64","Sequence","elementLayout","count","isCount","getSpan","elo","Structure","fields","decodePrefixes","fd","fsp","makeDestinationObject","firstOffset","lastOffset","lastWrote","fv","Blob","NUM_TICKS_PER_SECOND","DEFAULT_TICKS_PER_SLOT","NUM_SLOTS_PER_SECOND","MS_PER_SLOT","_arrayLikeToArray","arr2","_arrayWithoutHoles","arrayLikeToArray","_iterableToArray","_unsupportedIterableToArray","minLen","_nonIterableSpread","_toConsumableArray","arrayWithoutHoles","iterableToArray","unsupportedIterableToArray","nonIterableSpread","BufferLayout","rustString","rsl","_decode","bind","_encode","chars","authorized","lockup","getAlloc","item","decodeLength","elem","encodeLength","rem_len","PUBKEY_LENGTH","Message","header","accountKeys","account","recentBlockhash","instructions","index","numRequiredSignatures","numReadonlySignedAccounts","numReadonlyUnsignedAccounts","numKeys","keyCount","shortvec","instruction","accounts","programIdIndex","keyIndicesCount","dataCount","keyIndices","dataLength","instructionCount","instructionBuffer","PACKET_DATA_SIZE","instructionBufferLength","instructionLayout","signDataLayout","transaction","signData","accountCount","messageArgs","DEFAULT_SIGNATURE","SIGNATURE_LENGTH","TransactionInstruction","Transaction","signatures","signature","items","_this","nonceInfo","nonceInstruction","unshift","programIds","accountMetas","accountMeta","pubkey","isSigner","isWritable","checkSigner","checkWritable","uniqueMetas","pubkeyString","uniqueIndex","findIndex","sigPubkeyString","signedKeys","unsignedKeys","first","keyObj","invariant","keyIndex","compileMessage","serialize","signPartial","partialSigners","partialSignerPublicKey","accountOrPublicKey","signerAccount","serializeMessage","signer","addSignature","sigpair","_verifySignatures","verified","_serialize","signatureCount","transactionLength","wireTransaction","populate","sigPubkeyPair","some","isAccountWritable","SYSVAR_CLOCK_PUBKEY","SYSVAR_RECENT_BLOCKHASHES_PUBKEY","SYSVAR_RENT_PUBKEY","SYSVAR_REWARDS_PUBKEY","SYSVAR_STAKE_HISTORY_PUBKEY","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","errors","overflow","not-basic","invalid-input","baseMinusTMin","stringFromCharCode","mapDomain","labels","encoded","ucs2decode","counter","extra","digitToBasic","digit","flag","adapt","numPoints","firstTime","handledCPCount","basicLength","bias","currentValue","inputLength","handledCPCountPlusOne","baseMinusT","qMinusT","toASCII","xs","stringifyPrimitive","sep","ks","encodeURIComponent","parse","qs","maxKeys","kstr","vstr","decodeURIComponent","Url","protocol","slashes","auth","host","port","hostname","search","query","pathname","path","href","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","unsafeProtocol","javascript","javascript:","hostlessProtocol","slashedProtocol","http","https","ftp","gopher","file","http:","https:","ftp:","gopher:","file:","urlParse","url","parseQueryString","slashesDenoteHost","queryIndex","splitter","uSplit","slashRegex","rest","simplePath","exec","qsParse","proto","lowerProto","hec","hostEnd","atSign","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","ae","esc","escape","qm","format","urlFormat","qsStringify","relative","resolveObject","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","authInHost","last","hasTrailingSlash","up","splice","isAbsolute","getGlobal","fetch","Headers","Request","Response","rnds8","whatwgRNG","rnds","mathRNG","random","byteToHex","bytesToUuid","bth","v4","rng","ii","generateRequest","params","id","request","jsonrpc","uuid","ClientBrowser","callServer","reviver","replacer","callback","isBatch","isRaw","hasCallback","response","_parseResponse","responseText","isNotError","filter","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","_objectSpread2","getOwnPropertyDescriptors","defineProperties","_inheritsLoose","subClass","superClass","_getPrototypeOf","_setPrototypeOf","isNativeReflectConstruct","Reflect","construct","sham","Proxy","_construct","Parent","Class","_isNativeFunction","_wrapNativeSuper","_cache","Map","has","Wrapper","_objectWithoutPropertiesLoose","excluded","sourceKeys","_assertThisInitialized","ReferenceError","kindOf","isGeneratorFn","isRegexp","ctorName","isGeneratorObj","stackTraceLimit","toDateString","getDate","setDate","flags","throw","return","callee","Types","any","_arguments","float32array","float64array","function","_function","generatorfunction","int16array","int32array","int8array","_null","promise","symbol","uint16array","uint32array","uint8array","uint8clampedarray","undefined$1","weakmap","weakset","prefix","condition","StructError","_TypeError","failures","branch","STRUCT","isStruct","createStruct","struct","Struct","kind","default","defaults","_Struct$check","check","_Struct$check2","validate","_Struct$check3","createArray","schema","Element","_Element$check","efs","er","createDynamic","Dynamic","createEnum","validator","createFunction","_iterator","_isArray","_i","_ref","createInstance","createInterface","Props","Prop","_Prop$check","pfs","createIntersection","Structs","sch","_struct","_struct$check","fs","createLazy","Lazy","createSize","every","createLiteral","createObject","Set","pr","createPartial","union","createPick","createRecord","Key","Value","defs","_Key$check","kfs","kr","_Value$check","vfs","vr","createScalar","createShorthand","_schema","tuple","optional","endsWith","scalars","_scalars","intersection","scalar","createTuple","Elements","createUnion","superstruct","settings","dynamic","enum","interface","lazy","literal","partial","pick","types","_interopRequireDefault","__esModule","_inherits","_typeof","_possibleConstructorReturn","assertThisInitialized","Events","EE","emitter","event","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","eventNames","names","events","listeners","handlers","ee","listenerCount","prefixed","_default","_classCallCheck2","_createClass2","require$$1","_inherits2","require$$2","_possibleConstructorReturn2","require$$3","_getPrototypeOf2","require$$4","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","NewTarget","WebSocketBrowserImpl","_EventEmitter","_super","protocols","socket","WebSocket","onopen","onmessage","onerror","onclose","reason","send","optionsOrCallback","cb","close","addEventListener","_eventemitter","long","fmtLong","fmtShort","parseFloat","ms","round","plural","createDebug","debug","coerce","disable","enable","enabled","prevTime","selectColor","namespace","curr","formatter","formatters","formatArgs","logFn","console","useColors","color","namespaces","save","skips","load","chrome","storage","local","localstorage","process","document","documentElement","WebkitAppearance","firebug","table","navigator","userAgent","$1","humanize","lastC","removeItem","DEBUG","localStorage","exists","not","isOptionalKey","isSpreadKey","assertType","bool","capitalized","strictCapitalilized","isCapitalized","root","fnBody","isClass","isClassStrict","startsWithVowel","compoundSubject","arrayOfStrings","wrapperObject","endWith","delimitAll","delimitWith","newEndWith","newDelimitAll","newDelimitWith","make","combinedEndWith","upToLastTwo","lastTwo","isEmpty","multiValidate","validators","errMessage","typeArr","typeStr","article","passedAnyValidator","NoClass","classes","_plural","keyStr","assertion","isRequiredKey","assertArgs","validation","argsLeft","firstOptionalErr","argKeys","outKey","spreadArgs","requiredKeysLeft","specialChar","safeSpecialChar","escapedSafeSpecialChar","specialCharRG","safeSpecialCharRG","safeStartWithSpecialCharRG","$String","generateReplacer","doNotIgnore","all","mapp","lvl","retrieveFromPath","generateReviver","regenerate","regenerateArray","retrieve","regenerateObject","CircularJSON","space","doNotResolve","parser","text","_regenerator","_asyncToGenerator2","_typeof2","require$$5","require$$6","require$$7","_assertArgs","require$$8","_circularJson","require$$9","CommonClient","webSocketFactory","_ref$autoconnect","autoconnect","_ref$reconnect","reconnect","_ref$reconnect_interv","reconnect_interval","_ref$max_reconnects","max_reconnects","generate_request_id","rpc_id","ready","current_reconnects","_connect","connect","ws_opts","_this2","[params]","[timeout]","[ws_opts]","_login","_callee","resp","_callee$","_context","login","_x","_listMethods","_callee2","_callee2$","_context2","listMethods","notify","_this3","_subscribe","_callee3","_args3","_callee3$","_context3","subscribe","_x2","_unsubscribe","_callee4","_args4","_callee4$","_context4","unsubscribe","_x3","_this4","_ref2","notification","_ref3","_websocket","_client","Client","_CommonClient","FeeCalculatorLayout","NonceAccountLayout","NONCE_ACCOUNT_LENGTH","NonceAccount","nonceAccount","authorizedPubkey","sleep","BLOCKHASH_CACHE_TIMEOUT_MS","jsonRpcResultAndContext","resultDescription","jsonRpcResult","slot","jsonRpcVersion","notificationResultAndContext","GetInflationGovernorResult","foundation","foundationTerm","initial","taper","terminal","GetEpochInfoResult","epoch","slotIndex","slotsInEpoch","absoluteSlot","blockHeight","GetEpochScheduleResult","slotsPerEpoch","leaderScheduleSlotOffset","warmup","firstNormalEpoch","firstNormalSlot","GetLeaderScheduleResult","TransactionErrorResult","SignatureStatusResult","Version","SimulatedTransactionResponseValidator","logs","createRpcRequest","server","jayson","body","headers","too_many_requests_retries","status","statusText","GetInflationGovernorRpcResult","GetEpochInfoRpcResult","GetEpochScheduleRpcResult","GetLeaderScheduleRpcResult","GetBalanceAndContextRpcResult","GetBlockTimeRpcResult","SlotRpcResult","GetSupplyRpcResult","circulating","nonCirculating","nonCirculatingAccounts","TokenAmountResult","amount","uiAmount","decimals","GetTokenLargestAccountsResult","GetTokenAccountBalance","GetTokenSupplyRpcResult","GetTokenAccountsByOwner","executable","owner","lamports","rentEpoch","GetParsedTokenAccountsByOwner","program","GetLargestAccountsRpcResult","GetVersionRpcResult","AccountInfoResult","ParsedAccountInfoResult","GetAccountInfoAndContextRpcResult","GetParsedAccountInfoResult","GetConfirmedSignaturesForAddressRpcResult","GetConfirmedSignaturesForAddress2RpcResult","memo","AccountNotificationResult","subscription","ProgramAccountInfoResult","ParsedProgramAccountInfoResult","ProgramAccountNotificationResult","SlotInfoResult","parent","SlotNotificationResult","SignatureNotificationResult","RootNotificationResult","GetProgramAccountsRpcResult","GetParsedProgramAccountsRpcResult","GetSlot","GetSlotLeader","GetClusterNodes","gossip","tpu","rpc","GetVoteAccounts","votePubkey","nodePubkey","activatedStake","epochVoteAccount","epochCredits","commission","lastVote","rootSlot","delinquent","GetSignatureStatusesRpcResult","confirmations","GetTransactionCountRpcResult","GetTotalSupplyRpcResult","GetMinimumBalanceForRentExemptionRpcResult","ConfirmedTransactionResult","ParsedConfirmedTransactionResult","ConfirmedTransactionMetaResult","fee","preBalances","postBalances","GetConfirmedBlockRpcResult","blockhash","previousBlockhash","parentSlot","transactions","meta","rewards","GetConfirmedTransactionRpcResult","GetParsedConfirmedTransactionRpcResult","GetRecentBlockhashAndContextRpcResult","feeCalculator","lamportsPerSignature","GetFeeCalculatorRpcResult","RequestAirdropRpcResult","SendTransactionRpcResult","Connection","endpoint","commitment","_rpcRequest","_commitment","_blockhashInfo","lastFetch","transactionSignatures","simulatedSignatures","_rpcWebSocket","RpcWebSocketClient","_wsOnOpen","_wsOnError","_wsOnClose","_wsOnAccountNotification","_wsOnProgramAccountNotification","_wsOnSlotNotification","_wsOnSignatureNotification","_wsOnRootNotification","_buildArgs","unsafeRes","getBalanceAndContext","tokenMintAddress","tokenAddress","ownerAddress","_args","mint","mintAddress","pair","resultData","getAccountInfoAndContext","WAIT_TIMEOUT_MS","getSignatureStatus","statusResponse","getSignatureStatuses","warn","getRecentBlockhashAndContext","accountKey","ix","mapped","startSlot","endSlot","accountInfo","fromAccountData","getNonceAndContext","to","disableCache","expired","_pollNewBlockhash","getRecentBlockhash","signers","_disableBlockhashCaching","_recentBlockhash","encodedTransaction","sigVerify","sendRawTransaction","rawTransaction","sendEncodedTransaction","skipPreflight","_rpcWebSocketConnected","_updateSubscriptions","_resetSubscriptions","rpcMethod","rpcArgs","subscriptionId","_context52","unsubscribeId","_context53","_accountChangeSubscriptions","_programAccountChangeSubscriptions","_signatureSubscriptions","_slotSubscriptions","_rootSubscriptions","programKeys","slotKeys","signatureKeys","rootKeys","_accountChangeSubscriptionCounter","subInfo","accountId","_programAccountChangeSubscriptionCounter","_slotSubscriptionCounter","override","_signatureSubscriptionCounter","_rootSubscriptionCounter","sendAndConfirmTransaction","connection","sendTransaction","confirmTransaction","duration","toFixed","encodeData","allocLength","layoutFields","decodeData","SystemInstruction","checkProgramId","instructionTypeLayout","typeIndex","SYSTEM_INSTRUCTION_LAYOUTS","checkKeyLength","Create","fromPubkey","newAccountPubkey","Transfer","toPubkey","Allocate","accountPubkey","AllocateWithSeed","basePubkey","Assign","AssignWithSeed","CreateWithSeed","InitializeNonceAccount","noncePubkey","AdvanceNonceAccount","WithdrawNonceAccount","AuthorizeNonceAccount","newAuthorizedPubkey","SystemProgram","expectedLength","freeze","createAccountWithSeed","createAccount","initParams","nonceInitialize","instructionData","Loader","chunkSize","payer","getMinimumBalanceForRentExemption","balanceNeeded","dataLayout","BpfLoader","getMinNumSignatures","elf","STAKE_CONFIG_ID","Authorized","staker","withdrawer","Lockup","unixTimestamp","custodian","StakeInstruction","STAKE_INSTRUCTION_LAYOUTS","Initialize","stakePubkey","Delegate","Authorize","newAuthorized","stakeAuthorizationType","AuthorizeWithSeed","authoritySeed","authorityOwner","authorityBase","Split","splitStakePubkey","Withdraw","Deactivate","StakeProgram","StakeAuthorizationLayout","Staker","Withdrawer","initialize","VALIDATOR_INFO_KEY","InfoString","website","details","keybaseUsername","ValidatorInfo","configKeyCount","configKeys","rawInfo","VOTE_PROGRAM_ID","VoteAccountLayout","VoteAccount","va","authorizedVoterPubkey","authorizedWithdrawerPubkey","rootSlotValid","sendAndConfirmRawTransaction","devnet","testnet","clusterApiUrl","cluster","tls","LAMPORTS_PER_SOL"],"mappings":"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"}