1 | {"version":3,"sources":["webpack://bsvjs/webpack/bootstrap","webpack://bsvjs/./lib/op-code.js","webpack://bsvjs/./lib/bn.js","webpack://bsvjs/./lib/hash.js","webpack://bsvjs/./lib/workers.js","webpack://bsvjs/./lib/struct.js","webpack://bsvjs/./lib/sig.js","webpack://bsvjs/./lib/bw.js","webpack://bsvjs/./node_modules/buffer/index.js","webpack://bsvjs/./lib/pub-key.js","webpack://bsvjs/./lib/script.js","webpack://bsvjs/./lib/var-int.js","webpack://bsvjs/./lib/point.js","webpack://bsvjs/./node_modules/bn.js/lib/bn.js","webpack://bsvjs/./lib/br.js","webpack://bsvjs/./lib/tx-in.js","webpack://bsvjs/./lib/tx.js","webpack://bsvjs/./lib/random.js","webpack://bsvjs/./node_modules/inherits/inherits_browser.js","webpack://bsvjs/./lib/cmp.js","webpack://bsvjs/./lib/constants.js","webpack://bsvjs/./lib/tx-out.js","webpack://bsvjs/./node_modules/safe-buffer/index.js","webpack://bsvjs/./lib/key-pair.js","webpack://bsvjs/./lib/priv-key.js","webpack://bsvjs/./lib/base-58-check.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/utils.js","webpack://bsvjs/./node_modules/process/browser.js","webpack://bsvjs/./lib/aescbc.js","webpack://bsvjs/./node_modules/hash.js/lib/hash.js","webpack://bsvjs/./lib/address.js","webpack://bsvjs/./lib/ecdsa.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/utils.js","webpack://bsvjs/./node_modules/minimalistic-assert/index.js","webpack://bsvjs/(webpack)/buildin/global.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack://bsvjs/./node_modules/sha.js/hash.js","webpack://bsvjs/./lib/block-header.js","webpack://bsvjs/./lib/interp.js","webpack://bsvjs/./lib/aes.js","webpack://bsvjs/./lib/cbc.js","webpack://bsvjs/./lib/config.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/common.js","webpack://bsvjs/./lib/base-58.js","webpack://bsvjs/./lib/workers-result.js","webpack://bsvjs/./lib/tx-out-map.js","webpack://bsvjs/./node_modules/aes/lib/aes.js","webpack://bsvjs/./node_modules/bs58/index.js","webpack://bsvjs/./lib/hash-cache.js","webpack://bsvjs/./lib/bip-39-en-wordlist.js","webpack://bsvjs/./lib/block.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic.js","webpack://bsvjs/./node_modules/pbkdf2/browser.js","webpack://bsvjs/./node_modules/is-hex/is-hex.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://bsvjs/./lib/sig-operations.js","webpack://bsvjs/./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://bsvjs/./node_modules/brorand/index.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/curve/index.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/curve/base.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/curves.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/sha/common.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/sha/256.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/sha/512.js","webpack://bsvjs/./node_modules/pbkdf2/lib/precondition.js","webpack://bsvjs/./node_modules/pbkdf2/lib/default-encoding.js","webpack://bsvjs/./node_modules/pbkdf2/lib/sync-browser.js","webpack://bsvjs/./node_modules/hash-base/index.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack://bsvjs/./node_modules/events/events.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack://bsvjs/./node_modules/node-libs-browser/node_modules/string_decoder/lib/string_decoder.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack://bsvjs/./node_modules/sha.js/sha256.js","webpack://bsvjs/./node_modules/sha.js/sha512.js","webpack://bsvjs/./lib/bip-32.js","webpack://bsvjs/./lib/bip-39.js","webpack://bsvjs/./lib/bsm.js","webpack://bsvjs/./lib/tx-builder.js","webpack://bsvjs/./lib/ach.js","webpack://bsvjs/./lib/ecies.js","webpack://bsvjs/./node_modules/randombytes/browser.js","webpack://bsvjs/./lib/merkle.js","webpack://bsvjs/(webpack)/buildin/module.js","webpack://bsvjs/./node_modules/base-x/src/index.js","webpack://bsvjs/./node_modules/base64-js/index.js","webpack://bsvjs/./node_modules/ieee754/index.js","webpack://bsvjs/./node_modules/isarray/index.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/curve/short.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/sha.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/sha/1.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/sha/224.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/sha/384.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/ripemd.js","webpack://bsvjs/./node_modules/hash.js/lib/hash/hmac.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/ec/index.js","webpack://bsvjs/./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/ec/key.js","webpack://bsvjs/./node_modules/bitcoin-elliptic/lib/elliptic/ec/signature.js","webpack://bsvjs/./node_modules/pbkdf2/lib/async.js","webpack://bsvjs/./node_modules/create-hash/md5.js","webpack://bsvjs/./node_modules/md5.js/index.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://bsvjs/./node_modules/util-deprecate/browser.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://bsvjs/./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://bsvjs/./node_modules/ripemd160/index.js","webpack://bsvjs/./node_modules/sha.js/index.js","webpack://bsvjs/./node_modules/sha.js/sha.js","webpack://bsvjs/./node_modules/sha.js/sha1.js","webpack://bsvjs/./node_modules/sha.js/sha224.js","webpack://bsvjs/./node_modules/sha.js/sha384.js","webpack://bsvjs/./lib/bip-39-jp-wordlist.js","webpack://bsvjs/./lib/tx-verifier.js","webpack://bsvjs/./entry.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","map","OP_FALSE","OP_0","OP_PUSHDATA1","OP_PUSHDATA2","OP_PUSHDATA4","OP_1NEGATE","OP_RESERVED","OP_TRUE","OP_1","OP_2","OP_3","OP_4","OP_5","OP_6","OP_7","OP_8","OP_9","OP_10","OP_11","OP_12","OP_13","OP_14","OP_15","OP_16","OP_NOP","OP_VER","OP_IF","OP_NOTIF","OP_VERIF","OP_VERNOTIF","OP_ELSE","OP_ENDIF","OP_VERIFY","OP_RETURN","OP_TOALTSTACK","OP_FROMALTSTACK","OP_2DROP","OP_2DUP","OP_3DUP","OP_2OVER","OP_2ROT","OP_2SWAP","OP_IFDUP","OP_DEPTH","OP_DROP","OP_DUP","OP_NIP","OP_OVER","OP_PICK","OP_ROLL","OP_ROT","OP_SWAP","OP_TUCK","OP_CAT","OP_SUBSTR","OP_SPLIT","OP_LEFT","OP_NUM2BIN","OP_RIGHT","OP_BIN2NUM","OP_SIZE","OP_INVERT","OP_AND","OP_OR","OP_XOR","OP_EQUAL","OP_EQUALVERIFY","OP_RESERVED1","OP_RESERVED2","OP_1ADD","OP_1SUB","OP_2MUL","OP_2DIV","OP_NEGATE","OP_ABS","OP_NOT","OP_0NOTEQUAL","OP_ADD","OP_SUB","OP_MUL","OP_DIV","OP_MOD","OP_LSHIFT","OP_RSHIFT","OP_BOOLAND","OP_BOOLOR","OP_NUMEQUAL","OP_NUMEQUALVERIFY","OP_NUMNOTEQUAL","OP_LESSTHAN","OP_GREATERTHAN","OP_LESSTHANOREQUAL","OP_GREATERTHANOREQUAL","OP_MIN","OP_MAX","OP_WITHIN","OP_RIPEMD160","OP_SHA1","OP_SHA256","OP_HASH160","OP_HASH256","OP_CODESEPARATOR","OP_CHECKSIG","OP_CHECKSIGVERIFY","OP_CHECKMULTISIG","OP_CHECKMULTISIGVERIFY","OP_NOP1","OP_NOP2","OP_CHECKLOCKTIMEVERIFY","OP_NOP3","OP_CHECKSEQUENCEVERIFY","OP_NOP4","OP_NOP5","OP_NOP6","OP_NOP7","OP_NOP8","OP_NOP9","OP_NOP10","OP_SMALLDATA","OP_SMALLINTEGER","OP_PUBKEYS","OP_PUBKEYHASH","OP_PUBKEY","OP_INVALIDOPCODE","OpCode","num","super","this","fromNumber","str","undefined","Error","fromString","toString","opCodeStr","Bn","base","rest","reverseBuf","buf","buf2","Buffer","alloc","length","decorate","b","keys","forEach","constructor","fromHex","hex","opts","fromBuffer","from","toHex","toBuffer","toJSON","fromJSON","copy","toNumber","parseInt","endian","size","natlen","slice","rbuf","longzero","compare","toFastBuffer","fromFastBuffer","fromSm","neg","toSm","cmp","concat","fromBits","bits","strict","writeUInt32BE","readInt32BE","nsize","nword","writeInt32BE","fill","sub","toBits","lt","readUInt32BE","blank","fromScriptNumBuffer","fRequireMinimal","nMaxNumSize","toScriptNumBuffer","_neg","add","bn","_bn","mul","mod","umod","invm","div","ushln","ushrn","eq","neq","gt","geq","leq","Hash","sha1","isBuffer","hash","Sha1","update","digest","blockSize","asyncSha1","async","args","asyncClassMethod","resbuf","sha256","Sha256","asyncSha256","sha256Sha256","e","asyncSha256Sha256","ripemd160","Ripemd160","asyncRipemd160","sha256Ripemd160","asyncSha256Ripemd160","sha512","Sha512","asyncSha512","hmac","hashFStr","data","hashf","oKeyPad","iKeyPad","sha1Hmac","asyncSha1Hmac","bitsize","sha256Hmac","asyncSha256Hmac","sha512Hmac","asyncSha512Hmac","globalWorkers","Workers","nativeWorkers","lastid","incompconsteRes","promisemap","Map","obj","methodname","id","result","fromResult","asyncObjectMethod","classObj","process","browser","Struct","fromObject","br","fromBr","asyncFromBr","bw","len","startbuf","gotlen","write","remainderlen","overlen","remainderbuf","asyncFromBuffer","toBw","asyncToBw","then","asyncFromHex","fromFastHex","asyncToBuffer","asyncFromString","asyncToHex","json","asyncFromJSON","val","Array","isArray","arr","push","JSON","stringify","cloneByJSON","Sig","nHashType","recovery","compressed","fromDer","fromCompact","fromTxFormat","toTxFormat","toCompact","toDer","rsbuf","fromRS","b2","b3","parseDer","readUInt8","derbuf","header","buflength","rheader","rlength","rneg","sheader","slength","sbuf","sneg","nLEnR","nLEnS","R","S","SIGHASH_ALL","SIGHASH_SINGLE","b1","rnbuf","snbuf","writeUInt8","SIGHASH_NONE","SIGHASH_FORKID","SIGHASH_ANYONECANPAY","Bw","bufs","writeInt8","writeUInt16BE","writeInt16BE","writeUInt16LE","writeInt16LE","writeUInt32LE","writeInt32LE","writeReverse","varIntBufNum","varIntBufBn","Math","floor","writeUInt64LEBn","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","Uint8Array","__proto__","arg","encodingOrOffset","allocUnsafe","TypeError","ArrayBuffer","array","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","string","encoding","isEncoding","actual","checked","buffer","type","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","start","end","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","isNaN","arrayIndexOf","indexOf","lastIndexOf","indexSize","arrLength","valLength","String","read","readUInt16BE","foundIndex","found","j","hexWrite","offset","Number","remaining","strLen","parsed","substr","utf8Write","blitBuffer","asciiWrite","byteArray","charCodeAt","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","min","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","apply","decodeCodePointsArray","SlowBuffer","INSPECT_MAX_BYTES","global","foo","subarray","typedArraySupport","poolSize","_augment","species","configurable","allocUnsafeSlow","_isBuffer","a","x","y","list","pos","swap16","swap32","swap64","arguments","equals","inspect","max","match","join","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","_arr","ret","out","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeIntLE","limit","writeIntBE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","code","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","trim","replace","stringtrim","base64clean","src","dst","PubKey","point","toFastHex","privKey","getG","fromPrivKey","workersResult","asyncFromPrivKey","Boolean","xbuf","fromX","ybuf","odd","getX","getY","prefix","isInfinity","validate","Script","chunks","eof","opCodeNum","err","chunk","tokens","split","token","tstr","cbuf","tbuf","writeBuffer","opstr","writeBn","fromBitcoindString","opCode","fromAsmString","_chunkToString","numstr","dataBuf","writeOpCode","fromOpReturnData","fromSafeData","dataBufs","fromSafeDataArray","isSafeDataOut","isOpReturn","hashBuf","fromPubKeyHash","pubKeys","sort","pubKey1","pubKey2","buf1","sortPubKeys","fromPubKeys","filter","isPushOnly","every","IsTxDer","script","splice","writeScript","writeString","number","writeNumber","VarInt","readVarIntBuf","writeVarIntBn","fromBn","writeVarIntNum","readVarIntBn","readVarIntNum","ec","curves","secp256k1","_Point","curve","Point","isRed","isOdd","_point","pointFromX","copyFrom","getN","bn1","bn2","mulAdd","_x","_y","parse","_g","g","toArray","assert","msg","inherits","ctor","superCtor","super_","TempCtor","BN","isBN","negative","words","red","_init","wordSize","parseHex","z","parseBase","move","dest","left","right","_initNumber","_initArray","_parseHex","_parseBase","_strip","ceil","w","off","limbLen","limbPow","total","word","imuln","_iaddn","_move","clone","_expand","_normSign","for","zeros","groupSizes","groupBases","padding","carry","groupSize","groupBase","isZero","modrn","idivn","toArrayLike","smallMulTo","self","k","ncarry","rword","maxJ","ArrayType","reqLength","allocate","_toArrayLikeLE","position","shift","_toArrayLikeBE","clz32","_countBits","_zeroBits","bitLength","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","bl1","bh1","bl2","bh2","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","FFTM","mulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","conjugate","normalize13b","ws","round","convert13b","stub","ph","mulp","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","isNegNum","muln","sqr","isqr","toBitArray","q","iushln","carryMask","newCarry","ishln","iushrn","hint","extended","h","mask","maskedWords","ishrn","shln","shrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","diff","qj","divmod","positive","divn","divRound","dm","half","r2","andln","acc","modn","egcd","A","B","C","D","isEven","yp","xp","im","jm","gcd","_invmp","x1","x2","delta","cmpn","bincn","ucmp","gtn","gten","gte","ltn","lten","lte","eqn","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","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","input","output","outLen","prev","next","mod3","one","nOne","lpow","inv","wnd","current","currentLen","mont","u","Br","readReverse","first","readUInt64LEBn","TxIn","txHashBuf","txOutNum","scriptVi","nSequence","setScript","fromProperties","txOut","pubKey","isPubKeyHashOut","LOCKTIME_VERIFY_SEQUENCE","SEQUENCE_FINAL","SEQUENCE_LOCKTIME_DISABLE_FLAG","SEQUENCE_LOCKTIME_TYPE_FLAG","SEQUENCE_LOCKTIME_MASK","SEQUENCE_LOCKTIME_GRANULARITY","Tx","versionBytesNum","txInsVi","txIns","txOutsVi","txOuts","nLockTime","txIn","txInsNum","txOutsNum","nIn","subScript","valueBn","flags","hashCache","SCRIPT_ENABLE_SIGHASH_FORKID","hashPrevouts","hashSequence","hashOutputs","prevoutsHashBuf","sequenceHashBuf","outputsHashBuf","txcopy","cloneByBuffer","removeCodeseparators","keyPair","sighash","sign","sig","enforceLowS","verify","hasNullInput","second","MAX_MONEY","Random","getRandomBuffer","writable","Constants","MaxSize","Port","Address","pubKeyHash","payToScriptHash","Bip32","Block","maxNBits","magicNum","Msg","PrivKey","versionByteNum","TxBuilder","dust","feePerKbNum","timeout","Testnet","assign","Mainnet","Regtest","STN","Default","getConstants","TxOut","copyProps","SafeBuffer","KeyPair","buflen1","buflen2","privKeybuf","pubKeybuf","fromRandom","asyncFromRandom","constants","privBuf","condition","encode","decode","fromWif","toWif","Base58Check","csum","hash4","checkedBuf","isSurrogatePair","htonl","zero2","zero8","enc","toHex32","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","sum32_5","sum64","ah","al","bh","sum64_hi","bl","sum64_lo","sum64_4_hi","ch","cl","dh","dl","sum64_4_lo","sum64_5_hi","eh","el","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","run","marker","runClearTimeout","Item","noop","nextTick","title","env","argv","version","versions","on","addListener","once","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","Aescbc","encrypt","messageBuf","cipherKeyBuf","ivBuf","concatIvBuf","ctBuf","decrypt","encBuf","utils","common","sha","ripemd","sha224","sha384","fromPubKeyHashBuf","fromPubKey","asyncFromPubKey","randomPrivKey","addrstr","address","isValid","pubKeyHashBuf","repeat","fromTxInScript","fromTxOutScript","versionByteBuf","Ecdsa","verified","Qprime","sig2PubKey","calcrecovery","badrs","v","T","isYOdd","isSecondKey","G","errm","message","eNeg","rInv","Q","ecdsa","asyncSig2PubKey","hasLowS","sinv","u1","u2","deterministicK","randomK","verifyStr","asyncSign","asyncVerify","minAssert","minUtils","getNAF","naf","getJSF","k1","k2","jsf","d1","d2","m8","m14","m24","cachedProperty","computer","parseBytes","intFromLE","equal","Function","window","codes","createErrorType","Base","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","getMessage","oneOf","expected","thing","determiner","search","this_len","substring","endsWith","objectKeys","Duplex","Readable","Writable","method","options","allowHalfOpen","readable","onend","_writableState","ended","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","finalSize","_block","_finalSize","_blockSize","_len","block","accum","assigned","remainder","_update","rem","lowBits","highBits","_hash","BlockHeader","prevBlockHashBuf","merkleRootBuf","time","nonce","Interp","tx","stack","altStack","pc","pBeginCodeHash","nOpCount","ifStack","errStr","defaultFlags","fromJSONNoTx","jsonNoTxBufLEn","jsonNoTxBuf","txbuflen","txbuf","toJSONNoTx","flagstr","SCRIPT_VERIFY_NONE","SCRIPT_VERIFY_P2SH","SCRIPT_VERIFY_STRICTENC","SCRIPT_VERIFY_DERSIG","SCRIPT_VERIFY_LOW_S","SCRIPT_VERIFY_NULLDUMMY","SCRIPT_VERIFY_SIGPUSHONLY","SCRIPT_VERIFY_MINIMALDATA","SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS","SCRIPT_VERIFY_CLEANSTACK","SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY","SCRIPT_VERIFY_CHECKSEQUENCEVERIFY","hasDefinedHashType","isCompressedOrUncompressed","LOCKTIME_THRESHOLD","txToSequence","nLockTimeMask","txToSequenceMasked","nSequenceMasked","fSuccess","step","fExec","MAX_SCRIPT_ELEMENT_SIZE","checkMinimalPush","false","nLockTimebuf","checkLockTime","nSequencebuf","checkSequence","fValue","pop","castToBool","buf3","spliced","x3","fEqual","true","bn3","bufHash","bufSig","bufPubKey","findAndDelete","checkSigEncoding","checkPubKeyEncoding","nKeysCount","ikey","nSigsCount","isig","fOk","vch1","vch2","n1","n2","scriptSig","scriptPubKey","results","success","stackCopy","eval","initialize","isScriptHashOut","pubKeySerialized","scriptPubKey2","scriptStr","getDebugObject","Aes","keyBuf","buf2Words","words2Buf","Cbc","buf2BlocksBuf","bytesize","blockBufs","blockBuf","pkcs7Pad","blockBufs2Buf","last","pkcs7Unpad","blockCipher","encBufs","encryptBlocks","decryptBlocks","encryptBlock","xorbuf","xorBufs","decryptBlock","padbytesize","pad","paddedbuf","padlength","padbuf","padbuf2","Config","values","keyDefined","getValue","config","variables","defaultValue","addValue","NETWORK","build","BlockHash","pending","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","Base58","WorkersResult","isError","error","resbuflen","TxOutMap","label","txhashhex","index","AES","encKey","decKey","_tables","_precompute","sbox","decTable","keyLen","rcon","_key","_crypt","Uint32Array","xInv","x4","tEnc","tDec","encTable","sboxInv","th","c2","nInnerRounds","kIndex","table","t0","t1","t2","t3","basex","HashCache","wordList","space","blockHeader","txsVi","txs","txsNum","txsbufs","fromBuffers","iterator","MAX_BLOCK_SIZE","elliptic","rand","pbkdf2","pbkdf2Sync","hexRegEx","ERR_STREAM_PREMATURE_CLOSE","eos","stream","callback","called","onlegacyfinish","onfinish","writableEnded","finished","readableEnded","endEmitted","onerror","onclose","onrequest","req","setHeader","abort","isRequest","SigOperations","nScriptChunk","addressStr","log","setMany","Rand","generate","_rand","getBytes","getByte","crypto","getRandomValues","msCrypto","randomBytes","short","BaseCurve","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","_fixedNafMul","doubles","_getDoubles","I","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","encodeCompressed","_encode","compact","precompute","power","beta","_getBeta","_hasDoubles","dbl","pre","PresetCurve","lambda","basis","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","W","f","T1","T2","sha512_K","SHA512","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","checkBuffer","password","salt","iterations","keylen","MAX_ALLOC","defaultEncoding","md5","RIPEMD160","checkParameters","ZEROS","sizes","rmd160","Hmac","alg","saltLen","shaFunc","getDigest","blocksize","ipad","opad","ipad1","ipad2","DK","block1","destPos","hLen","U","Transform","HashBase","_blockOffset","_length","_finalized","_transform","_flush","throwIfNotStringOrBuffer","ReadableState","EventEmitter","EElistenerCount","emitter","Stream","OurUint8Array","debug","debugUtil","debuglog","StringDecoder","createReadableStreamAsyncIterator","BufferList","destroyImpl","getHighWaterMark","_require$codes","ERR_INVALID_ARG_TYPE","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","awaitDrain","readingMore","decoder","_read","destroy","_destroy","readableAddChunk","addToFront","skipChunkCheck","er","state","emitReadable","emitReadable_","onEofChunk","chunkInvalid","getPrototypeOf","_uint8ArrayToBuffer","addChunk","maybeReadMore","unshift","_undestroy","undestroy","cb","isPaused","setEncoding","head","content","clear","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","listenerCount","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","xs","nOrig","doRead","pipe","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","ondrain","ondata","cleanedUp","needDrain","pipeOnDrain","pause","event","fn","_events","dests","ev","wrap","_this","asyncIterator","_fromList","iterable","ReflectOwnKeys","Reflect","ReflectApply","receiver","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","init","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","warned","count","console","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","setMaxListeners","getMaxListeners","doError","context","handler","originalListener","spliceOne","rawListeners","eventNames","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","errorEmitted","ending","finalCalled","prefinished","rState","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","CorkedRequest","entry","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","WritableState","internalUtil","deprecate","realHasInstance","ERR_MULTIPLE_CALLBACK","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","noDecode","decodeStrings","writing","corked","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","bufferedRequestCount","_write","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","utf8CheckIncomplete","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","flush","done","err2","K","_w","maj","sigma0","sigma1","gamma0","_a","_b","_c","_d","_e","_f","_h","M","H","Ch","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","depth","parentFingerPrint","childIndex","chainCode","fromSeed","asyncFromSeed","keyBytes","isPrivate","isPublic","path","bip32","usePrivate","deriveChild","ib","il","ir","ilG","Kpar","Ki","newpub","pubKeyhash","Bip39","mnemonic","seed","wordlist","Wordlist","mnemoniclen","seedlen","entropy2Mnemonic","mnemonic2Seed","bip39","fromEntropy","asyncFromEntropy","passphrase","bin","hashbits","wi","ind","cs","hashBits","nonhashBits","expectedHashBits","check","normalize","mbuf","pbuf","Bsm","magicBytes","sigstr","sigbuf","magicHash","uTxOutMap","sigOperations","changeScript","changeAmountBn","feeAmountBn","sigsPerInput","dustChangeToFees","changeAddress","toTxOutScript","addOne","fromPubKeyHashTxOut","addSigOperation","addr","outputToScript","outAmountBn","addTxOut","extraInputsNum","inAmountBn","addTxIn","scriptSize","extraFeeAmount","fee","estimateSize","useAllInputs","minFeeAmountBn","buildOutputs","changeTxOut","buildInputs","estimateFee","present","isPubKeyHashIn","getSig","fillSig","asyncGetSig","keyPairs","addressStrMap","signTxIn","Ach","hmacbuf","asyncEncrypt","hmacbuf2","asyncDecrypt","Ecies","ivkEkM","P","Sbuf","iv","kE","kM","electrumEncrypt","toPubKey","fromKeyPair","noKey","Rbuf","ciphertext","BIE1","electrumDecrypt","toPrivKey","pub","hmac2","bitcoreEncrypt","RBuf","kEkM","asyncBitcoreEncrypt","bitcoreDecrypt","kB","asyncBitcoreDecrypt","generated","Merkle","merkle1","merkle2","hashBuf1","hashBuf2","log2","isInteger","lastval","bufs1","bufs2","fromBufferArrays","bufs11","bufs12","bufs21","bufs22","leavesNum","webpackPolyfill","paths","children","_Buffer","ALPHABET","BASE_MAP","charAt","xc","BASE","LEADER","FACTOR","iFACTOR","decodeUnsafe","source","psz","zeroes","b256","it3","it4","vch","pbegin","pend","b58","it1","it2","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","parts","len2","encodeChunk","lookup","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","y2","len1","_endoSplit","v1","v2","c1","p1","p2","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","endoMul","obj2point","nx","ny","ys1","dyinv","jmulAdd","negate","zinv","zinv2","ay","pz2","z2","s1","s2","h2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","eqXToP","zs","sha1_K","SHA1","SHA224","SHA384","Kh","E","Ah","Bh","Dh","Eh","rh","sh","inner","outer","HmacDRBG","Signature","EC","nh","keyFromPrivate","priv","fromPrivate","keyFromPublic","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","entropyEnc","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","iter","kp","kpX","recoveryParam","canonical","signature","getPublic","recoverPubKey","getKeyRecoveryParam","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","_hmac","kmac","reseed","addEnc","temp","_importPrivate","privEnc","_importPublic","pubEnc","reason","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","slen","toDER","backHalf","ZERO_BUF","subtle","toBrowser","checks","browserPbkdf2","algo","importKey","deriveBits","Promise","promise","resolvePromise","resolve","prom","catch","checkNative","resp","MD5","ARRAY16","rotl","fnF","fnG","fnH","fnI","PassThrough","pipeline","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_defineProperty","_defineProperties","props","descriptor","custom","instance","Constructor","_classCallCheck","tail","protoProps","staticProps","hasStrings","_getString","_getBuffer","getOwnPropertyDescriptors","defineProperties","_objectSpread","customInspect","localStorage","trace","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","setPrototypeOf","reject","lastPromise","wrapForNext","_this2","_Object$create","ERR_MISSING_ARGS","destroyer","closed","to","popCallback","streams","destroys","reduce","zr","sl","sr","hr","fn1","fn2","fn3","fn4","fn5","ar","cr","dr","tl","tr","algorithm","Algorithm","Sha","rotl30","ft","rotl5","Sha224","Sha384","txOutMap","interp","checkStr","asyncVerifyStr","valueoutbn","txInmap","inputid","isCoinbase","verifyNIn","asyncVerifyNIn","interpFailure","deps","aes","bnjs","bs58","hashjs"],"mappings":"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A,OACA,QACA,SACA,UACA,UACA,QACA,SACA,SACA,UACA,SACA,UACA,QACA,QACA,QACA,SACA,QACA,WACA,SACA,UACA,SACA,UACA,UACA,UACA,MACA,QACA,UACA,SACA,QACA,UACA,QACA,OACA,SACA,OACA,QACA,QACA,MACA,QACA,QACA,OACA,SACA,UACA,SACA,SACA,QACA,MACA,WACA,SACA,UACA,MACA,SACA,UACA,QACA,SACA,SACA,SACA,UACA,OACA,SACA,SACA,WACA,UACA,UACA,QACA,SACA,OACA,SACA,OACA,SACA,UACA,UACA,QACA,QACA,QACA,OACA,UACA,QACA,UACA,OACA,OACA,WACA,QACA,QACA,MACA,UACA,UACA,OACA,SACA,SACA,SACA,MACA,SACA,UACA,SACA,OACA,QACA,SACA,SACA,QACA,OACA,SACA,UACA,SACA,OACA,SACA,QACA,SACA,SACA,UACA,QACA,OACA,QACA,UACA,OACA,SACA,SACA,UACA,SACA,UACA,MACA,OACA,OACA,UACA,OACA,QACA,SACA,QACA,QACA,QACA,UACA,QACA,QACA,QACA,QACA,QACA,UACA,SACA,OACA,OACA,QACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,SACA,SACA,SACA,OACA,SACA,SACA,MACA,MACA,UACA,QACA,QACA,QACA,QACA,QACA,SACA,QACA,SACA,QACA,SACA,QACA,QACA,WACA,SACA,SACA,QACA,UACA,QACA,QACA,SACA,QACA,SACA,UACA,QACA,OACA,OACA,SACA,SACA,SACA,SACA,SACA,QACA,MACA,WACA,OACA,SACA,QACA,OACA,UACA,QACA,QACA,SACA,OACA,OACA,OACA,OACA,SACA,OACA,MACA,QACA,SACA,QACA,SACA,QACA,SACA,SACA,UACA,UACA,UACA,MACA,SACA,OACA,QACA,SACA,QACA,OACA,OACA,OACA,SACA,SACA,SACA,MACA,UACA,QACA,WACA,SACA,SACA,QACA,UACA,OACA,UACA,SACA,SACA,SACA,UACA,SACA,UACA,QACA,QACA,WACA,SACA,QACA,UACA,SACA,QACA,OACA,QACA,QACA,SACA,OACA,SACA,QACA,UACA,QACA,QACA,UACA,SACA,SACA,UACA,UACA,QACA,QACA,QACA,WACA,SACA,UACA,OACA,QACA,QACA,OACA,UACA,OACA,OACA,QACA,QACA,SACA,QACA,SACA,QACA,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,QACA,OACA,QACA,UACA,SACA,QACA,QACA,UACA,OACA,SACA,OACA,OACA,UACA,QACA,SACA,UACA,OACA,UACA,QACA,SACA,UACA,UACA,UACA,UACA,WACA,UACA,WACA,UACA,WACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,UACA,OACA,SACA,QACA,UACA,SACA,SACA,SACA,QACA,SACA,QACA,SACA,QACA,OACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,OACA,UACA,QACA,QACA,SACA,OACA,QACA,SACA,QACA,UACA,QACA,SACA,UACA,SACA,QACA,MACA,UACA,OACA,UACA,MACA,WACA,UACA,UACA,UACA,QACA,UACA,SACA,OACA,QACA,MACA,SACA,OACA,QACA,SACA,SACA,OACA,WACA,OACA,MACA,OACA,SACA,SACA,SACA,WACA,SACA,UACA,WACA,WACA,OACA,UACA,SACA,OACA,SACA,QACA,UACA,SACA,SACA,SACA,UACA,OACA,SACA,SACA,UACA,QACA,SACA,SACA,WACA,SACA,SACA,OACA,UACA,UACA,SACA,SACA,UACA,SACA,SACA,UACA,OACA,UACA,QACA,OACA,SACA,OACA,SACA,UACA,UACA,UACA,SACA,WACA,SACA,OACA,WACA,WACA,UACA,OACA,UACA,WACA,UACA,WACA,SACA,SACA,UACA,QACA,SACA,WACA,MACA,OACA,UACA,SACA,SACA,SACA,QACA,OACA,OACA,SACA,OACA,QACA,SACA,QACA,UACA,OACA,QACA,QACA,QACA,QACA,QACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,OACA,SACA,OACA,QACA,OACA,QACA,UACA,QACA,QACA,QACA,OACA,QACA,SACA,OACA,OACA,OACA,UACA,UACA,OACA,OACA,UACA,SACA,MACA,QACA,SACA,QACA,QACA,WACA,UACA,UACA,WACA,WACA,QACA,OACA,SACA,SACA,UACA,SACA,UACA,SACA,UACA,QACA,SACA,QACA,MACA,UACA,UACA,QACA,SACA,UACA,SACA,SACA,UACA,QACA,SACA,SACA,SACA,SACA,SACA,QACA,SACA,QACA,WACA,UACA,QACA,QACA,MACA,QACA,QACA,UACA,QACA,QACA,SACA,QACA,UACA,SACA,UACA,SACA,WACA,OACA,QACA,SACA,QACA,UACA,SACA,WACA,SACA,UACA,SACA,UACA,WACA,UACA,UACA,QACA,QACA,OACA,SACA,SACA,SACA,SACA,UACA,SACA,UACA,SACA,QACA,MACA,UACA,SACA,OACA,UACA,OACA,QACA,QACA,OACA,QACA,OACA,SACA,SACA,MACA,QACA,UACA,OACA,UACA,MACA,QACA,SACA,UACA,QACA,WACA,UACA,WACA,UACA,MACA,OACA,OACA,SACA,QACA,WACA,QACA,QACA,MACA,QACA,UACA,QACA,SACA,OACA,OACA,SACA,QACA,OACA,OACA,SACA,SACA,OACA,OACA,QACA,SACA,OACA,MACA,UACA,MACA,OACA,QACA,QACA,OACA,SACA,OACA,SACA,OACA,QACA,QACA,QACA,SACA,QACA,QACA,MACA,OACA,QACA,MACA,OACA,OACA,SACA,OACA,OACA,QACA,SACA,SACA,OACA,UACA,QACA,UACA,SACA,SACA,QACA,MACA,UACA,QACA,WACA,QACA,SACA,SACA,OACA,QACA,QACA,QACA,SACA,QACA,OACA,MACA,QACA,UACA,OACA,SACA,SACA,OACA,SACA,UACA,OACA,MACA,SACA,UACA,SACA,SACA,UACA,MACA,OACA,OACA,SACA,QACA,OACA,UACA,SACA,QACA,SACA,UACA,UACA,QACA,QACA,OACA,SACA,SACA,UACA,OACA,OACA,OACA,SACA,QACA,QACA,QACA,UACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,UACA,OACA,OACA,QACA,UACA,SACA,SACA,SACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,UACA,QACA,QACA,OACA,QACA,OACA,UACA,QACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,MACA,MACA,QACA,OACA,OACA,SACA,UACA,OACA,QACA,SACA,OACA,QACA,UACA,MACA,OACA,OACA,SACA,OACA,SACA,QACA,QACA,WACA,SACA,QACA,SACA,OACA,MACA,OACA,SACA,OACA,OACA,OACA,MACA,OACA,UACA,QACA,SACA,OACA,OACA,UACA,SACA,OACA,QACA,OACA,OACA,OACA,SACA,QACA,WACA,OACA,QACA,OACA,QACA,MACA,OACA,QACA,SACA,QACA,UACA,SACA,OACA,SACA,QACA,OACA,UACA,SACA,MACA,OACA,OACA,WACA,OACA,SACA,MACA,UACA,UACA,QACA,UACA,UACA,SACA,SACA,SACA,UACA,UACA,OACA,UACA,SACA,WACA,QACA,WACA,SACA,WACA,SACA,UACA,SACA,SACA,UACA,UACA,SACA,SACA,SACA,QACA,WACA,QACA,UACA,SACA,SACA,SACA,UACA,UACA,SACA,WACA,OACA,SACA,SACA,UACA,OACA,SACA,UACA,QACA,OACA,QACA,SACA,SACA,MACA,OACA,UACA,QACA,QACA,QACA,MACA,OACA,OACA,UACA,MACA,QACA,QACA,OACA,SACA,SACA,OACA,OACA,WACA,OACA,OACA,UACA,MACA,OACA,MACA,SACA,OACA,UACA,OACA,MACA,UACA,OACA,SACA,OACA,OACA,QACA,QACA,OACA,MACA,QACA,QACA,SACA,OACA,OACA,OACA,WACA,SACA,QACA,QACA,QACA,QACA,UACA,OACA,MACA,OACA,UACA,QACA,OACA,SACA,OACA,QACA,QACA,UACA,OACA,MACA,QACA,SACA,UACA,QACA,OACA,SACA,OACA,UACA,SACA,SACA,QACA,OACA,UACA,UACA,UACA,OACA,OACA,QACA,OACA,OACA,QACA,OACA,OACA,SACA,OACA,SACA,OACA,SACA,OACA,OACA,UACA,QACA,OACA,QACA,SACA,OACA,OACA,UACA,OACA,SACA,OACA,QACA,QACA,UACA,SACA,QACA,QACA,SACA,SACA,UACA,MACA,QACA,SACA,OACA,OACA,OACA,QACA,OACA,SACA,MACA,SACA,UACA,QACA,UACA,SACA,QACA,SACA,QACA,SACA,SACA,SACA,WACA,OACA,OACA,SACA,QACA,WACA,OACA,SACA,SACA,UACA,OACA,SACA,OACA,UACA,OACA,WACA,QACA,QACA,SACA,OACA,SACA,SACA,UACA,OACA,QACA,QACA,QACA,QACA,OACA,UACA,QACA,SACA,SACA,WACA,OACA,UACA,QACA,OACA,UACA,QACA,SACA,UACA,SACA,SACA,OACA,UACA,MACA,QACA,UACA,SACA,QACA,SACA,MACA,SACA,UACA,SACA,UACA,QACA,OACA,QACA,OACA,UACA,WACA,SACA,SACA,QACA,WACA,QACA,OACA,QACA,OACA,SACA,OACA,WACA,SACA,SACA,WACA,QACA,OACA,SACA,SACA,UACA,OACA,QACA,OACA,SACA,SACA,QACA,SACA,SACA,OACA,OACA,OACA,WACA,UACA,UACA,SACA,QACA,OACA,MACA,UACA,UACA,QACA,OACA,OACA,OACA,QACA,QACA,QACA,UACA,SACA,SACA,QACA,OACA,UACA,OACA,UACA,SACA,QACA,MACA,UACA,SACA,QACA,MACA,MACA,OACA,SACA,SACA,UACA,UACA,SACA,UACA,QACA,QACA,UACA,OACA,MACA,QACA,SACA,QACA,MACA,OACA,MACA,QACA,UACA,OACA,OACA,MACA,QACA,SACA,OACA,OACA,QACA,UACA,SACA,SACA,SACA,QACA,UACA,QACA,WACA,QACA,SACA,WACA,SACA,UACA,QACA,UACA,QACA,SACA,UACA,OACA,OACA,OACA,MACA,QACA,SACA,SACA,QACA,OACA,SACA,OACA,OACA,SACA,OACA,QACA,QACA,QACA,UACA,QACA,SACA,SACA,OACA,SACA,QACA,OACA,QACA,OACA,UACA,SACA,UACA,QACA,OACA,UACA,QACA,SACA,OACA,UACA,UACA,MACA,UACA,SACA,SACA,SACA,UACA,SACA,SACA,MACA,QACA,QACA,SACA,WACA,QACA,SACA,UACA,QACA,MACA,SACA,OACA,QACA,OACA,UACA,OACA,SACA,QACA,QACA,QACA,SACA,UACA,QACA,OACA,SACA,SACA,QACA,OACA,SACA,OACA,OACA,QACA,QACA,OACA,SACA,OACA,OACA,OACA,UACA,UACA,WACA,WACA,OACA,SACA,UACA,UACA,SACA,QACA,WACA,SACA,UACA,SACA,UACA,UACA,SACA,UACA,QACA,QACA,UACA,QACA,WACA,SACA,UACA,QACA,UACA,UACA,UACA,SACA,UACA,UACA,UACA,QACA,WACA,UACA,UACA,QACA,UACA,SACA,UACA,OACA,OACA,QACA,UACA,QACA,QACA,QACA,WACA,SACA,UACA,QACA,OACA,MACA,SACA,UACA,UACA,UACA,UACA,WACA,QACA,OACA,OACA,QACA,SACA,UACA,OACA,OACA,QACA,QACA,OACA,OACA,QACA,QACA,OACA,QACA,SACA,QACA,QACA,OACA,OACA,SACA,QACA,MACA,QACA,QACA,OACA,SACA,QACA,UACA,SACA,UACA,SACA,SACA,UACA,SACA,UACA,SACA,SACA,SACA,SACA,UACA,SACA,QACA,UACA,SACA,OACA,SACA,WACA,SACA,SACA,SACA,QACA,OACA,SACA,SACA,SACA,UACA,SACA,UACA,SACA,WACA,SACA,WACA,WACA,SACA,SACA,UACA,SACA,UACA,SACA,SACA,SACA,SACA,MACA,SACA,OACA,OACA,OACA,QACA,QACA,QACA,QACA,OACA,OACA,SACA,OACA,SACA,QACA,QACA,OACA,QACA,QACA,SACA,SACA,UACA,OACA,SACA,OACA,OACA,SACA,QACA,QACA,QACA,QACA,SACA,OACA,MACA,OACA,MACA,SACA,QACA,MACA,SACA,UACA,OACA,OACA,QACA,SACA,QACA,OACA,SACA,OACA,SACA,OACA,UACA,UACA,QACA,UACA,OACA,MACA,QACA,OACA,QACA,UACA,QACA,SACA,SACA,UACA,WACA,WACA,QACA,QACA,SACA,SACA,QACA,MACA,SACA,SACA,OACA,SACA,SACA,UACA,WACA,OACA,OACA,UACA,SACA,OACA,UACA,SACA,QACA,WACA,SACA,UACA,UACA,SACA,QACA,QACA,SACA,QACA,UACA,QACA,OACA,QACA,UACA,SACA,QACA,QACA,OACA,SACA,QACA,OACA,QACA,OACA,QACA,WACA,QACA,SACA,QACA,UACA,MACA,UACA,OACA,OACA,QACA,QACA,OACA,SACA,OACA,QACA,SACA,UACA,SACA,QACA,OACA,QACA,SACA,UACA,MACA,OACA,QACA,SACA,MACA,QACA,OACA,QACA,QACA,OACA,OACA,QACA,UACA,QACA,QACA,SACA,OACA,SACA,OACA,OACA,QACA,QACA,QACA,QACA,QACA,SACA,QACA,QACA,OACA,QACA,OACA,OACA,SACA,SACA,OACA,OACA,OACA,QACA,UACA,QACA,WACA,QACA,UACA,OACA,OACA,QACA,OACA,OACA,QACA,OACA,SACA,QACA,QACA,QACA,UACA,QACA,QACA,UACA,QACA,QACA,QACA,SACA,QACA,SACA,QACA,OACA,SACA,QACA,QACA,UACA,QACA,QACA,OACA,QACA,SACA,SACA,MACA,SACA,UACA,WACA,SACA,UACA,QACA,QACA,SACA,QACA,QACA,QACA,QACA,OACA,QACA,QACA,OACA,OACA,SACA,QACA,QACA,QACA,QACA,UACA,QACA,QACA,QACA,QACA,WACA,SACA,SACA,SACA,WACA,UACA,QACA,UACA,QACA,UACA,SACA,SACA,UACA,OACA,SACA,SACA,QACA,UACA,OACA,SACA,MACA,QACA,SACA,QACA,SACA,UACA,OACA,UACA,QACA,WACA,WACA,SACA,UACA,UACA,UACA,QACA,OACA,QACA,QACA,QACA,QACA,OACA,QACA,SACA,QACA,SACA,UACA,QACA,SACA,QACA,SACA,MACA,OACA,SACA,OACA,OACA,OACA,SACA,OACA,QACA,SACA,OACA,QACA,OACA,OACA,MACA,SACA,SACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,SACA,QACA,OACA,QACA,OACA,UACA,QACA,SACA,QACA,QACA,UACA,SACA,OACA,QACA,OACA,SACA,OACA,OACA,MACA,QACA,SACA,QACA,QACA,UACA,QACA,UACA,MACA,WACA,SACA,QACA,SACA,WACA,OACA,SACA,UACA,OACA,QACA,MACA,QACA,SACA,QACA,UACA,WACA,OACA,QACA,UACA,SACA,QACA,OACA,MACA,QACA,QACA,UACA,SACA,QACA,WACA,OACA,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,QACA,UACA,OACA,OACA,SACA,UACA,QACA,OACA,QACA,UACA,QACA,QACA,MACA,OACA,UACA,SACA,OACA,SACA,SACA,OACA,SACA,SACA,SACA,QACA,OACA,QACA,MACA,OACA,UACA,OACA,WACA,SACA,UACA,QACA,UACA,QACA,OACA,SACA,SACA,UACA,UACA,SACA,OACA,WACA,UACA,SACA,QACA,UACA,SACA,SACA,UACA,SACA,OACA,QACA,QACA,QACA,OACA,QACA,MACA,OACA,SACA,UACA,QACA,UACA,SACA,SACA,QACA,QACA,SACA,QACA,MACA,SACA,QACA,UACA,OACA,QACA,UACA,SACA,SACA,UACA,QACA,OACA,SACA,UACA,OACA,SACA,UACA,SACA,UACA,UACA,UACA,QACA,OACA,UACA,UACA,SACA,UACA,QACA,OACA,QACA,SACA,QACA,QACA,QACA,QACA,OACA,UACA,SACA,OACA,SACA,OACA,QACA,OACA,OACA,OACA,SACA,OACA,UACA,OAC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EF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINtT,IAAK,CACH7O,IAAK,EACLmiB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEA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A,MACA,OACA,OACA,MACA,MACA,QACA,QACA,MACA,MACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,QACA,MACA,QACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,SACA,MACA,MACA,OACA,MACA,OACA,SACA,OACA,QACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,QACA,OACA,SACA,OACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,QACA,OACA,MACA,QACA,OACA,MACA,OACA,OACA,QACA,QACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,QACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,QACA,MACA,OACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,QACA,QACA,MACA,OACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,MACA,OACA,QACA,QACA,MACA,QACA,OACA,OACA,QACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,SACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,QACA,OACA,OACA,QACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,MACA,OACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,QACA,MACA,SACA,SACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,SACA,MACA,QACA,MACA,MACA,MACA,MACA,QACA,MACA,SACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,QACA,OACA,QACA,MACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,OACA,OACA,QACA,MACA,MACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,QACA,MACA,MACA,OACA,MACA,MACA,QACA,QACA,MACA,QACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,QACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,QACA,OACA,SACA,OACA,MACA,OACA,QACA,MACA,OACA,OACA,OACA,OACA,MACA,OACA,MACA,SACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,QACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,QACA,OACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,SACA,OACA,OACA,OACA,OACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,QACA,OACA,QACA,MACA,OACA,MACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,QACA,MACA,OACA,OACA,OACA,QACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,SACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,QACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,QACA,QACA,QACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,MACA,OACA,OACA,MACA,QACA,QACA,OACA,QACA,MACA,OACA,QACA,QACA,QACA,QACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,QACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,MACA,QACA,OACA,MACA,MACA,SACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,MACA,OACA,OACA,SACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,MACA,OACA,QACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,MACA,SACA,OACA,OACA,OACA,OACA,MACA,QACA,OACA,MACA,MACA,QACA,MACA,UACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,QACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,SACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,SACA,QACA,MACA,OACA,OACA,OACA,MACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,QACA,MACA,QACA,OACA,MACA,OACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,UACA,OACA,MACA,MACA,MACA,OACA,OACA,QACA,OACA,MACA,OACA,MACA,MACA,OACA,MACA,OACA,SACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,SACA,OACA,QACA,OACA,SACA,MACA,MACA,OACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,QACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,MACA,QACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,QACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,QACA,OACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,SACA,OACA,SACA,QACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,QACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,OACA,QACA,OACA,OACA,QACA,OACA,QACA,MACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,QACA,OACA,QACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,UACA,MACA,OACA,QACA,QACA,MACA,MACA,OACA,OACA,OACA,QACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,QACA,QACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,OACA,OACA,MACA,QACA,MACA,OACA,MACA,OACA,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,OACA,OACA,SACA,OACA,MACA,MACA,SACA,MACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,QACA,MACA,MACA,OACA,OACA,QACA,OACA,MACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,QACA,OACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,OACA,OACA,OACA,QACA,OACA,MACA,OACA,OACA,OACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,QACA,MACA,SACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,SACA,MACA,OACA,OACA,OACA,OACA,MACA,OACA,QACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,QACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,SACA,MACA,OACA,QACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,QACA,QACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,SACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,QACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,QACA,OACA,MACA,OACA,OACA,OACA,OACA,QACA,MACA,MACA,QACA,MACA,MACA,MACA,OACA,OACA,OACA,SACA,SACA,MACA,MACA,OACA,QACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,QACA,MACA,QACA,MACA,UACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,MACA,OACA,OACA,QACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,OACA,QACA,OACA,MACA,OACA,QACA,OACA,OACA,MACA,OACA,OACA,OACA,OACA,OACA,QACA,OACA,OACA,MACA,MACA,OACA,OACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,OACA,OACA,MACA,OACA,QACA,MACA,OAEFA,EAASC,MAAQ,I,mNCt/DjB,MAAM,UAAmB,IACvB,YAAavK,EAAIimC,EAAU1lC,EAAQ2lC,GACjC7tE,MAAM,CAAE2nC,KAAIimC,WAAU1lC,SAAQ2lC,WAchC,OAAQj3C,EAAQ,IAAOE,8BACrB,OAAQ72B,KAAK6tE,aAAe7tE,KAAK4iC,UAAUjM,GAQ7C,kBAAmBA,GACjB,MAAMiM,QAAkB5iC,KAAK8tE,eAAen3C,GAC5C,OAAQ32B,KAAK6tE,aAAejrC,EAM9B,cAAe8E,EAAIimC,EAAUh3C,GAC3B,OAAO,IAAI,EAAW+Q,EAAIimC,GAAU/1C,OAAOjB,GAG7C,mBAAoB+Q,EAAIimC,EAAUh3C,GAChC,OAAO,IAAI,EAAW+Q,EAAIimC,GAAU7qC,YAAYnM,GAQlD,WAEE,GAA6B,IAAzB32B,KAAK0nC,GAAGzR,MAAMj1B,QAA+C,IAA/BhB,KAAK0nC,GAAG1R,QAAQh0B,WAEhD,OADAhC,KAAKioC,OAAS,0BACPjoC,KAAKioC,OAEd,GAA8B,IAA1BjoC,KAAK0nC,GAAGvR,OAAOn1B,QAAgD,IAAhChB,KAAK0nC,GAAGxR,SAASl0B,WAElD,OADAhC,KAAKioC,OAAS,2BACPjoC,KAAKioC,OAId,GAAIjoC,KAAK0nC,GAAG9lC,WAAWZ,OAAS,IAAMyxC,eAEpC,OADAzyC,KAAKioC,OAAS,0CACPjoC,KAAKioC,OAId,IAAI8lC,EAAa,IAAI,IAAG,GACxB,IAAK,IAAI/3E,EAAI,EAAGA,EAAIgK,KAAK0nC,GAAGvR,OAAOn1B,OAAQhL,IAAK,CAC9C,MAAMq/B,EAAQr1B,KAAK0nC,GAAGvR,OAAOngC,GAC7B,GAAIq/B,EAAMqB,QAAQ/yB,GAAG,GAEnB,OADA3D,KAAKioC,OAAS,qBAAuBjyC,EAAI,YAClCgK,KAAKioC,OAEd,GAAI5S,EAAMqB,QAAQ3xB,GAAG,IAAGgzB,WAEtB,OADA/3B,KAAKioC,OAAS,qBAAuBjyC,EAAI,0BAClCgK,KAAKioC,OAGd,GADA8lC,EAAaA,EAAW5pE,IAAIkxB,EAAMqB,SAC9Bq3C,EAAWhpE,GAAG,IAAGgzB,WAGnB,OAFA/3B,KAAKioC,OACD,qBAAuBjyC,EAAI,uCACxBgK,KAAKioC,OAKhB,MAAM+lC,EAAU,GAChB,IAAK,IAAIh4E,EAAI,EAAGA,EAAIgK,KAAK0nC,GAAGzR,MAAMj1B,OAAQhL,IAAK,CAC7C,MAAMqgC,EAAOr2B,KAAK0nC,GAAGzR,MAAMjgC,GACrBi4E,EAAU53C,EAAKtB,UAAUz0B,SAAS,OAAS,IAAM+1B,EAAKrB,SAC5D,QAAyB70B,IAArB6tE,EAAQC,GAEV,OADAjuE,KAAKioC,OAAS,qBAAuBjyC,EAAI,mBAClCgK,KAAKioC,OAEd+lC,EAAQC,IAAW,EAGrB,GAAIjuE,KAAK0nC,GAAGwmC,aAAc,CACxB,MAAMttE,EAAMZ,KAAK0nC,GAAGzR,MAAM,GAAGrZ,OAAOhb,WACpC,GAAIhB,EAAII,OAAS,GAAKJ,EAAII,OAAS,IAEjC,OADAhB,KAAKioC,OAAS,0CACPjoC,KAAKioC,YAGd,IAAK,IAAIjyC,EAAI,EAAGA,EAAIgK,KAAK0nC,GAAGzR,MAAMj1B,OAAQhL,IACxC,GAAIgK,KAAK0nC,GAAGzR,MAAMjgC,GAAG6hC,eAEnB,OADA73B,KAAKioC,OAAS,qBAAuBjyC,EAAI,kBAClCgK,KAAKioC,OAIlB,OAAO,EAOT,UAAWtR,GACT,IAAK,IAAI3gC,EAAI,EAAGA,EAAIgK,KAAK0nC,GAAGzR,MAAMj1B,OAAQhL,IACxC,IAAKgK,KAAKmuE,UAAUn4E,EAAG2gC,GAErB,OADA32B,KAAKioC,OAAS,SAAWjyC,EAAI,wBACtBgK,KAAKioC,OAGhB,OAAO,EAGT,qBAAsBtR,GACpB,IAAK,IAAI3gC,EAAI,EAAGA,EAAIgK,KAAK0nC,GAAGzR,MAAMj1B,OAAQhL,IAAK,CAE7C,UADwBgK,KAAKouE,eAAep4E,EAAG2gC,GAG7C,OADA32B,KAAKioC,OAAS,SAAWjyC,EAAI,wBACtBgK,KAAKioC,OAGhB,OAAO,EAOT,UAAWzR,EAAKG,GACd,MAAMN,EAAOr2B,KAAK0nC,GAAGzR,MAAMO,GACrBuV,EAAY1V,EAAKzZ,OACjByY,EAAQr1B,KAAK2tE,SAAS92E,IAAIw/B,EAAKtB,UAAWsB,EAAKrB,UACrD,IAAKK,EAEH,OADA6wB,QAAQ9R,IAAI,UAAY/d,EAAKrB,SAAW,eACjC,EAET,MAAMgX,EAAe3W,EAAMzY,OACrB8Z,EAAUrB,EAAMqB,QAUtB,OATA12B,KAAK4tE,OAAS,IAAI,IACD5tE,KAAK4tE,OAAOh2C,OAC3BmU,EACAC,EACAhsC,KAAK0nC,GACLlR,EACAG,EACAD,GAKJ,qBAAsBF,EAAKG,GACzB,MAAMN,EAAOr2B,KAAK0nC,GAAGzR,MAAMO,GACrBuV,EAAY1V,EAAKzZ,OACjByY,EAAQr1B,KAAK2tE,SAAS92E,IAAIw/B,EAAKtB,UAAWsB,EAAKrB,UACrD,IAAKK,EAEH,OADA6wB,QAAQ9R,IAAI,UAAY/d,EAAKrB,SAAW,eACjC,EAET,MAAMgX,EAAe3W,EAAMzY,OACrB8Z,EAAUrB,EAAMqB,QACtB12B,KAAK4tE,OAAS,IAAI,IAClB,MAAMr0D,QAAsB,IAAQjR,kBAClCtI,KAAK4tE,OACL,SACA,CAAC7hC,EAAWC,EAAchsC,KAAK0nC,GAAIlR,EAAKG,EAAOD,IAGjD,OADiBnsB,KAAKmU,MAAMnF,EAAczT,OAAOxF,YAInD,iBACE,MAAO,CACL2nC,OAAQjoC,KAAKioC,OACbomC,cAAeruE,KAAK4tE,OAAS5tE,KAAK4tE,OAAOlhC,sBAAmBvsC,GAIhE,iBACE,OAAOoK,KAAKC,UAAUxK,KAAK0sC,iBAAkB,KAAM,I,uEC3LvD,MAAM4hC,GAAO,CACXC,IAAA,EAAAh6D,EACAi6D,KAAA,IACAC,KAAA,IACA/7B,SAAA,IACAg8B,OAAA,IACA97B,OAAA","file":"bsv.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 125);\n","/*\n * OpCode\n * ======\n *\n * An opCode is one of the operations in the bitcoin scripting language. Each\n * operation is just a number from 0-255, and it has a corresponding string,\n * e.g. \"OP_RETURN\", which comes from the name of that constant in the bitcoind\n * source code. The way you probably want to use this is with\n * new OpCode(str).toNumber() or new OpCode(num).toString()\n */\n'use strict'\n\nimport { Struct } from './struct'\n\nconst map = {\n // push value\n OP_FALSE: 0x00,\n OP_0: 0x00,\n OP_PUSHDATA1: 0x4c,\n OP_PUSHDATA2: 0x4d,\n OP_PUSHDATA4: 0x4e,\n OP_1NEGATE: 0x4f,\n OP_RESERVED: 0x50,\n OP_TRUE: 0x51,\n OP_1: 0x51,\n OP_2: 0x52,\n OP_3: 0x53,\n OP_4: 0x54,\n OP_5: 0x55,\n OP_6: 0x56,\n OP_7: 0x57,\n OP_8: 0x58,\n OP_9: 0x59,\n OP_10: 0x5a,\n OP_11: 0x5b,\n OP_12: 0x5c,\n OP_13: 0x5d,\n OP_14: 0x5e,\n OP_15: 0x5f,\n OP_16: 0x60,\n\n // control\n OP_NOP: 0x61,\n OP_VER: 0x62,\n OP_IF: 0x63,\n OP_NOTIF: 0x64,\n OP_VERIF: 0x65,\n OP_VERNOTIF: 0x66,\n OP_ELSE: 0x67,\n OP_ENDIF: 0x68,\n OP_VERIFY: 0x69,\n OP_RETURN: 0x6a,\n\n // stack ops\n OP_TOALTSTACK: 0x6b,\n OP_FROMALTSTACK: 0x6c,\n OP_2DROP: 0x6d,\n OP_2DUP: 0x6e,\n OP_3DUP: 0x6f,\n OP_2OVER: 0x70,\n OP_2ROT: 0x71,\n OP_2SWAP: 0x72,\n OP_IFDUP: 0x73,\n OP_DEPTH: 0x74,\n OP_DROP: 0x75,\n OP_DUP: 0x76,\n OP_NIP: 0x77,\n OP_OVER: 0x78,\n OP_PICK: 0x79,\n OP_ROLL: 0x7a,\n OP_ROT: 0x7b,\n OP_SWAP: 0x7c,\n OP_TUCK: 0x7d,\n\n // data manipulation ops\n OP_CAT: 0x7e,\n OP_SUBSTR: 0x7f, // Replaced in BSV\n OP_SPLIT: 0x7f,\n OP_LEFT: 0x80, // Replaced in BSV\n OP_NUM2BIN: 0x80,\n OP_RIGHT: 0x81, // Replaced in BSV\n OP_BIN2NUM: 0x81,\n OP_SIZE: 0x82,\n\n // bit logic\n OP_INVERT: 0x83,\n OP_AND: 0x84,\n OP_OR: 0x85,\n OP_XOR: 0x86,\n OP_EQUAL: 0x87,\n OP_EQUALVERIFY: 0x88,\n OP_RESERVED1: 0x89,\n OP_RESERVED2: 0x8a,\n\n // numeric\n OP_1ADD: 0x8b,\n OP_1SUB: 0x8c,\n OP_2MUL: 0x8d,\n OP_2DIV: 0x8e,\n OP_NEGATE: 0x8f,\n OP_ABS: 0x90,\n OP_NOT: 0x91,\n OP_0NOTEQUAL: 0x92,\n\n OP_ADD: 0x93,\n OP_SUB: 0x94,\n OP_MUL: 0x95,\n OP_DIV: 0x96,\n OP_MOD: 0x97,\n OP_LSHIFT: 0x98,\n OP_RSHIFT: 0x99,\n\n OP_BOOLAND: 0x9a,\n OP_BOOLOR: 0x9b,\n OP_NUMEQUAL: 0x9c,\n OP_NUMEQUALVERIFY: 0x9d,\n OP_NUMNOTEQUAL: 0x9e,\n OP_LESSTHAN: 0x9f,\n OP_GREATERTHAN: 0xa0,\n OP_LESSTHANOREQUAL: 0xa1,\n OP_GREATERTHANOREQUAL: 0xa2,\n OP_MIN: 0xa3,\n OP_MAX: 0xa4,\n\n OP_WITHIN: 0xa5,\n\n // crypto\n OP_RIPEMD160: 0xa6,\n OP_SHA1: 0xa7,\n OP_SHA256: 0xa8,\n OP_HASH160: 0xa9,\n OP_HASH256: 0xaa,\n OP_CODESEPARATOR: 0xab,\n OP_CHECKSIG: 0xac,\n OP_CHECKSIGVERIFY: 0xad,\n OP_CHECKMULTISIG: 0xae,\n OP_CHECKMULTISIGVERIFY: 0xaf,\n\n // expansion\n OP_NOP1: 0xb0,\n OP_NOP2: 0xb1,\n OP_CHECKLOCKTIMEVERIFY: 0xb1,\n OP_NOP3: 0xb2,\n OP_CHECKSEQUENCEVERIFY: 0xb2,\n OP_NOP4: 0xb3,\n OP_NOP5: 0xb4,\n OP_NOP6: 0xb5,\n OP_NOP7: 0xb6,\n OP_NOP8: 0xb7,\n OP_NOP9: 0xb8,\n OP_NOP10: 0xb9,\n\n // template matching params\n OP_SMALLDATA: 0xf9,\n OP_SMALLINTEGER: 0xfa,\n OP_PUBKEYS: 0xfb,\n OP_PUBKEYHASH: 0xfd,\n OP_PUBKEY: 0xfe,\n\n OP_INVALIDOPCODE: 0xff\n}\n\nclass OpCode extends Struct {\n constructor (num) {\n super({ num })\n }\n\n fromNumber (num) {\n this.num = num\n return this\n }\n\n static fromNumber (num) {\n return new this().fromNumber(num)\n }\n\n toNumber () {\n return this.num\n }\n\n fromString (str) {\n const num = map[str]\n if (num === undefined) {\n throw new Error('Invalid opCodeStr')\n }\n this.num = num\n return this\n }\n\n static fromString (str) {\n return new this().fromString(str)\n }\n\n toString () {\n const str = OpCode.str[this.num]\n if (str === undefined) {\n if (this.num > 0 && this.num < OpCode.OP_PUSHDATA1) {\n return this.num.toString()\n }\n throw new Error('OpCode does not have a string representation')\n }\n return str\n }\n}\n\nOpCode.str = {}\n\nfor (const opCodeStr in map) {\n OpCode[opCodeStr] = map[opCodeStr]\n\n if (Object.prototype.hasOwnProperty.call(map, opCodeStr)) {\n OpCode.str[map[opCodeStr]] = opCodeStr\n }\n}\n\nexport { OpCode }\n","/**\n * Big Number\n * ==========\n *\n * Since javascript numbers are only precise up to 53 bits, and bitcoin is\n * based on cryptography that uses 256 bit numbers, we must use a big number\n * library. The library we use at the moment is Fedor Indutny's bn.js library.\n * Since big numbers are extremely useful, we provide some very basic wrappers\n * for his big number class and expose it. The wrappers merely allow you to do,\n * say, bn.cmp(num) instead of just bn.cmp(bn), which is nice. The primary way\n * to use this is:\n * const bn = Bn(str) // str is base 10\n * const bn = Bn(num)\n * const bn = Bn().fromBuffer(buf)\n * const bn = Bn().fromSm(buf); // sign+magnitude format, first bit is sign\n *\n * For little endian, pass in an options value:\n * const bn = Bn().fromBuffer(buf, {endian: 'little'})\n * const bn = Bn().fromSm(buf, {endian: 'little'})\n *\n * Getting output:\n * const str = Bn().toString() // produces base 10 string\n * const buf = Bn().toBuffer() // produces buffer representation\n * const buf = Bn().toBuffer({size: 32}) //produced 32 byte buffer\n */\n'use strict'\n\nimport _Bn from 'bn.js'\n\nfunction Bn (n, base, ...rest) {\n if (!(this instanceof Bn)) {\n return new Bn(n, base, ...rest)\n }\n _Bn.call(this, n, base, ...rest)\n}\n\nObject.keys(_Bn).forEach(function (key) {\n Bn[key] = _Bn[key]\n})\nBn.prototype = Object.create(_Bn.prototype)\nBn.prototype.constructor = Bn\n\nfunction reverseBuf (buf) {\n const buf2 = Buffer.alloc(buf.length)\n for (let i = 0; i < buf.length; i++) {\n buf2[i] = buf[buf.length - 1 - i]\n }\n return buf2\n}\n\nBn.prototype.fromHex = function (hex, opts) {\n return this.fromBuffer(Buffer.from(hex, 'hex'), opts)\n}\n\nBn.prototype.toHex = function (opts) {\n return this.toBuffer(opts).toString('hex')\n}\n\nBn.prototype.toJSON = function () {\n return this.toString()\n}\n\nBn.prototype.fromJSON = function (str) {\n const bn = Bn(str)\n bn.copy(this)\n return this\n}\n\nBn.prototype.fromNumber = function (n) {\n const bn = Bn(n)\n bn.copy(this)\n return this\n}\n\nBn.prototype.toNumber = function () {\n return parseInt(this.toString(10), 10)\n}\n\nBn.prototype.fromString = function (str, base) {\n const bn = Bn(str, base)\n bn.copy(this)\n return this\n}\n\nBn.fromBuffer = function (buf, opts = { endian: 'big' }) {\n if (opts.endian === 'little') {\n buf = reverseBuf(buf)\n }\n const hex = buf.toString('hex')\n const bn = new Bn(hex, 16)\n return bn\n}\n\nBn.prototype.fromBuffer = function (buf, opts) {\n const bn = Bn.fromBuffer(buf, opts)\n bn.copy(this)\n\n return this\n}\n\nBn.prototype.toBuffer = function (opts = { size: undefined, endian: 'big' }) {\n let buf\n if (opts.size) {\n const hex = this.toString(16, 2)\n const natlen = hex.length / 2\n buf = Buffer.from(hex, 'hex')\n\n if (natlen === opts.size) {\n // pass\n } else if (natlen > opts.size) {\n buf = buf.slice(natlen - buf.length, buf.length)\n } else if (natlen < opts.size) {\n const rbuf = Buffer.alloc(opts.size)\n for (let i = 0; i < buf.length; i++) {\n rbuf[rbuf.length - 1 - i] = buf[buf.length - 1 - i]\n }\n for (let i = 0; i < opts.size - natlen; i++) {\n rbuf[i] = 0\n }\n buf = rbuf\n }\n } else {\n const hex = this.toString(16, 2)\n buf = Buffer.from(hex, 'hex')\n }\n\n if (opts.endian === 'little') {\n buf = reverseBuf(buf)\n }\n const longzero = Buffer.from([0])\n if (Buffer.compare(buf, longzero) === 0) {\n return Buffer.from([])\n }\n return buf\n}\n\nBn.prototype.toFastBuffer = Bn.prototype.toBuffer\n\nBn.fromFastBuffer = Bn.fromBuffer\nBn.prototype.fromFastBuffer = Bn.prototype.fromBuffer\n\n/**\n * Signed magnitude buffer. Most significant bit represents sign (0 = positive,\n * 1 = negative).\n */\nBn.prototype.fromSm = function (buf, opts = { endian: 'big' }) {\n if (buf.length === 0) {\n this.fromBuffer(Buffer.from([0]))\n }\n\n const endian = opts.endian\n if (endian === 'little') {\n buf = reverseBuf(buf)\n }\n\n if (buf[0] & 0x80) {\n buf[0] = buf[0] & 0x7f\n this.fromBuffer(buf)\n this.neg().copy(this)\n } else {\n this.fromBuffer(buf)\n }\n return this\n}\n\nBn.prototype.toSm = function (opts = { endian: 'big' }) {\n const endian = opts.endian\n\n let buf\n if (this.cmp(0) === -1) {\n buf = this.neg().toBuffer()\n if (buf[0] & 0x80) {\n buf = Buffer.concat([Buffer.from([0x80]), buf])\n } else {\n buf[0] = buf[0] | 0x80\n }\n } else {\n buf = this.toBuffer()\n if (buf[0] & 0x80) {\n buf = Buffer.concat([Buffer.from([0x00]), buf])\n }\n }\n\n if ((buf.length === 1) & (buf[0] === 0)) {\n buf = Buffer.from([])\n }\n\n if (endian === 'little') {\n buf = reverseBuf(buf)\n }\n\n return buf\n}\n\n/**\n * Produce a Bn from the \"bits\" value in a blockheader. Analagous to Bitcoin\n * Core's uint256 SetCompact method. bits is assumed to be UInt32.\n */\nBn.prototype.fromBits = function (bits, opts = { strict: false }) {\n // To performed bitwise operations in javascript, we need to convert to a\n // signed 32 bit value.\n let buf = Buffer.alloc(4)\n buf.writeUInt32BE(bits, 0)\n bits = buf.readInt32BE(0)\n if (opts.strict && bits & 0x00800000) {\n throw new Error('negative bit set')\n }\n const nsize = bits >> 24\n const nword = bits & 0x007fffff\n buf = Buffer.alloc(4)\n buf.writeInt32BE(nword)\n if (nsize <= 3) {\n buf = buf.slice(1, nsize + 1)\n } else {\n const fill = Buffer.alloc(nsize - 3)\n fill.fill(0)\n buf = Buffer.concat([buf, fill])\n }\n this.fromBuffer(buf)\n if (bits & 0x00800000) {\n Bn(0)\n .sub(this)\n .copy(this)\n }\n return this\n}\n\n/**\n * Convert Bn to the \"bits\" value in a blockheader. Analagous to Bitcoin\n * Core's uint256 GetCompact method. bits is a UInt32.\n */\nBn.prototype.toBits = function () {\n let buf\n if (this.lt(0)) {\n buf = this.neg().toBuffer()\n } else {\n buf = this.toBuffer()\n }\n let nsize = buf.length\n let nword\n if (nsize > 3) {\n nword = Buffer.concat([Buffer.from([0]), buf.slice(0, 3)]).readUInt32BE(0)\n } else if (nsize <= 3) {\n const blank = Buffer.alloc(3 - nsize + 1)\n blank.fill(0)\n nword = Buffer.concat([blank, buf.slice(0, nsize)]).readUInt32BE(0)\n }\n if (nword & 0x00800000) {\n // The most significant bit denotes sign. Do not want unless number is\n // actually negative.\n nword >>= 8\n nsize++\n }\n if (this.lt(0)) {\n nword |= 0x00800000\n }\n const bits = (nsize << 24) | nword\n // convert bits to UInt32 before returning\n buf = Buffer.alloc(4)\n buf.writeInt32BE(bits, 0)\n return buf.readUInt32BE(0)\n}\n\n// This is analogous to the constructor for CScriptNum in bitcoind. Many ops\n// in bitcoind's script interpreter use CScriptNum, which is not really a\n// proper bignum. Instead, an error is thrown if trying to input a number\n// bigger than 4 bytes. We copy that behavior here. There is one exception -\n// in CHECKLOCKTIMEVERIFY, the numbers are allowed to be up to 5 bytes long.\n// We allow for setting that variable here for use in CHECKLOCKTIMEVERIFY.\nBn.prototype.fromScriptNumBuffer = function (\n buf,\n fRequireMinimal,\n nMaxNumSize\n) {\n if (nMaxNumSize === undefined) {\n nMaxNumSize = 4\n }\n if (buf.length > nMaxNumSize) {\n throw new Error('script number overflow')\n }\n if (fRequireMinimal && buf.length > 0) {\n // Check that the number is encoded with the minimum possible\n // number of bytes.\n //\n // If the most-significant-byte - excluding the sign bit - is zero\n // then we're not minimal. Note how this test also rejects the\n // negative-zero encoding, 0x80.\n if ((buf[buf.length - 1] & 0x7f) === 0) {\n // One exception: if there's more than one byte and the most\n // significant bit of the second-most-significant-byte is set\n // it would conflict with the sign bit. An example of this case\n // is +-255, which encode to 0xff00 and 0xff80 respectively.\n // (big-endian).\n if (buf.length <= 1 || (buf[buf.length - 2] & 0x80) === 0) {\n throw new Error('non-minimally encoded script number')\n }\n }\n }\n return this.fromSm(buf, { endian: 'little' })\n}\n\n// The corollary to the above, with the notable exception that we do not throw\n// an error if the output is larger than four bytes. (Which can happen if\n// performing a numerical operation that results in an overflow to more than 4\n// bytes).\nBn.prototype.toScriptNumBuffer = function (buf) {\n return this.toSm({ endian: 'little' })\n}\n\nBn.prototype.neg = function () {\n const _neg = _Bn.prototype.neg.call(this)\n const neg = Object.create(Bn.prototype)\n _neg.copy(neg)\n return neg\n}\n\nBn.prototype.add = function (bn) {\n const _bn = _Bn.prototype.add.call(this, bn)\n bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\nBn.prototype.sub = function (bn) {\n const _bn = _Bn.prototype.sub.call(this, bn)\n bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\nBn.prototype.mul = function (bn) {\n const _bn = _Bn.prototype.mul.call(this, bn)\n bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\n/**\n * to be used if this is positive.\n */\nBn.prototype.mod = function (bn) {\n const _bn = _Bn.prototype.mod.call(this, bn)\n bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\n/**\n * to be used if this is negative.\n */\nBn.prototype.umod = function (bn) {\n const _bn = _Bn.prototype.umod.call(this, bn)\n bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\nBn.prototype.invm = function (bn) {\n const _bn = _Bn.prototype.invm.call(this, bn)\n bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\nBn.prototype.div = function (bn) {\n const _bn = _Bn.prototype.div.call(this, bn)\n bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\nBn.prototype.ushln = function (bits) {\n const _bn = _Bn.prototype.ushln.call(this, bits)\n const bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\nBn.prototype.ushrn = function (bits) {\n const _bn = _Bn.prototype.ushrn.call(this, bits)\n const bn = Object.create(Bn.prototype)\n _bn.copy(bn)\n return bn\n}\n\nBn.prototype.cmp = function (bn) {\n return _Bn.prototype.cmp.call(this, bn)\n}\n\n/**\n * All the standard big number operations operate on other big numbers. e.g.,\n * bn1.add(bn2). But it is frequenly valuble to add numbers or strings, e.g.\n * bn.add(5) or bn.add('5'). The decorator wraps all methods where this would\n * be convenient and makes that possible.\n */\nfunction decorate (name) {\n Bn.prototype['_' + name] = Bn.prototype[name]\n const f = function (b) {\n if (typeof b === 'string') {\n b = new Bn(b)\n } else if (typeof b === 'number') {\n b = new Bn(b.toString())\n }\n return this['_' + name](b)\n }\n Bn.prototype[name] = f\n}\n\nBn.prototype.eq = function (b) {\n return this.cmp(b) === 0\n}\n\nBn.prototype.neq = function (b) {\n return this.cmp(b) !== 0\n}\n\nBn.prototype.gt = function (b) {\n return this.cmp(b) > 0\n}\n\nBn.prototype.geq = function (b) {\n return this.cmp(b) >= 0\n}\n\nBn.prototype.lt = function (b) {\n return this.cmp(b) < 0\n}\n\nBn.prototype.leq = function (b) {\n return this.cmp(b) <= 0\n}\n\ndecorate('add')\ndecorate('sub')\ndecorate('mul')\ndecorate('mod')\ndecorate('invm')\ndecorate('div')\ndecorate('cmp')\ndecorate('gt')\ndecorate('geq')\ndecorate('lt')\ndecorate('leq')\n\nexport { Bn }\n","/**\n * Hash\n * ====\n *\n * Some hash functions are used through out bitcoin. We expose them here as a\n * convenience.\n */\n'use strict'\n\nimport { Workers } from './workers'\nimport hashjs from 'hash.js'\n\nclass Hash {}\n\nHash.sha1 = function (buf) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('sha1 hash must be of a buffer')\n }\n const Sha1 = hashjs.sha1\n const hash = new Sha1().update(buf).digest()\n return Buffer.from(hash)\n}\n\nHash.sha1.blockSize = 512\n\nHash.asyncSha1 = async function (buf) {\n const args = [buf]\n const workersResult = await Workers.asyncClassMethod(Hash, 'sha1', args)\n return workersResult.resbuf\n}\n\nHash.sha256 = function (buf) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('sha256 hash must be of a buffer')\n }\n const Sha256 = hashjs.sha256\n const hash = new Sha256().update(buf).digest()\n return Buffer.from(hash)\n}\n\nHash.sha256.blockSize = 512\n\nHash.asyncSha256 = async function (buf) {\n const args = [buf]\n const workersResult = await Workers.asyncClassMethod(Hash, 'sha256', args)\n return workersResult.resbuf\n}\n\nHash.sha256Sha256 = function (buf) {\n try {\n return Hash.sha256(Hash.sha256(buf))\n } catch (e) {\n throw new Error('sha256Sha256 hash must be of a buffer: ' + e)\n }\n}\n\nHash.asyncSha256Sha256 = async function (buf) {\n const args = [buf]\n const workersResult = await Workers.asyncClassMethod(\n Hash,\n 'sha256Sha256',\n args\n )\n return workersResult.resbuf\n}\n\nHash.ripemd160 = function (buf) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('ripemd160 hash must be of a buffer')\n }\n const Ripemd160 = hashjs.ripemd160\n const hash = new Ripemd160().update(buf).digest()\n return Buffer.from(hash)\n}\n\nHash.asyncRipemd160 = async function (buf) {\n const args = [buf]\n const workersResult = await Workers.asyncClassMethod(Hash, 'ripemd160', args)\n return workersResult.resbuf\n}\n\nHash.sha256Ripemd160 = function (buf) {\n try {\n return Hash.ripemd160(Hash.sha256(buf))\n } catch (e) {\n throw new Error('sha256Ripemd160 hash must be of a buffer: ' + e)\n }\n}\n\nHash.asyncSha256Ripemd160 = async function (buf) {\n const args = [buf]\n const workersResult = await Workers.asyncClassMethod(\n Hash,\n 'sha256Ripemd160',\n args\n )\n return workersResult.resbuf\n}\n\nHash.sha512 = function (buf) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('sha512 hash must be of a buffer')\n }\n const Sha512 = hashjs.sha512\n const hash = new Sha512().update(buf).digest()\n return Buffer.from(hash)\n}\n\nHash.asyncSha512 = async function (buf) {\n const args = [buf]\n const workersResult = await Workers.asyncClassMethod(Hash, 'sha512', args)\n return workersResult.resbuf\n}\n\nHash.sha512.blockSize = 1024\n\nHash.hmac = function (hashFStr, data, key) {\n if (hashFStr !== 'sha1' && hashFStr !== 'sha256' && hashFStr !== 'sha512') {\n throw new Error('invalid choice of hash function')\n }\n\n const hashf = Hash[hashFStr]\n\n if (!Buffer.isBuffer(data) || !Buffer.isBuffer(key)) {\n throw new Error('data and key must be buffers')\n }\n\n // http://en.wikipedia.org/wiki/Hash-based_message_authentication_code\n // http://tools.ietf.org/html/rfc4868#section-2\n const blockSize = hashf.blockSize / 8\n\n if (key.length > blockSize) {\n key = hashf(key)\n }\n\n if (key.length < blockSize) {\n const fill = Buffer.alloc(blockSize)\n fill.fill(0, key.length)\n key.copy(fill)\n key = fill\n }\n\n const oKeyPad = Buffer.alloc(blockSize)\n const iKeyPad = Buffer.alloc(blockSize)\n for (let i = 0; i < blockSize; i++) {\n oKeyPad[i] = 0x5c ^ key[i]\n iKeyPad[i] = 0x36 ^ key[i]\n }\n\n return hashf(\n Buffer.concat([oKeyPad, hashf(Buffer.concat([iKeyPad, data]))])\n )\n}\n\nHash.sha1Hmac = function (data, key) {\n return Hash.hmac('sha1', data, key)\n}\n\nHash.asyncSha1Hmac = async function (data, key) {\n const args = [data, key]\n const workersResult = await Workers.asyncClassMethod(Hash, 'sha1Hmac', args)\n return workersResult.resbuf\n}\n\nHash.sha1Hmac.bitsize = 160\n\nHash.sha256Hmac = function (data, key) {\n return Hash.hmac('sha256', data, key)\n}\n\nHash.asyncSha256Hmac = async function (data, key) {\n const args = [data, key]\n const workersResult = await Workers.asyncClassMethod(Hash, 'sha256Hmac', args)\n return workersResult.resbuf\n}\n\nHash.sha256Hmac.bitsize = 256\n\nHash.sha512Hmac = function (data, key) {\n return Hash.hmac('sha512', data, key)\n}\n\nHash.asyncSha512Hmac = async function (data, key) {\n const args = [data, key]\n const workersResult = await Workers.asyncClassMethod(Hash, 'sha512Hmac', args)\n return workersResult.resbuf\n}\n\nHash.sha512Hmac.bitsize = 512\n\nexport { Hash }\n","/**\n * Workers\n * =======\n *\n * Workers manages either processes (in node) or threads (in a browser). The\n * workers are intended to handle CPU-heavy tasks that block IO. This class is\n * a little unusual in that it must use different interfaces whether in node or\n * in the browser. In node, we use node's build-in child_process fork to create\n * new workers we can communicate with. In the browser, we use web workers.\n * Unfortunately, node and web browsers do not have a common interface for\n * workers. There is a node module called webworker-threads for node that\n * mimics the browser's web workers, but unfortunately it does not support\n * require(), and thus isn't very useful in our case. Therefore we fall back to\n * process forks.\n *\n * You probably don't need to use this class directly. Use Work, which will\n * automatically spawn new workers if needed.\n */\n'use strict'\n\nimport { WorkersResult } from './workers-result'\n\nlet globalWorkers\n\nclass Workers {\n constructor (\n nativeWorkers = [],\n lastid = 0,\n incompconsteRes = [],\n promisemap = new Map()\n ) {\n this.nativeWorkers = nativeWorkers\n this.lastid = lastid\n this.incompconsteRes = incompconsteRes\n this.promisemap = promisemap\n }\n\n asyncObjectMethod (obj, methodname, args, id = this.lastid + 1) {\n if (!args) {\n throw new Error('must specify args')\n }\n const result = obj[methodname](...args)\n const workersResult = new WorkersResult().fromResult(result, id)\n return workersResult\n }\n\n static asyncObjectMethod (obj, methodname, args, id) {\n if (!globalWorkers) {\n globalWorkers = new Workers()\n }\n return globalWorkers.asyncObjectMethod(obj, methodname, args, id)\n }\n\n asyncClassMethod (classObj, methodname, args, id = this.lastid + 1) {\n if (!args) {\n throw new Error('must specify args')\n }\n const result = classObj[methodname](...args)\n const workersResult = new WorkersResult().fromResult(result, id)\n return workersResult\n }\n\n static asyncClassMethod (classObj, methodname, args, id) {\n if (!globalWorkers) {\n globalWorkers = new Workers()\n }\n return globalWorkers.asyncClassMethod(classObj, methodname, args, id)\n }\n\n static endGlobalWorkers () {\n if (globalWorkers && !process.browser) {\n globalWorkers = undefined\n }\n }\n}\n\nexport { Workers }\n","/**\n * Structure\n * =========\n *\n * A convenient structure to extend objects from that comes with very common\n * boiler plate instance methods:\n * - fromObject\n * - fromBr\n * - toBw\n * - fromBuffer\n * - fromFastBuffer\n * - toBuffer\n * - toFastBuffer\n * - fromHex\n * - toHex\n * - fromString\n * - toString\n * - fromJSON\n * - toJSON\n * - cloneByBuffer\n * - cloneByFastBuffer\n * - cloneByHex\n * - cloneByString\n * - cloneByJSON\n *\n * As well as static methods for:\n * - fromObject\n * - fromBr\n * - fromBuffer\n * - fromFastBuffer\n * - fromHex\n * - fromString\n * - fromJSON\n *\n * The \"expect\" method also facilitates deserializing a sequence of buffers\n * into an object.\n */\n'use strict'\n\nimport { Br } from './br'\nimport { Bw } from './bw'\nimport isHex from 'is-hex'\n\nclass Struct {\n constructor (obj) {\n this.fromObject(obj)\n }\n\n fromObject (obj) {\n if (!obj) {\n return this\n }\n for (const key of Object.keys(obj)) {\n if (obj[key] !== undefined) {\n this[key] = obj[key]\n }\n }\n return this\n }\n\n static fromObject (obj) {\n return new this().fromObject(obj)\n }\n\n fromBr (br) {\n if (!(br instanceof Br)) {\n throw new Error('br must be a buffer reader')\n }\n throw new Error('not implemented')\n }\n\n static fromBr (br) {\n return new this().fromBr(br)\n }\n\n asyncFromBr (br) {\n if (!(br instanceof Br)) {\n throw new Error('br must be a buffer reader')\n }\n throw new Error('not implemented')\n }\n\n static asyncFromBr (br) {\n return new this().asyncFromBr(br)\n }\n\n toBw (bw) {\n throw new Error('not implemented')\n }\n\n asyncToBw (bw) {\n throw new Error('not implemented')\n }\n\n /**\n * It is very often the case that you want to create a bitcoin object from a\n * stream of small buffers rather than from a buffer of the correct length.\n * For instance, if streaming from the network or disk. The genFromBuffers\n * method is a generator which produces an iterator. Use .next(buf) to pass\n * in a small buffer. The iterator will end when it has received enough data\n * to produce the object. In some cases it is able to yield the number of\n * bytes it is expecting, but that is not always known.\n */\n * genFromBuffers () {\n throw new Error('not implemented')\n }\n\n /**\n * A convenience method used by from the genFromBuffers* generators.\n * Basically lets you expect a certain number of bytes (len) and keeps\n * yielding until you give it enough. It yields the expected amount\n * remaining, and returns an object containing a buffer of the expected\n * length, and, if any, the remainder buffer.\n */\n * expect (len, startbuf) {\n let buf = startbuf\n const bw = new Bw()\n let gotlen = 0\n if (startbuf) {\n bw.write(startbuf)\n gotlen += startbuf.length\n }\n while (gotlen < len) {\n const remainderlen = len - gotlen\n buf = yield remainderlen\n if (!buf) {\n continue\n }\n bw.write(buf)\n gotlen += buf.length\n }\n buf = bw.toBuffer()\n const overlen = gotlen - len\n const remainderbuf = buf.slice(buf.length - overlen, buf.length)\n buf = buf.slice(0, buf.length - overlen)\n return {\n buf: buf,\n remainderbuf: remainderbuf\n }\n }\n\n /**\n * Convert a buffer into an object, i.e. deserialize the object.\n */\n fromBuffer (buf, ...rest) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('buf must be a buffer')\n }\n const br = new Br(buf)\n return this.fromBr(br, ...rest)\n }\n\n static fromBuffer (...rest) {\n return new this().fromBuffer(...rest)\n }\n\n asyncFromBuffer (buf, ...rest) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('buf must be a buffer')\n }\n const br = new Br(buf)\n return this.asyncFromBr(br, ...rest)\n }\n\n static asyncFromBuffer (buf, ...rest) {\n return new this().asyncFromBuffer(buf, ...rest)\n }\n\n /**\n * The complement of toFastBuffer - see description for toFastBuffer\n */\n fromFastBuffer (buf, ...rest) {\n if (buf.length === 0) {\n return this\n } else {\n return this.fromBuffer(buf, ...rest)\n }\n }\n\n static fromFastBuffer (...rest) {\n return new this().fromFastBuffer(...rest)\n }\n\n /**\n * Convert the object into a buffer, i.e. serialize the object. This method\n * may block the main thread.\n */\n toBuffer (...rest) {\n return this.toBw(...rest).toBuffer()\n }\n\n asyncToBuffer (...rest) {\n return this.asyncToBw(...rest).then(bw => bw.toBuffer())\n }\n\n /**\n * Sometimes the toBuffer method has cryptography and blocks the main thread,\n * and we need a non-blocking way to serialize an object. That is what\n * toFastBuffer is. Of course it defaults to just using toBuffer if an object\n * hasn't implemented it. If your regular toBuffer method blocks, like with\n * Bip32, then you should implement this method to be non-blocking. This\n * method is used to send objects to the workers. i.e., for converting a\n * Bip32 object to a string, we need to encode it as a buffer in a\n * non-blocking manner with toFastBuffer, send it to a worker, then the\n * worker converts it to a string, which is a blocking operation.\n *\n * It is very common to want to convert a blank object to a zero length\n * buffer, so we can transport a blank object to a worker. So that behavior\n * is included by default.\n */\n toFastBuffer (...rest) {\n if (Object.keys(this).length === 0) {\n return Buffer.alloc(0)\n } else {\n return this.toBuffer(...rest)\n }\n }\n\n fromHex (hex, ...rest) {\n if (!isHex(hex)) {\n throw new Error('invalid hex string')\n }\n const buf = Buffer.from(hex, 'hex')\n return this.fromBuffer(buf, ...rest)\n }\n\n static fromHex (hex, ...rest) {\n return new this().fromHex(hex, ...rest)\n }\n\n asyncFromHex (hex, ...rest) {\n if (!isHex(hex)) {\n throw new Error('invalid hex string')\n }\n const buf = Buffer.from(hex, 'hex')\n return this.asyncFromBuffer(buf, ...rest)\n }\n\n static asyncFromHex (hex, ...rest) {\n return new this().asyncFromHex(hex, ...rest)\n }\n\n fromFastHex (hex, ...rest) {\n if (!isHex(hex)) {\n throw new Error('invalid hex string')\n }\n const buf = Buffer.from(hex, 'hex')\n return this.fromFastBuffer(buf, ...rest)\n }\n\n static fromFastHex (hex, ...rest) {\n return new this().fromFastHex(hex, ...rest)\n }\n\n toHex (...rest) {\n return this.toBuffer(...rest).toString('hex')\n }\n\n asyncToHex (...rest) {\n return this.asyncToBuffer(...rest).then(buf => buf.toString('hex'))\n }\n\n toFastHex (...rest) {\n return this.toFastBuffer(...rest).toString('hex')\n }\n\n fromString (str, ...rest) {\n if (typeof str !== 'string') {\n throw new Error('str must be a string')\n }\n return this.fromHex(str, ...rest)\n }\n\n static fromString (str, ...rest) {\n return new this().fromString(str, ...rest)\n }\n\n asyncFromString (str, ...rest) {\n if (typeof str !== 'string') {\n throw new Error('str must be a string')\n }\n return this.asyncFromHex(str, ...rest)\n }\n\n static asyncFromString (str, ...rest) {\n return new this().asyncFromString(str, ...rest)\n }\n\n toString (...rest) {\n return this.toHex(...rest)\n }\n\n asyncToString (...rest) {\n return this.asyncToHex(...rest)\n }\n\n fromJSON (json) {\n throw new Error('not implemented')\n }\n\n static fromJSON (json, ...rest) {\n return new this().fromJSON(json, ...rest)\n }\n\n asyncFromJSON (json, ...rest) {\n throw new Error('not implemented')\n }\n\n static asyncFromJSON (json, ...rest) {\n return new this().asyncFromJSON(json, ...rest)\n }\n\n toJSON () {\n var json = {}\n for (var val in this) {\n // arrays\n if (Array.isArray(this[val])) {\n const arr = []\n for (var i in this[val]) {\n if (typeof this[val][i].toJSON === 'function') {\n arr.push(this[val][i].toJSON())\n } else {\n arr.push(JSON.stringify(this[val][i]))\n }\n }\n json[val] = arr\n // objects\n } else if (this[val] === null) {\n json[val] = this[val]\n } else if (\n typeof this[val] === 'object' &&\n typeof this[val].toJSON === 'function'\n ) {\n json[val] = this[val].toJSON()\n // booleans, numbers, and strings\n } else if (\n typeof this[val] === 'boolean' ||\n typeof this[val] === 'number' ||\n typeof this[val] === 'string'\n ) {\n json[val] = this[val]\n // buffers\n } else if (Buffer.isBuffer(this[val])) {\n json[val] = this[val].toString('hex')\n // map\n } else if (this[val] instanceof Map) {\n json[val] = JSON.stringify(this[val])\n // throw an error for objects that do not implement toJSON\n } else if (typeof this[val] === 'object') {\n throw new Error('not implemented')\n }\n }\n return json\n // throw new Error('not implemented')\n }\n\n asyncToJSON () {\n throw new Error('not implemented')\n }\n\n clone () {\n // TODO: Should this be more intelligent about picking which clone method\n // to default to?\n return this.cloneByJSON()\n }\n\n cloneByBuffer () {\n return new this.constructor().fromBuffer(this.toBuffer())\n }\n\n cloneByFastBuffer () {\n return new this.constructor().fromFastBuffer(this.toFastBuffer())\n }\n\n cloneByHex () {\n return new this.constructor().fromHex(this.toHex())\n }\n\n cloneByString () {\n return new this.constructor().fromString(this.toString())\n }\n\n cloneByJSON () {\n return new this.constructor().fromJSON(this.toJSON())\n }\n}\n\nexport { Struct }\n","/**\n * Signature\n * =========\n *\n * A signature is the thing you make when you want to sign a transaction, or\n * the thing you want to verify if you want to ensure that someone signed a\n * transaction. It has an r and s value, which are the cryptographic big\n * numbers that define a signature. And since this is a bitcoin library, it\n * also has nHashType, which is the way to hash a transaction and is used in\n * the binary format of a signature when it is in a transaction. We also\n * support a public key recover value, recovery, allowing one to compute the\n * public key from a signature. The \"compressed\" value is also necessary to\n * accurately compute the public key from a signature.\n *\n * There are a few different formats of a signature in bitcoin. One is DER, the\n * other is the TxFormat which is the same as DER but with the nHashType byte\n * appended, and the final one is Compact, which is used by Bitcoin Signed\n * Message (Bsm).\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Struct } from './struct'\n\n/**\n * r, s: big numbers constiting a cryptographic signature\n * nHashType: found at the end of a signature in a transaction\n * recovery: public key recovery number\n * compressed: whether the recovered pubKey is compressed\n */\nclass Sig extends Struct {\n constructor (r, s, nHashType, recovery, compressed) {\n super({ r, s, nHashType, recovery, compressed })\n }\n\n fromBuffer (buf) {\n try {\n return this.fromDer(buf, true)\n } catch (e) {}\n try {\n return this.fromCompact(buf)\n } catch (e) {}\n return this.fromTxFormat(buf)\n }\n\n toBuffer () {\n if (this.nHashType !== undefined) {\n return this.toTxFormat()\n } else if (this.recovery !== undefined) {\n return this.toCompact()\n }\n return this.toDer()\n }\n\n // The format used by \"message\"\n fromCompact (buf) {\n let compressed = true\n let recovery = buf.slice(0, 1)[0] - 27 - 4\n if (recovery < 0) {\n compressed = false\n recovery = recovery + 4\n }\n\n if (\n !(recovery === 0 || recovery === 1 || recovery === 2 || recovery === 3)\n ) {\n throw new Error('i must be 0, 1, 2, or 3')\n }\n\n this.compressed = compressed\n this.recovery = recovery\n\n const rsbuf = buf.slice(1)\n this.fromRS(rsbuf)\n\n return this\n }\n\n static fromCompact (buf) {\n return new this().fromCompact(buf)\n }\n\n fromRS (rsbuf) {\n const b2 = rsbuf.slice(0, 32)\n const b3 = rsbuf.slice(32, 64)\n if (b2.length !== 32) {\n throw new Error('r must be 32 bytes')\n }\n if (b3.length !== 32 || rsbuf.length > 64) {\n throw new Error('s must be 32 bytes')\n }\n this.r = new Bn().fromBuffer(b2)\n this.s = new Bn().fromBuffer(b3)\n return this\n }\n\n static fromRS (rsbuf) {\n return new this().fromRS(rsbuf)\n }\n\n // The format used in a tx, except without the nHashType at the end\n fromDer (buf, strict) {\n const obj = Sig.parseDer(buf, strict)\n this.r = obj.r\n this.s = obj.s\n\n return this\n }\n\n static fromDer (buf, strict) {\n return new this().fromDer(buf, strict)\n }\n\n // The format used in a tx\n fromTxFormat (buf) {\n if (buf.length === 0) {\n // allow setting a \"blank\" signature\n this.r = new Bn(1)\n this.s = new Bn(1)\n this.nHashType = 1\n return this\n }\n const nHashType = buf.readUInt8(buf.length - 1)\n const derbuf = buf.slice(0, buf.length - 1)\n this.fromDer(derbuf, false)\n this.nHashType = nHashType\n return this\n }\n\n static fromTxFormat (buf) {\n return new this().fromTxFormat(buf)\n }\n\n fromString (str) {\n return this.fromHex(str)\n }\n\n /**\n * In order to mimic the non-strict DER encoding of OpenSSL, set strict = false.\n */\n static parseDer (buf, strict) {\n if (strict === undefined) {\n strict = true\n }\n\n if (!Buffer.isBuffer(buf)) {\n throw new Error('DER formatted signature should be a buffer')\n }\n\n const header = buf[0]\n\n if (header !== 0x30) {\n throw new Error('Header byte should be 0x30')\n }\n\n let length = buf[1]\n const buflength = buf.slice(2).length\n if (strict && length !== buflength) {\n throw new Error('LEngth byte should length of what follows')\n } else {\n length = length < buflength ? length : buflength\n }\n\n const rheader = buf[2 + 0]\n if (rheader !== 0x02) {\n throw new Error('Integer byte for r should be 0x02')\n }\n\n const rlength = buf[2 + 1]\n const rbuf = buf.slice(2 + 2, 2 + 2 + rlength)\n const r = new Bn().fromBuffer(rbuf)\n const rneg = buf[2 + 1 + 1] === 0x00\n if (rlength !== rbuf.length) {\n throw new Error('LEngth of r incorrect')\n }\n\n const sheader = buf[2 + 2 + rlength + 0]\n if (sheader !== 0x02) {\n throw new Error('Integer byte for s should be 0x02')\n }\n\n const slength = buf[2 + 2 + rlength + 1]\n const sbuf = buf.slice(2 + 2 + rlength + 2, 2 + 2 + rlength + 2 + slength)\n const s = new Bn().fromBuffer(sbuf)\n const sneg = buf[2 + 2 + rlength + 2 + 2] === 0x00\n if (slength !== sbuf.length) {\n throw new Error('LEngth of s incorrect')\n }\n\n const sumlength = 2 + 2 + rlength + 2 + slength\n if (length !== sumlength - 2) {\n throw new Error('LEngth of signature incorrect')\n }\n\n const obj = {\n header: header,\n length: length,\n rheader: rheader,\n rlength: rlength,\n rneg: rneg,\n rbuf: rbuf,\n r: r,\n sheader: sheader,\n slength: slength,\n sneg: sneg,\n sbuf: sbuf,\n s: s\n }\n\n return obj\n }\n\n /**\n * This function is translated from bitcoind's IsDERSignature and is used in\n * the script interpreter. This \"DER\" format actually includes an extra byte,\n * the nHashType, at the end. It is really the tx format, not DER format.\n *\n * A canonical signature exists of: [30] [total len] [02] [len R] [R] [02] [len S] [S] [hashtype]\n * Where R and S are not negative (their first byte has its highest bit not set), and not\n * excessively padded (do not start with a 0 byte, unless an otherwise negative number follows,\n * in which case a single 0 byte is necessary and even required).\n *\n * See https://bitcointalk.org/index.php?topic=8392.msg127623#msg127623\n */\n static IsTxDer (buf) {\n if (buf.length < 9) {\n // Non-canonical signature: too short\n return false\n }\n if (buf.length > 73) {\n // Non-canonical signature: too long\n return false\n }\n if (buf[0] !== 0x30) {\n // Non-canonical signature: wrong type\n return false\n }\n if (buf[1] !== buf.length - 3) {\n // Non-canonical signature: wrong length marker\n return false\n }\n const nLEnR = buf[3]\n if (5 + nLEnR >= buf.length) {\n // Non-canonical signature: S length misplaced\n return false\n }\n const nLEnS = buf[5 + nLEnR]\n if (nLEnR + nLEnS + 7 !== buf.length) {\n // Non-canonical signature: R+S length mismatch\n return false\n }\n\n const R = buf.slice(4)\n if (buf[4 - 2] !== 0x02) {\n // Non-canonical signature: R value type mismatch\n return false\n }\n if (nLEnR === 0) {\n // Non-canonical signature: R length is zero\n return false\n }\n if (R[0] & 0x80) {\n // Non-canonical signature: R value negative\n return false\n }\n if (nLEnR > 1 && R[0] === 0x00 && !(R[1] & 0x80)) {\n // Non-canonical signature: R value excessively padded\n return false\n }\n\n const S = buf.slice(6 + nLEnR)\n if (buf[6 + nLEnR - 2] !== 0x02) {\n // Non-canonical signature: S value type mismatch\n return false\n }\n if (nLEnS === 0) {\n // Non-canonical signature: S length is zero\n return false\n }\n if (S[0] & 0x80) {\n // Non-canonical signature: S value negative\n return false\n }\n if (nLEnS > 1 && S[0] === 0x00 && !(S[1] & 0x80)) {\n // Non-canonical signature: S value excessively padded\n return false\n }\n return true\n }\n\n /**\n * Compares to bitcoind's IsLowDERSignature\n * See also Ecdsa signature algorithm which enforces this.\n * See also Bip 62, \"low S values in signatures\"\n */\n hasLowS () {\n if (\n this.s.lt(1) ||\n this.s.gt(\n Bn.fromBuffer(\n Buffer.from(\n '7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0',\n 'hex'\n )\n )\n )\n ) {\n return false\n }\n return true\n }\n\n /**\n * Ensures the nHashType is exactly equal to one of the standard options or combinations thereof.\n * Translated from bitcoind's IsDefinedHashtypeSignature\n */\n hasDefinedHashType () {\n if (\n this.nHashType < Sig.SIGHASH_ALL ||\n this.nHashType > Sig.SIGHASH_SINGLE\n ) {\n return false\n }\n return true\n }\n\n toCompact (recovery, compressed) {\n recovery = typeof recovery === 'number' ? recovery : this.recovery\n compressed =\n typeof compressed === 'boolean' ? compressed : this.compressed\n\n if (\n !(recovery === 0 || recovery === 1 || recovery === 2 || recovery === 3)\n ) {\n throw new Error('recovery must be equal to 0, 1, 2, or 3')\n }\n\n let val = recovery + 27 + 4\n if (compressed === false) {\n val = val - 4\n }\n const b1 = Buffer.from([val])\n const b2 = this.r.toBuffer({ size: 32 })\n const b3 = this.s.toBuffer({ size: 32 })\n return Buffer.concat([b1, b2, b3])\n }\n\n toRS () {\n return Buffer.concat([\n this.r.toBuffer({ size: 32 }),\n this.s.toBuffer({ size: 32 })\n ])\n }\n\n toDer () {\n const rnbuf = this.r.toBuffer()\n const snbuf = this.s.toBuffer()\n\n const rneg = rnbuf[0] & 0x80\n const sneg = snbuf[0] & 0x80\n\n const rbuf = rneg ? Buffer.concat([Buffer.from([0x00]), rnbuf]) : rnbuf\n const sbuf = sneg ? Buffer.concat([Buffer.from([0x00]), snbuf]) : snbuf\n\n const length = 2 + rbuf.length + 2 + sbuf.length\n const rlength = rbuf.length\n const slength = sbuf.length\n const rheader = 0x02\n const sheader = 0x02\n const header = 0x30\n\n const der = Buffer.concat([\n Buffer.from([header, length, rheader, rlength]),\n rbuf,\n Buffer.from([sheader, slength]),\n sbuf\n ])\n return der\n }\n\n toTxFormat () {\n const derbuf = this.toDer()\n const buf = Buffer.alloc(1)\n buf.writeUInt8(this.nHashType, 0)\n return Buffer.concat([derbuf, buf])\n }\n\n toString () {\n return this.toHex()\n }\n}\n\nSig.SIGHASH_ALL = 0x00000001\nSig.SIGHASH_NONE = 0x00000002\nSig.SIGHASH_SINGLE = 0x00000003\nSig.SIGHASH_FORKID = 0x00000040\nSig.SIGHASH_ANYONECANPAY = 0x00000080\n\nexport { Sig }\n","/**\n * Buffer Writer\n * =============\n *\n * This is the writing complement of the Br. You can easily write\n * VarInts and other basic number types. The way to use it is: buf =\n * new Bw().write(buf1).write(buf2).toBuffer()\n */\n'use strict'\n\nclass Bw {\n constructor (bufs) {\n this.fromObject({ bufs })\n }\n\n fromObject (obj) {\n this.bufs = obj.bufs || this.bufs || []\n return this\n }\n\n getLength () {\n let len = 0\n for (const i in this.bufs) {\n const buf = this.bufs[i]\n len = len + buf.length\n }\n return len\n }\n\n toBuffer () {\n return Buffer.concat(this.bufs)\n }\n\n write (buf) {\n this.bufs.push(buf)\n return this\n }\n\n writeReverse (buf) {\n const buf2 = Buffer.alloc(buf.length)\n for (let i = 0; i < buf2.length; i++) {\n buf2[i] = buf[buf.length - 1 - i]\n }\n this.bufs.push(buf2)\n return this\n }\n\n writeUInt8 (n) {\n const buf = Buffer.alloc(1)\n buf.writeUInt8(n, 0)\n this.write(buf)\n return this\n }\n\n writeInt8 (n) {\n const buf = Buffer.alloc(1)\n buf.writeInt8(n, 0)\n this.write(buf)\n return this\n }\n\n writeUInt16BE (n) {\n const buf = Buffer.alloc(2)\n buf.writeUInt16BE(n, 0)\n this.write(buf)\n return this\n }\n\n writeInt16BE (n) {\n const buf = Buffer.alloc(2)\n buf.writeInt16BE(n, 0)\n this.write(buf)\n return this\n }\n\n writeUInt16LE (n) {\n const buf = Buffer.alloc(2)\n buf.writeUInt16LE(n, 0)\n this.write(buf)\n return this\n }\n\n writeInt16LE (n) {\n const buf = Buffer.alloc(2)\n buf.writeInt16LE(n, 0)\n this.write(buf)\n return this\n }\n\n writeUInt32BE (n) {\n const buf = Buffer.alloc(4)\n buf.writeUInt32BE(n, 0)\n this.write(buf)\n return this\n }\n\n writeInt32BE (n) {\n const buf = Buffer.alloc(4)\n buf.writeInt32BE(n, 0)\n this.write(buf)\n return this\n }\n\n writeUInt32LE (n) {\n const buf = Buffer.alloc(4)\n buf.writeUInt32LE(n, 0)\n this.write(buf)\n return this\n }\n\n writeInt32LE (n) {\n const buf = Buffer.alloc(4)\n buf.writeInt32LE(n, 0)\n this.write(buf)\n return this\n }\n\n writeUInt64BEBn (bn) {\n const buf = bn.toBuffer({ size: 8 })\n this.write(buf)\n return this\n }\n\n writeUInt64LEBn (bn) {\n const buf = bn.toBuffer({ size: 8 })\n this.writeReverse(buf)\n return this\n }\n\n writeVarIntNum (n) {\n const buf = Bw.varIntBufNum(n)\n this.write(buf)\n return this\n }\n\n writeVarIntBn (bn) {\n const buf = Bw.varIntBufBn(bn)\n this.write(buf)\n return this\n }\n\n static varIntBufNum (n) {\n let buf\n if (n < 253) {\n buf = Buffer.alloc(1)\n buf.writeUInt8(n, 0)\n } else if (n < 0x10000) {\n buf = Buffer.alloc(1 + 2)\n buf.writeUInt8(253, 0)\n buf.writeUInt16LE(n, 1)\n } else if (n < 0x100000000) {\n buf = Buffer.alloc(1 + 4)\n buf.writeUInt8(254, 0)\n buf.writeUInt32LE(n, 1)\n } else {\n buf = Buffer.alloc(1 + 8)\n buf.writeUInt8(255, 0)\n buf.writeInt32LE(n & -1, 1)\n buf.writeUInt32LE(Math.floor(n / 0x100000000), 5)\n }\n return buf\n }\n\n static varIntBufBn (bn) {\n let buf\n const n = bn.toNumber()\n if (n < 253) {\n buf = Buffer.alloc(1)\n buf.writeUInt8(n, 0)\n } else if (n < 0x10000) {\n buf = Buffer.alloc(1 + 2)\n buf.writeUInt8(253, 0)\n buf.writeUInt16LE(n, 1)\n } else if (n < 0x100000000) {\n buf = Buffer.alloc(1 + 4)\n buf.writeUInt8(254, 0)\n buf.writeUInt32LE(n, 1)\n } else {\n const bw = new Bw()\n bw.writeUInt8(255)\n bw.writeUInt64LEBn(bn)\n buf = bw.toBuffer()\n }\n return buf\n }\n}\n\nexport { Bw }\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.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 : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\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\nfunction 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 (Buffer.isBuffer(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\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(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 (!Buffer.isBuffer(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 (Buffer.isBuffer(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 (!Buffer.isBuffer(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 = exports.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 '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(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 (Buffer.isBuffer(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 (!Buffer.isBuffer(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 = Buffer.isBuffer(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\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 * Public Key\n * ==========\n *\n * A public key corresponds to a private key. If you have a private key, you\n * can find the corresponding public key with new PubKey().fromPrivKey(privKey).\n */\n'use strict'\n\nimport { Point } from './point'\nimport { Bn } from './bn'\nimport { Bw } from './bw'\nimport { Struct } from './struct'\nimport { Workers } from './workers'\n\nclass PubKey extends Struct {\n constructor (point, compressed) {\n super({ point, compressed })\n }\n\n fromJSON (json) {\n this.fromFastHex(json)\n return this\n }\n\n toJSON () {\n return this.toFastHex()\n }\n\n fromPrivKey (privKey) {\n this.fromObject({\n point: Point.getG().mul(privKey.bn),\n compressed: privKey.compressed\n })\n return this\n }\n\n static fromPrivKey (privKey) {\n return new this().fromPrivKey(privKey)\n }\n\n async asyncFromPrivKey (privKey) {\n const workersResult = await Workers.asyncObjectMethod(this, 'fromPrivKey', [\n privKey\n ])\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromPrivKey (privKey) {\n return new this().asyncFromPrivKey(privKey)\n }\n\n fromBuffer (buf, strict) {\n return this.fromDer(buf, strict)\n }\n\n async asyncFromBuffer (buf, strict) {\n const args = [buf, strict]\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'fromBuffer',\n args\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n fromFastBuffer (buf) {\n if (buf.length === 0) {\n return this\n }\n const compressed = Boolean(buf[0])\n buf = buf.slice(1)\n this.fromDer(buf)\n this.compressed = compressed\n return this\n }\n\n /**\n * In order to mimic the non-strict style of OpenSSL, set strict = false. For\n * information and what prefixes 0x06 and 0x07 mean, in addition to the normal\n * compressed and uncompressed public keys, see the message by Peter Wuille\n * where he discovered these \"hybrid pubKeys\" on the mailing list:\n * http://sourceforge.net/p/bitcoin/mailman/message/29416133/\n */\n fromDer (buf, strict) {\n if (strict === undefined) {\n strict = true\n } else {\n strict = false\n }\n if (\n buf[0] === 0x04 ||\n (!strict && (buf[0] === 0x06 || buf[0] === 0x07))\n ) {\n const xbuf = buf.slice(1, 33)\n const ybuf = buf.slice(33, 65)\n if (xbuf.length !== 32 || ybuf.length !== 32 || buf.length !== 65) {\n throw new Error('LEngth of x and y must be 32 bytes')\n }\n const x = new Bn(xbuf)\n const y = new Bn(ybuf)\n this.point = new Point(x, y)\n this.compressed = false\n } else if (buf[0] === 0x03) {\n const xbuf = buf.slice(1)\n const x = new Bn(xbuf)\n this.fromX(true, x)\n this.compressed = true\n } else if (buf[0] === 0x02) {\n const xbuf = buf.slice(1)\n const x = new Bn(xbuf)\n this.fromX(false, x)\n this.compressed = true\n } else {\n throw new Error('Invalid DER format pubKey')\n }\n return this\n }\n\n static fromDer (buf, strict) {\n return new this().fromDer(buf, strict)\n }\n\n fromString (str) {\n this.fromDer(Buffer.from(str, 'hex'))\n return this\n }\n\n fromX (odd, x) {\n if (typeof odd !== 'boolean') {\n throw new Error('Must specify whether y is odd or not (true or false)')\n }\n this.point = Point.fromX(odd, x)\n return this\n }\n\n static fromX (odd, x) {\n return new this().fromX(odd, x)\n }\n\n toBuffer () {\n const compressed = this.compressed === undefined ? true : this.compressed\n return this.toDer(compressed)\n }\n\n toFastBuffer () {\n if (!this.point) {\n return Buffer.alloc(0)\n }\n const bw = new Bw()\n const compressed =\n this.compressed === undefined ? true : Boolean(this.compressed)\n bw.writeUInt8(Number(compressed))\n bw.write(this.toDer(false))\n return bw.toBuffer()\n }\n\n toDer (compressed) {\n compressed = compressed === undefined ? this.compressed : compressed\n if (typeof compressed !== 'boolean') {\n throw new Error(\n 'Must specify whether the public key is compressed or not (true or false)'\n )\n }\n\n const x = this.point.getX()\n const y = this.point.getY()\n\n const xbuf = x.toBuffer({ size: 32 })\n const ybuf = y.toBuffer({ size: 32 })\n\n let prefix\n if (!compressed) {\n prefix = Buffer.from([0x04])\n return Buffer.concat([prefix, xbuf, ybuf])\n } else {\n const odd = ybuf[ybuf.length - 1] % 2\n if (odd) {\n prefix = Buffer.from([0x03])\n } else {\n prefix = Buffer.from([0x02])\n }\n return Buffer.concat([prefix, xbuf])\n }\n }\n\n toString () {\n const compressed = this.compressed === undefined ? true : this.compressed\n return this.toDer(compressed).toString('hex')\n }\n\n /**\n * Translated from bitcoind's IsCompressedOrUncompressedPubKey\n */\n static isCompressedOrUncompressed (buf) {\n if (buf.length < 33) {\n // Non-canonical public key: too short\n return false\n }\n if (buf[0] === 0x04) {\n if (buf.length !== 65) {\n // Non-canonical public key: invalid length for uncompressed key\n return false\n }\n } else if (buf[0] === 0x02 || buf[0] === 0x03) {\n if (buf.length !== 33) {\n // Non-canonical public key: invalid length for compressed key\n return false\n }\n } else {\n // Non-canonical public key: neither compressed nor uncompressed\n return false\n }\n return true\n }\n\n // https://www.iacr.org/archive/pkc2003/25670211/25670211.pdf\n validate () {\n if (this.point.isInfinity()) {\n throw new Error('point: Point cannot be equal to Infinity')\n }\n if (this.point.eq(new Point(new Bn(0), new Bn(0)))) {\n throw new Error('point: Point cannot be equal to 0, 0')\n }\n this.point.validate()\n return this\n }\n}\n\nexport { PubKey }\n","/*\n * Script\n * ======\n *\n * Script is the scripting language built into bitcoin. The Script class lets\n * you create an instance of a script, e.g. for a scriptSig or a scriptPubKey.\n * It understands both the binary format, as well as two different string\n * formats. The default string format, to/fromString, is a custom format only\n * used by Yours Bitcoin because it is isomorphic to the binary format (or as\n * isomorphic as it can be ... since OP_0 and OP_FALSE have the same byte\n * value, and so do OP_1 and OP_TRUE). The bitcoind string format is also\n * support, but that format is not isomorphic (i.e., if you pull in a string\n * and then write it again, you are likely to get back a different string, even\n * if you don't use OP_0, OP_FALSE, OP_1, or OP_TRUE).\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Br } from './br'\nimport { Bw } from './bw'\nimport { cmp } from './cmp'\nimport { OpCode } from './op-code'\nimport { PubKey } from './pub-key'\nimport { Sig } from './sig'\nimport { Struct } from './struct'\n\nclass Script extends Struct {\n constructor (chunks = []) {\n super({ chunks })\n }\n\n fromJSON (json) {\n return this.fromString(json)\n }\n\n toJSON () {\n return this.toString()\n }\n\n fromBuffer (buf) {\n this.chunks = []\n\n const br = new Br(buf)\n while (!br.eof()) {\n const opCodeNum = br.readUInt8()\n\n let len = 0\n let buf = Buffer.from([])\n if (opCodeNum > 0 && opCodeNum < OpCode.OP_PUSHDATA1) {\n len = opCodeNum\n this.chunks.push({\n buf: br.read(len),\n len: len,\n opCodeNum: opCodeNum\n })\n } else if (opCodeNum === OpCode.OP_PUSHDATA1) {\n try {\n len = br.readUInt8()\n buf = br.read(len)\n } catch (err) {\n br.read()\n }\n this.chunks.push({\n buf: buf,\n len: len,\n opCodeNum: opCodeNum\n })\n } else if (opCodeNum === OpCode.OP_PUSHDATA2) {\n try {\n len = br.readUInt16LE()\n buf = br.read(len)\n } catch (err) {\n br.read()\n }\n this.chunks.push({\n buf: buf,\n len: len,\n opCodeNum: opCodeNum\n })\n } else if (opCodeNum === OpCode.OP_PUSHDATA4) {\n try {\n len = br.readUInt32LE()\n buf = br.read(len)\n } catch (err) {\n br.read()\n }\n this.chunks.push({\n buf: buf,\n len: len,\n opCodeNum: opCodeNum\n })\n } else {\n this.chunks.push({\n opCodeNum: opCodeNum\n })\n }\n }\n\n return this\n }\n\n toBuffer () {\n const bw = new Bw()\n\n for (let i = 0; i < this.chunks.length; i++) {\n const chunk = this.chunks[i]\n const opCodeNum = chunk.opCodeNum\n bw.writeUInt8(opCodeNum)\n if (chunk.buf) {\n if (opCodeNum < OpCode.OP_PUSHDATA1) {\n bw.write(chunk.buf)\n } else if (opCodeNum === OpCode.OP_PUSHDATA1) {\n bw.writeUInt8(chunk.len)\n bw.write(chunk.buf)\n } else if (opCodeNum === OpCode.OP_PUSHDATA2) {\n bw.writeUInt16LE(chunk.len)\n bw.write(chunk.buf)\n } else if (opCodeNum === OpCode.OP_PUSHDATA4) {\n bw.writeUInt32LE(chunk.len)\n bw.write(chunk.buf)\n }\n }\n }\n\n return bw.toBuffer()\n }\n\n fromString (str) {\n this.chunks = []\n if (str === '' || str === undefined) {\n return this\n }\n\n const tokens = str.split(' ')\n let i = 0\n while (i < tokens.length) {\n const token = tokens[i]\n let opCodeNum\n try {\n const opCode = new OpCode().fromString(token)\n opCodeNum = opCode.toNumber()\n } catch (err) {}\n\n if (opCodeNum === undefined) {\n opCodeNum = parseInt(token, 10)\n if (opCodeNum > 0 && opCodeNum < OpCode.OP_PUSHDATA1) {\n this.chunks.push({\n buf: Buffer.from(tokens[i + 1].slice(2), 'hex'),\n len: opCodeNum,\n opCodeNum: opCodeNum\n })\n i = i + 2\n } else if (opCodeNum === 0) {\n this.chunks.push({\n opCodeNum: 0\n })\n i = i + 1\n } else {\n throw new Error('Invalid script')\n }\n } else if (\n opCodeNum === OpCode.OP_PUSHDATA1 ||\n opCodeNum === OpCode.OP_PUSHDATA2 ||\n opCodeNum === OpCode.OP_PUSHDATA4\n ) {\n if (tokens[i + 2].slice(0, 2) !== '0x') {\n throw new Error('Pushdata data must start with 0x')\n }\n this.chunks.push({\n buf: Buffer.from(tokens[i + 2].slice(2), 'hex'),\n len: parseInt(tokens[i + 1], 10),\n opCodeNum: opCodeNum\n })\n i = i + 3\n } else {\n this.chunks.push({\n opCodeNum: opCodeNum\n })\n i = i + 1\n }\n }\n return this\n }\n\n toString () {\n let str = ''\n\n for (let i = 0; i < this.chunks.length; i++) {\n const chunk = this.chunks[i]\n const opCodeNum = chunk.opCodeNum\n if (!chunk.buf) {\n if (OpCode.str[opCodeNum] !== undefined) {\n str = str + ' ' + new OpCode(opCodeNum).toString()\n } else {\n str = str + ' ' + '0x' + opCodeNum.toString(16)\n }\n } else {\n if (\n opCodeNum === OpCode.OP_PUSHDATA1 ||\n opCodeNum === OpCode.OP_PUSHDATA2 ||\n opCodeNum === OpCode.OP_PUSHDATA4\n ) {\n str = str + ' ' + new OpCode(opCodeNum).toString()\n }\n str = str + ' ' + chunk.len\n str = str + ' ' + '0x' + chunk.buf.toString('hex')\n }\n }\n\n return str.substr(1)\n }\n\n /**\n * Input the script from the script string format used in bitcoind data tests\n */\n fromBitcoindString (str) {\n const bw = new Bw()\n const tokens = str.split(' ')\n let i\n for (i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n if (token === '') {\n continue\n }\n if (token[0] === '0' && token[1] === 'x') {\n const hex = token.slice(2)\n bw.write(Buffer.from(hex, 'hex'))\n } else if (token[0] === \"'\") {\n const tstr = token.slice(1, token.length - 1)\n const cbuf = Buffer.from(tstr)\n const tbuf = new Script().writeBuffer(cbuf).toBuffer()\n bw.write(tbuf)\n } else if (OpCode['OP_' + token] !== undefined) {\n const opstr = 'OP_' + token\n const opCodeNum = OpCode[opstr]\n bw.writeUInt8(opCodeNum)\n } else if (typeof OpCode[token] === 'number') {\n const opstr = token\n const opCodeNum = OpCode[opstr]\n bw.writeUInt8(opCodeNum)\n } else if (!isNaN(parseInt(token, 10))) {\n const bn = new Bn(token)\n const script = new Script().writeBn(bn)\n const tbuf = script.toBuffer()\n bw.write(tbuf)\n } else {\n throw new Error('Could not determine type of script value')\n }\n }\n const buf = bw.toBuffer()\n return this.fromBuffer(buf)\n }\n\n static fromBitcoindString (str) {\n return new this().fromBitcoindString(str)\n }\n\n /**\n * Output the script to the script string format used in bitcoind data tests.\n */\n toBitcoindString () {\n let str = ''\n for (let i = 0; i < this.chunks.length; i++) {\n const chunk = this.chunks[i]\n if (chunk.buf) {\n const buf = new Script([chunk]).toBuffer()\n const hex = buf.toString('hex')\n str = str + ' ' + '0x' + hex\n } else if (OpCode.str[chunk.opCodeNum] !== undefined) {\n const ostr = new OpCode(chunk.opCodeNum).toString()\n str = str + ' ' + ostr.slice(3) // remove OP_\n } else {\n str = str + ' ' + '0x' + chunk.opCodeNum.toString(16)\n }\n }\n return str.substr(1)\n }\n\n /**\n * Input the script from the script string format used in bitcoind data tests\n */\n fromAsmString (str) {\n this.chunks = []\n\n const tokens = str.split(' ')\n let i = 0\n while (i < tokens.length) {\n const token = tokens[i]\n let opCode, opCodeNum\n try {\n opCode = OpCode.fromString(token)\n opCodeNum = opCode.toNumber()\n } catch (err) {\n opCode = undefined\n opCodeNum = undefined\n }\n\n // we start with two special cases, 0 and -1, which are handled specially in\n // toASM. see _chunkToString.\n if (token === '0') {\n opCodeNum = 0\n this.chunks.push({\n opCodeNum: opCodeNum\n })\n i = i + 1\n } else if (token === '-1') {\n opCodeNum = OpCode.OP_1NEGATE\n this.chunks.push({\n opCodeNum: opCodeNum\n })\n i = i + 1\n } else if (opCode === undefined) {\n const hex = tokens[i]\n const buf = Buffer.from(hex, 'hex')\n if (buf.toString('hex') !== hex) {\n throw new Error('invalid hex string in script')\n }\n const len = buf.length\n if (len >= 0 && len < OpCode.OP_PUSHDATA1) {\n opCodeNum = len\n } else if (len < Math.pow(2, 8)) {\n opCodeNum = OpCode.OP_PUSHDATA1\n } else if (len < Math.pow(2, 16)) {\n opCodeNum = OpCode.OP_PUSHDATA2\n } else if (len < Math.pow(2, 32)) {\n opCodeNum = OpCode.OP_PUSHDATA4\n }\n this.chunks.push({\n buf: buf,\n len: buf.length,\n opCodeNum: opCodeNum\n })\n i = i + 1\n } else {\n this.chunks.push({\n opCodeNum: opCodeNum\n })\n i = i + 1\n }\n }\n return this\n }\n\n static fromAsmString (str) {\n return new this().fromAsmString(str)\n }\n\n /**\n * Output the script to the script string format used in bitcoind data tests.\n */\n toAsmString () {\n var str = ''\n for (var i = 0; i < this.chunks.length; i++) {\n var chunk = this.chunks[i]\n str += this._chunkToString(chunk)\n }\n\n return str.substr(1)\n }\n\n _chunkToString (chunk, type) {\n var opCodeNum = chunk.opCodeNum\n var str = ''\n if (!chunk.buf) {\n // no data chunk\n if (typeof OpCode.str[opCodeNum] !== 'undefined') {\n // A few cases where the opcode name differs from reverseMap\n // aside from 1 to 16 data pushes.\n if (opCodeNum === 0) {\n // OP_0 -> 0\n str = str + ' 0'\n } else if (opCodeNum === 79) {\n // OP_1NEGATE -> 1\n str = str + ' -1'\n } else {\n str = str + ' ' + new OpCode(opCodeNum).toString()\n }\n } else {\n var numstr = opCodeNum.toString(16)\n if (numstr.length % 2 !== 0) {\n numstr = '0' + numstr\n }\n str = str + ' ' + numstr\n }\n } else {\n // data chunk\n if (chunk.len > 0) {\n str = str + ' ' + chunk.buf.toString('hex')\n }\n }\n return str\n }\n\n fromOpReturnData (dataBuf) {\n this.writeOpCode(OpCode.OP_RETURN)\n this.writeBuffer(dataBuf)\n return this\n }\n\n static fromOpReturnData (dataBuf) {\n return new this().fromOpReturnData(dataBuf)\n }\n\n fromSafeData (dataBuf) {\n this.writeOpCode(OpCode.OP_FALSE)\n this.writeOpCode(OpCode.OP_RETURN)\n this.writeBuffer(dataBuf)\n return this\n }\n\n static fromSafeData (dataBuf) {\n return new this().fromSafeData(dataBuf)\n }\n\n fromSafeDataArray (dataBufs) {\n this.writeOpCode(OpCode.OP_FALSE)\n this.writeOpCode(OpCode.OP_RETURN)\n for (const i in dataBufs) {\n const dataBuf = dataBufs[i]\n this.writeBuffer(dataBuf)\n }\n return this\n }\n\n static fromSafeDataArray (dataBufs) {\n return new this().fromSafeDataArray(dataBufs)\n }\n\n getData () {\n if (this.isSafeDataOut()) {\n const chunks = this.chunks.slice(2)\n const buffers = chunks.map(chunk => chunk.buf)\n return buffers\n }\n if (this.isOpReturn()) {\n const chunks = this.chunks.slice(1)\n const buffers = chunks.map(chunk => chunk.buf)\n return buffers\n }\n throw new Error('Unrecognized script type to get data from')\n }\n\n /**\n * Turn script into a standard pubKeyHash output script\n */\n fromPubKeyHash (hashBuf) {\n if (hashBuf.length !== 20) {\n throw new Error('hashBuf must be a 20 byte buffer')\n }\n this.writeOpCode(OpCode.OP_DUP)\n this.writeOpCode(OpCode.OP_HASH160)\n this.writeBuffer(hashBuf)\n this.writeOpCode(OpCode.OP_EQUALVERIFY)\n this.writeOpCode(OpCode.OP_CHECKSIG)\n return this\n }\n\n static fromPubKeyHash (hashBuf) {\n return new this().fromPubKeyHash(hashBuf)\n }\n\n static sortPubKeys (pubKeys) {\n return pubKeys.slice().sort((pubKey1, pubKey2) => {\n const buf1 = pubKey1.toBuffer()\n const buf2 = pubKey2.toBuffer()\n const len = Math.max(buf1.length, buf2.length)\n for (let i = 0; i <= len; i++) {\n if (buf1[i] === undefined) {\n return -1 // shorter strings come first\n }\n if (buf2[i] === undefined) {\n return 1\n }\n if (buf1[i] < buf2[i]) {\n return -1\n }\n if (buf1[i] > buf2[i]) {\n return 1\n } else {\n continue\n }\n }\n })\n }\n\n /**\n * Generate a multisig output script from a list of public keys. sort\n * defaults to true. If sort is true, the pubKeys are sorted\n * lexicographically.\n */\n fromPubKeys (m, pubKeys, sort = true) {\n if (typeof m !== 'number') {\n throw new Error('m must be a number')\n }\n if (sort === true) {\n pubKeys = Script.sortPubKeys(pubKeys)\n }\n this.writeOpCode(m + OpCode.OP_1 - 1)\n for (const i in pubKeys) {\n this.writeBuffer(pubKeys[i].toBuffer())\n }\n this.writeOpCode(pubKeys.length + OpCode.OP_1 - 1)\n this.writeOpCode(OpCode.OP_CHECKMULTISIG)\n return this\n }\n\n static fromPubKeys (m, pubKeys, sort) {\n return new this().fromPubKeys(m, pubKeys, sort)\n }\n\n removeCodeseparators () {\n const chunks = []\n for (let i = 0; i < this.chunks.length; i++) {\n if (this.chunks[i].opCodeNum !== OpCode.OP_CODESEPARATOR) {\n chunks.push(this.chunks[i])\n }\n }\n this.chunks = chunks\n return this\n }\n\n isPushOnly () {\n for (let i = 0; i < this.chunks.length; i++) {\n const chunk = this.chunks[i]\n const opCodeNum = chunk.opCodeNum\n if (opCodeNum > OpCode.OP_16) {\n return false\n }\n }\n return true\n }\n\n isOpReturn () {\n if (\n this.chunks[0].opCodeNum === OpCode.OP_RETURN &&\n this.chunks.filter(chunk => Buffer.isBuffer(chunk.buf)).length === this.chunks.slice(1).length\n ) {\n return true\n } else {\n return false\n }\n }\n\n isSafeDataOut () {\n if (this.chunks.length < 2) {\n return false\n }\n if (this.chunks[0].opCodeNum !== OpCode.OP_FALSE) {\n return false\n }\n var chunks = this.chunks.slice(1)\n var script2 = new Script(chunks)\n return script2.isOpReturn()\n }\n\n isPubKeyHashOut () {\n if (\n this.chunks[0] &&\n this.chunks[0].opCodeNum === OpCode.OP_DUP &&\n this.chunks[1] &&\n this.chunks[1].opCodeNum === OpCode.OP_HASH160 &&\n this.chunks[2].buf &&\n this.chunks[3] &&\n this.chunks[3].opCodeNum === OpCode.OP_EQUALVERIFY &&\n this.chunks[4] &&\n this.chunks[4].opCodeNum === OpCode.OP_CHECKSIG\n ) {\n return true\n } else {\n return false\n }\n }\n\n /**\n * A pubKeyHash input should consist of two push operations. The first push\n * operation may be OP_0, which means the signature is missing, which is true\n * for some partially signed (and invalid) transactions.\n */\n isPubKeyHashIn () {\n if (\n this.chunks.length === 2 &&\n (this.chunks[0].buf || this.chunks[0].opCodeNum === OpCode.OP_0) &&\n (this.chunks[1].buf || this.chunks[0].opCodeNum === OpCode.OP_0)\n ) {\n return true\n } else {\n return false\n }\n }\n\n isScriptHashOut () {\n const buf = this.toBuffer()\n return (\n buf.length === 23 &&\n buf[0] === OpCode.OP_HASH160 &&\n buf[1] === 0x14 &&\n buf[22] === OpCode.OP_EQUAL\n )\n }\n\n /**\n * Note that these are frequently indistinguishable from pubKeyHashin\n */\n isScriptHashIn () {\n if (!this.isPushOnly()) {\n return false\n }\n try {\n new Script().fromBuffer(this.chunks[this.chunks.length - 1].buf)\n } catch (err) {\n return false\n }\n return true\n }\n\n isMultiSigOut () {\n const m = this.chunks[0].opCodeNum - OpCode.OP_1 + 1\n if (!(m >= 1 && m <= 16)) {\n return false\n }\n const pubKeychunks = this.chunks.slice(1, this.chunks.length - 2)\n if (\n !pubKeychunks.every(chunk => {\n try {\n const buf = chunk.buf\n const pubKey = new PubKey().fromDer(buf)\n pubKey.validate()\n return true\n } catch (err) {\n return false\n }\n })\n ) {\n return false\n }\n const n = this.chunks[this.chunks.length - 2].opCodeNum - OpCode.OP_1 + 1\n if (!(n >= m && n <= 16)) {\n return false\n }\n if (this.chunks[1 + n + 1].opCodeNum !== OpCode.OP_CHECKMULTISIG) {\n return false\n }\n return true\n }\n\n isMultiSigIn () {\n if (this.chunks[0].opCodeNum !== OpCode.OP_0) {\n return false\n }\n const remaining = this.chunks.slice(1)\n if (remaining.length < 1) {\n return false\n }\n return remaining.every(\n chunk => Buffer.isBuffer(chunk.buf) && Sig.IsTxDer(chunk.buf)\n )\n }\n\n /**\n * Analagous to bitcoind's FindAndDelete Find and deconste equivalent chunks,\n * typically used with push data chunks. Note that this will find and deconste\n * not just the same data, but the same data with the same push data op as\n * produced by default. i.e., if a pushdata in a tx does not use the minimal\n * pushdata op, then when you try to remove the data it is pushing, it will not\n * be removed, because they do not use the same pushdata op.\n */\n findAndDelete (script) {\n const buf = script.toBuffer()\n for (let i = 0; i < this.chunks.length; i++) {\n const script2 = new Script([this.chunks[i]])\n const buf2 = script2.toBuffer()\n if (cmp(buf, buf2)) {\n this.chunks.splice(i, 1)\n }\n }\n return this\n }\n\n writeScript (script) {\n this.chunks = this.chunks.concat(script.chunks)\n return this\n }\n\n static writeScript (script) {\n return new this().writeScript(script)\n }\n\n writeString (str) {\n const script = new Script().fromString(str)\n this.chunks = this.chunks.concat(script.chunks)\n return this\n }\n\n static writeString (str) {\n return new this().writeString(str)\n }\n\n writeOpCode (opCodeNum) {\n this.chunks.push({ opCodeNum })\n return this\n }\n\n static writeOpCode (opCodeNum) {\n return new this().writeOpCode(opCodeNum)\n }\n\n setChunkOpCode (i, opCodeNum) {\n this.chunks[i] = { opCodeNum }\n return this\n }\n\n // write a big number in the minimal way\n writeBn (bn) {\n if (bn.cmp(0) === OpCode.OP_0) {\n this.chunks.push({\n opCodeNum: OpCode.OP_0\n })\n } else if (bn.cmp(-1) === 0) {\n this.chunks.push({\n opCodeNum: OpCode.OP_1NEGATE\n })\n } else if (bn.cmp(1) >= 0 && bn.cmp(16) <= 0) {\n // see OP_1 - OP_16\n this.chunks.push({\n opCodeNum: bn.toNumber() + OpCode.OP_1 - 1\n })\n } else {\n const buf = bn.toSm({ endian: 'little' })\n this.writeBuffer(buf)\n }\n return this\n }\n\n static writeBn (bn) {\n return new this().writeBn(bn)\n }\n\n writeNumber (number) {\n this.writeBn(new Bn().fromNumber(number))\n return this\n }\n\n static writeNumber (number) {\n return new this().writeNumber(number)\n }\n\n setChunkBn (i, bn) {\n this.chunks[i] = new Script().writeBn(bn).chunks[0]\n return this\n }\n\n // note: this does not necessarily write buffers in the minimal way\n // to write numbers in the minimal way, see writeBn\n writeBuffer (buf) {\n let opCodeNum\n const len = buf.length\n if (buf.length > 0 && buf.length < OpCode.OP_PUSHDATA1) {\n opCodeNum = buf.length\n } else if (buf.length === 0) {\n opCodeNum = OpCode.OP_0\n } else if (buf.length < Math.pow(2, 8)) {\n opCodeNum = OpCode.OP_PUSHDATA1\n } else if (buf.length < Math.pow(2, 16)) {\n opCodeNum = OpCode.OP_PUSHDATA2\n } else if (buf.length < Math.pow(2, 32)) {\n opCodeNum = OpCode.OP_PUSHDATA4\n } else {\n throw new Error(\"You can't push that much data\")\n }\n this.chunks.push({\n buf: buf,\n len: len,\n opCodeNum: opCodeNum\n })\n return this\n }\n\n static writeBuffer (buf) {\n return new this().writeBuffer(buf)\n }\n\n setChunkBuffer (i, buf) {\n this.chunks[i] = new Script().writeBuffer(buf).chunks[0]\n return this\n }\n\n // make sure a push is the smallest way to push that particular data\n // comes from bitcoind's script interpreter CheckMinimalPush function\n checkMinimalPush (i) {\n const chunk = this.chunks[i]\n const buf = chunk.buf\n const opCodeNum = chunk.opCodeNum\n if (!buf) {\n return true\n }\n if (buf.length === 0) {\n // Could have used OP_0.\n return opCodeNum === OpCode.OP_0\n } else if (buf.length === 1 && buf[0] >= 1 && buf[0] <= 16) {\n // Could have used OP_1 .. OP_16.\n return opCodeNum === OpCode.OP_1 + (buf[0] - 1)\n } else if (buf.length === 1 && buf[0] === 0x81) {\n // Could have used OP_1NEGATE.\n return opCodeNum === OpCode.OP_1NEGATE\n } else if (buf.length <= 75) {\n // Could have used a direct push (opCode indicating number of bytes pushed + those bytes).\n return opCodeNum === buf.length\n } else if (buf.length <= 255) {\n // Could have used OP_PUSHDATA.\n return opCodeNum === OpCode.OP_PUSHDATA1\n } else if (buf.length <= 65535) {\n // Could have used OP_PUSHDATA2.\n return opCodeNum === OpCode.OP_PUSHDATA2\n }\n return true\n }\n}\n\nexport { Script }\n","/**\n * VarInt (a.k.a. Compact Size)\n * ============================\n *\n * A varInt is a varible sized integer, and it is a format that is unique to\n * bitcoin, and used throughout bitcoin to represent the length of binary data\n * in a compact format that can take up as little as 1 byte or as much as 9\n * bytes.\n */\n'use strict'\n\nimport { Br } from './br'\nimport { Bw } from './bw'\nimport { Struct } from './struct'\n\nclass VarInt extends Struct {\n constructor (buf) {\n super({ buf })\n }\n\n fromJSON (json) {\n this.fromObject({\n buf: Buffer.from(json, 'hex')\n })\n return this\n }\n\n toJSON () {\n return this.buf.toString('hex')\n }\n\n fromBuffer (buf) {\n this.buf = buf\n return this\n }\n\n fromBr (br) {\n this.buf = br.readVarIntBuf()\n return this\n }\n\n fromBn (bn) {\n this.buf = new Bw().writeVarIntBn(bn).toBuffer()\n return this\n }\n\n static fromBn (bn) {\n return new this().fromBn(bn)\n }\n\n fromNumber (num) {\n this.buf = new Bw().writeVarIntNum(num).toBuffer()\n return this\n }\n\n static fromNumber (num) {\n return new this().fromNumber(num)\n }\n\n toBuffer () {\n return this.buf\n }\n\n toBn () {\n return new Br(this.buf).readVarIntBn()\n }\n\n toNumber () {\n return new Br(this.buf).readVarIntNum()\n }\n}\n\nexport { VarInt }\n","/**\n * Point (on secp256k1)\n * ====================\n *\n * A point is a point on the secp256k1 curve which is the elliptic curve used\n * by bitcoin. This code is a wrapper for Fedor Indutny's Point class from his\n * elliptic library. This code adds a few minor conveniences, but is mostly the\n * same. Since Fedor's code returns points and big numbers that are instances\n * of his point and big number classes, we have to wrap all the methods such as\n * getX() to return the Yours Bitcoin point and big number types.\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport elliptic from 'bitcoin-elliptic'\n\nconst ec = elliptic.curves.secp256k1\nconst _point = ec.curve.point()\nconst _Point = _point.constructor\n\nclass Point extends _Point {\n constructor (x, y, isRed) {\n super(ec.curve, x, y, isRed)\n }\n\n static fromX (isOdd, x) {\n const _point = ec.curve.pointFromX(x, isOdd)\n const point = Object.create(Point.prototype)\n return point.copyFrom(_point)\n }\n\n copyFrom (point) {\n if (!(point instanceof _Point)) {\n throw new Error('point should be an external point')\n }\n Object.keys(point).forEach(\n function (key) {\n this[key] = point[key]\n }.bind(this)\n )\n return this\n }\n\n add (p) {\n p = _Point.prototype.add.call(this, p)\n const point = Object.create(Point.prototype)\n return point.copyFrom(p)\n }\n\n mul (bn) {\n if (!bn.lt(Point.getN())) {\n throw new Error('point mul out of range')\n }\n const p = _Point.prototype.mul.call(this, bn)\n const point = Object.create(Point.prototype)\n return point.copyFrom(p)\n }\n\n mulAdd (bn1, point, bn2) {\n const p = _Point.prototype.mulAdd.call(this, bn1, point, bn2)\n point = Object.create(Point.prototype)\n return point.copyFrom(p)\n }\n\n getX () {\n const _x = _Point.prototype.getX.call(this)\n const x = Object.create(Bn.prototype)\n _x.copy(x)\n return x\n }\n\n getY () {\n const _y = _Point.prototype.getY.call(this)\n const y = Object.create(Bn.prototype)\n _y.copy(y)\n return y\n }\n\n fromX (isOdd, x) {\n const point = Point.fromX(isOdd, x)\n return this.copyFrom(point)\n }\n\n toJSON () {\n return {\n x: this.getX().toString(),\n y: this.getY().toString()\n }\n }\n\n fromJSON (json) {\n const x = new Bn().fromString(json.x)\n const y = new Bn().fromString(json.y)\n const point = new Point(x, y)\n return this.copyFrom(point)\n }\n\n toString () {\n return JSON.stringify(this.toJSON())\n }\n\n fromString (str) {\n const json = JSON.parse(str)\n const p = new Point().fromJSON(json)\n return this.copyFrom(p)\n }\n\n static getG () {\n const _g = ec.curve.g\n const g = Object.create(Point.prototype)\n return g.copyFrom(_g)\n }\n\n static getN () {\n return new Bn(ec.curve.n.toArray())\n }\n\n // https://www.iacr.org/archive/pkc2003/25670211/25670211.pdf\n validate () {\n const p2 = Point.fromX(this.getY().isOdd(), this.getX())\n if (!(p2.getY().cmp(this.getY()) === 0)) {\n throw new Error('Invalid y value of public key')\n }\n if (\n !(this.getX().gt(-1) && this.getX().lt(Point.getN())) ||\n !(this.getY().gt(-1) && this.getY().lt(Point.getN()))\n ) {\n throw new Error('Point does not lie on the curve')\n }\n return this\n }\n}\n\nexport { Point }\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n 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 BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n 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 r._strip();\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","/**\n * Buffer Reader\n * =============\n *\n * This is a convenience class for reading VarInts and other basic types from a\n * buffer. This class is most useful for reading VarInts, and also for signed\n * or unsigned integers of various types. It can also read a buffer in reverse\n * order, which is useful in bitcoin which uses little endian numbers a lot so\n * you find that you must reverse things. You probably want to use it like:\n * varInt = new Br(buf).readnew VarInt()\n */\n'use strict'\n\nimport { Bn } from './bn'\n\nclass Br {\n constructor (buf) {\n this.fromObject({ buf })\n }\n\n fromObject (obj) {\n this.buf = obj.buf || this.buf || undefined\n this.pos = obj.pos || this.pos || 0\n return this\n }\n\n eof () {\n return this.pos >= this.buf.length\n }\n\n read (len = this.buf.length) {\n const buf = this.buf.slice(this.pos, this.pos + len)\n this.pos = this.pos + len\n return buf\n }\n\n readReverse (len = this.buf.length) {\n const buf = this.buf.slice(this.pos, this.pos + len)\n this.pos = this.pos + len\n const buf2 = Buffer.alloc(buf.length)\n for (let i = 0; i < buf2.length; i++) {\n buf2[i] = buf[buf.length - 1 - i]\n }\n return buf2\n }\n\n readUInt8 () {\n const val = this.buf.readUInt8(this.pos)\n this.pos = this.pos + 1\n return val\n }\n\n readInt8 () {\n const val = this.buf.readInt8(this.pos)\n this.pos = this.pos + 1\n return val\n }\n\n readUInt16BE () {\n const val = this.buf.readUInt16BE(this.pos)\n this.pos = this.pos + 2\n return val\n }\n\n readInt16BE () {\n const val = this.buf.readInt16BE(this.pos)\n this.pos = this.pos + 2\n return val\n }\n\n readUInt16LE () {\n const val = this.buf.readUInt16LE(this.pos)\n this.pos = this.pos + 2\n return val\n }\n\n readInt16LE () {\n const val = this.buf.readInt16LE(this.pos)\n this.pos = this.pos + 2\n return val\n }\n\n readUInt32BE () {\n const val = this.buf.readUInt32BE(this.pos)\n this.pos = this.pos + 4\n return val\n }\n\n readInt32BE () {\n const val = this.buf.readInt32BE(this.pos)\n this.pos = this.pos + 4\n return val\n }\n\n readUInt32LE () {\n const val = this.buf.readUInt32LE(this.pos)\n this.pos = this.pos + 4\n return val\n }\n\n readInt32LE () {\n const val = this.buf.readInt32LE(this.pos)\n this.pos = this.pos + 4\n return val\n }\n\n readUInt64BEBn () {\n const buf = this.buf.slice(this.pos, this.pos + 8)\n const bn = new Bn().fromBuffer(buf)\n this.pos = this.pos + 8\n return bn\n }\n\n readUInt64LEBn () {\n const buf = this.readReverse(8)\n const bn = new Bn().fromBuffer(buf)\n return bn\n }\n\n readVarIntNum () {\n const first = this.readUInt8()\n let bn, n\n switch (first) {\n case 0xfd:\n return this.readUInt16LE()\n case 0xfe:\n return this.readUInt32LE()\n case 0xff:\n bn = this.readUInt64LEBn()\n n = bn.toNumber()\n if (n <= Math.pow(2, 53)) {\n return n\n } else {\n throw new Error(\n 'number too large to retain precision - use readVarIntBn'\n )\n }\n default:\n return first\n }\n }\n\n readVarIntBuf () {\n const first = this.buf.readUInt8(this.pos)\n switch (first) {\n case 0xfd:\n return this.read(1 + 2)\n case 0xfe:\n return this.read(1 + 4)\n case 0xff:\n return this.read(1 + 8)\n default:\n return this.read(1)\n }\n }\n\n readVarIntBn () {\n const first = this.readUInt8()\n switch (first) {\n case 0xfd:\n return new Bn(this.readUInt16LE())\n case 0xfe:\n return new Bn(this.readUInt32LE())\n case 0xff:\n return this.readUInt64LEBn()\n default:\n return new Bn(first)\n }\n }\n}\n\nexport { Br }\n","/*\n * Transaction Input\n * =================\n *\n * An input to a transaction. The way you probably want to use this is through\n * the convenient method of new TxIn(txHashBuf, txOutNum, script, nSequence) (i.e., you\n * can leave out the scriptVi, which is computed automatically if you leave it\n * out.)\n */\n'use strict'\n\nimport { Bw } from './bw'\nimport { VarInt } from './var-int'\nimport { OpCode } from './op-code'\nimport { Script } from './script'\nimport { Struct } from './struct'\n\nclass TxIn extends Struct {\n constructor (txHashBuf, txOutNum, scriptVi, script, nSequence = 0xffffffff) {\n super({ txHashBuf, txOutNum, scriptVi, script, nSequence })\n }\n\n setScript (script) {\n this.scriptVi = VarInt.fromNumber(script.toBuffer().length)\n this.script = script\n return this\n }\n\n fromProperties (txHashBuf, txOutNum, script, nSequence) {\n this.fromObject({ txHashBuf, txOutNum, nSequence })\n this.setScript(script)\n return this\n }\n\n static fromProperties (txHashBuf, txOutNum, script, nSequence) {\n return new this().fromProperties(txHashBuf, txOutNum, script, nSequence)\n }\n\n fromJSON (json) {\n this.fromObject({\n txHashBuf:\n typeof json.txHashBuf !== 'undefined'\n ? Buffer.from(json.txHashBuf, 'hex')\n : undefined,\n txOutNum: json.txOutNum,\n scriptVi:\n typeof json.scriptVi !== 'undefined'\n ? VarInt.fromJSON(json.scriptVi)\n : undefined,\n script:\n typeof json.script !== 'undefined'\n ? Script.fromJSON(json.script)\n : undefined,\n nSequence: json.nSequence\n })\n return this\n }\n\n toJSON () {\n return {\n txHashBuf:\n typeof this.txHashBuf !== 'undefined'\n ? this.txHashBuf.toString('hex')\n : undefined,\n txOutNum: this.txOutNum,\n scriptVi:\n typeof this.scriptVi !== 'undefined'\n ? this.scriptVi.toJSON()\n : undefined,\n script:\n typeof this.script !== 'undefined' ? this.script.toJSON() : undefined,\n nSequence: this.nSequence\n }\n }\n\n fromBr (br) {\n this.txHashBuf = br.read(32)\n this.txOutNum = br.readUInt32LE()\n this.scriptVi = VarInt.fromBuffer(br.readVarIntBuf())\n this.script = Script.fromBuffer(br.read(this.scriptVi.toNumber()))\n this.nSequence = br.readUInt32LE()\n return this\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n bw.write(this.txHashBuf)\n bw.writeUInt32LE(this.txOutNum)\n bw.write(this.scriptVi.buf)\n bw.write(this.script.toBuffer())\n bw.writeUInt32LE(this.nSequence)\n return bw\n }\n\n /**\n * Generate txIn with blank signatures from a txOut and its\n * txHashBuf+txOutNum. A \"blank\" signature is just an OP_0. The pubKey also\n * defaults to blank but can be substituted with the real public key if you\n * know what it is.\n */\n fromPubKeyHashTxOut (txHashBuf, txOutNum, txOut, pubKey) {\n const script = new Script()\n if (txOut.script.isPubKeyHashOut()) {\n script.writeOpCode(OpCode.OP_0) // blank signature\n if (pubKey) {\n script.writeBuffer(pubKey.toBuffer())\n } else {\n script.writeOpCode(OpCode.OP_0)\n }\n } else {\n throw new Error('txOut must be of type pubKeyHash')\n }\n this.txHashBuf = txHashBuf\n this.txOutNum = txOutNum\n this.setScript(script)\n return this\n }\n\n hasNullInput () {\n const hex = this.txHashBuf.toString('hex')\n if (\n hex ===\n '0000000000000000000000000000000000000000000000000000000000000000' &&\n this.txOutNum === 0xffffffff\n ) {\n return true\n }\n return false\n }\n\n /**\n * Analagous to bitcoind's SetNull in COutPoint\n */\n setNullInput () {\n this.txHashBuf = Buffer.alloc(32)\n this.txHashBuf.fill(0)\n this.txOutNum = 0xffffffff // -1 cast to unsigned int\n }\n}\n\n/* Interpret sequence numbers as relative lock-time constraints. */\nTxIn.LOCKTIME_VERIFY_SEQUENCE = 1 << 0\n\n/* Setting nSequence to this value for every input in a transaction disables\n * nLockTime. */\nTxIn.SEQUENCE_FINAL = 0xffffffff\n\n/* Below flags apply in the context of Bip 68 */\n/* If this flag set, txIn.nSequence is NOT interpreted as a relative lock-time.\n * */\nTxIn.SEQUENCE_LOCKTIME_DISABLE_FLAG = 1 << 31\n\n/* If txIn.nSequence encodes a relative lock-time and this flag is set, the\n * relative lock-time has units of 512 seconds, otherwise it specifies blocks\n * with a granularity of 1. */\nTxIn.SEQUENCE_LOCKTIME_TYPE_FLAG = 1 << 22\n\n/* If txIn.nSequence encodes a relative lock-time, this mask is applied to\n * extract that lock-time from the sequence field. */\nTxIn.SEQUENCE_LOCKTIME_MASK = 0x0000ffff\n\n/* In order to use the same number of bits to encode roughly the same\n * wall-clock duration, and because blocks are naturally limited to occur\n * every 600s on average, the minimum granularity for time-based relative\n * lock-time is fixed at 512 seconds. Converting from CTxIn::nSequence to\n * seconds is performed by multiplying by 512 = 2^9, or equivalently\n * shifting up by 9 bits. */\nTxIn.SEQUENCE_LOCKTIME_GRANULARITY = 9\n\nexport { TxIn }\n","/**\n * Transaction\n * ===========\n *\n * A bitcoin transaction.\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Br } from './br'\nimport { Bw } from './bw'\nimport { Ecdsa } from './ecdsa'\nimport { Hash } from './hash'\nimport { HashCache } from './hash-cache'\nimport { Script } from './script'\nimport { Sig } from './sig'\nimport { Struct } from './struct'\nimport { TxIn } from './tx-in'\nimport { TxOut } from './tx-out'\nimport { VarInt } from './var-int'\nimport { Workers } from './workers'\n\nclass Tx extends Struct {\n constructor (\n versionBytesNum = 1,\n txInsVi = VarInt.fromNumber(0),\n txIns = [],\n txOutsVi = VarInt.fromNumber(0),\n txOuts = [],\n nLockTime = 0\n ) {\n super({ versionBytesNum, txInsVi, txIns, txOutsVi, txOuts, nLockTime })\n }\n\n fromJSON (json) {\n const txIns = []\n json.txIns.forEach(function (txIn) {\n txIns.push(new TxIn().fromJSON(txIn))\n })\n const txOuts = []\n json.txOuts.forEach(function (txOut) {\n txOuts.push(new TxOut().fromJSON(txOut))\n })\n this.fromObject({\n versionBytesNum: json.versionBytesNum,\n txInsVi: new VarInt().fromJSON(json.txInsVi),\n txIns: txIns,\n txOutsVi: new VarInt().fromJSON(json.txOutsVi),\n txOuts: txOuts,\n nLockTime: json.nLockTime\n })\n return this\n }\n\n toJSON () {\n const txIns = []\n this.txIns.forEach(function (txIn) {\n txIns.push(txIn.toJSON())\n })\n const txOuts = []\n this.txOuts.forEach(function (txOut) {\n txOuts.push(txOut.toJSON())\n })\n return {\n versionBytesNum: this.versionBytesNum,\n txInsVi: this.txInsVi.toJSON(),\n txIns: txIns,\n txOutsVi: this.txOutsVi.toJSON(),\n txOuts: txOuts,\n nLockTime: this.nLockTime\n }\n }\n\n fromBr (br) {\n this.versionBytesNum = br.readUInt32LE()\n this.txInsVi = new VarInt(br.readVarIntBuf())\n const txInsNum = this.txInsVi.toNumber()\n this.txIns = []\n for (let i = 0; i < txInsNum; i++) {\n this.txIns.push(new TxIn().fromBr(br))\n }\n this.txOutsVi = new VarInt(br.readVarIntBuf())\n const txOutsNum = this.txOutsVi.toNumber()\n this.txOuts = []\n for (let i = 0; i < txOutsNum; i++) {\n this.txOuts.push(new TxOut().fromBr(br))\n }\n this.nLockTime = br.readUInt32LE()\n return this\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n bw.writeUInt32LE(this.versionBytesNum)\n bw.write(this.txInsVi.buf)\n for (let i = 0; i < this.txIns.length; i++) {\n this.txIns[i].toBw(bw)\n }\n bw.write(this.txOutsVi.buf)\n for (let i = 0; i < this.txOuts.length; i++) {\n this.txOuts[i].toBw(bw)\n }\n bw.writeUInt32LE(this.nLockTime)\n return bw\n }\n\n // https://github.com/Bitcoin-UAHF/spec/blob/master/replay-protected-sighash.md\n hashPrevouts () {\n const bw = new Bw()\n for (const i in this.txIns) {\n const txIn = this.txIns[i]\n bw.write(txIn.txHashBuf) // outpoint (1/2)\n bw.writeUInt32LE(txIn.txOutNum) // outpoint (2/2)\n }\n return Hash.sha256Sha256(bw.toBuffer())\n }\n\n hashSequence () {\n const bw = new Bw()\n for (const i in this.txIns) {\n const txIn = this.txIns[i]\n bw.writeUInt32LE(txIn.nSequence)\n }\n return Hash.sha256Sha256(bw.toBuffer())\n }\n\n hashOutputs () {\n const bw = new Bw()\n for (const i in this.txOuts) {\n const txOut = this.txOuts[i]\n bw.write(txOut.toBuffer())\n }\n return Hash.sha256Sha256(bw.toBuffer())\n }\n\n /**\n * For a normal transaction, subScript is usually the scriptPubKey. For a\n * p2sh transaction, subScript is usually the redeemScript. If you're not\n * normal because you're using OP_CODESEPARATORs, you know what to do.\n */\n sighash (nHashType, nIn, subScript, valueBn, flags = 0, hashCache = new HashCache()) {\n // start with UAHF part (Bitcoin SV)\n // https://github.com/Bitcoin-UAHF/spec/blob/master/replay-protected-sighash.md\n if (\n nHashType & Sig.SIGHASH_FORKID &&\n flags & Tx.SCRIPT_ENABLE_SIGHASH_FORKID\n ) {\n let hashPrevouts = Buffer.alloc(32, 0)\n let hashSequence = Buffer.alloc(32, 0)\n let hashOutputs = Buffer.alloc(32, 0)\n\n if (!(nHashType & Sig.SIGHASH_ANYONECANPAY)) {\n hashPrevouts = hashCache.prevoutsHashBuf ? hashCache.prevoutsHashBuf : hashCache.prevoutsHashBuf = this.hashPrevouts()\n }\n\n if (\n !(nHashType & Sig.SIGHASH_ANYONECANPAY) &&\n (nHashType & 0x1f) !== Sig.SIGHASH_SINGLE &&\n (nHashType & 0x1f) !== Sig.SIGHASH_NONE\n ) {\n hashSequence = hashCache.sequenceHashBuf ? hashCache.sequenceHashBuf : hashCache.sequenceHashBuf = this.hashSequence()\n }\n\n if (\n (nHashType & 0x1f) !== Sig.SIGHASH_SINGLE &&\n (nHashType & 0x1f) !== Sig.SIGHASH_NONE\n ) {\n hashOutputs = hashCache.outputsHashBuf ? hashCache.outputsHashBuf : hashCache.outputsHashBuf = this.hashOutputs()\n } else if (\n (nHashType & 0x1f) === Sig.SIGHASH_SINGLE &&\n nIn < this.txOuts.length\n ) {\n hashOutputs = Hash.sha256Sha256(this.txOuts[nIn].toBuffer())\n }\n\n const bw = new Bw()\n bw.writeUInt32LE(this.versionBytesNum)\n bw.write(hashPrevouts)\n bw.write(hashSequence)\n bw.write(this.txIns[nIn].txHashBuf) // outpoint (1/2)\n bw.writeUInt32LE(this.txIns[nIn].txOutNum) // outpoint (2/2)\n bw.writeVarIntNum(subScript.toBuffer().length)\n bw.write(subScript.toBuffer())\n bw.writeUInt64LEBn(valueBn)\n bw.writeUInt32LE(this.txIns[nIn].nSequence)\n bw.write(hashOutputs)\n bw.writeUInt32LE(this.nLockTime)\n bw.writeUInt32LE(nHashType >>> 0)\n\n return new Br(Hash.sha256Sha256(bw.toBuffer())).readReverse()\n }\n\n // original bitcoin code follows - not related to UAHF (Bitcoin SV)\n const txcopy = this.cloneByBuffer()\n\n subScript = new Script().fromBuffer(subScript.toBuffer())\n subScript.removeCodeseparators()\n\n for (let i = 0; i < txcopy.txIns.length; i++) {\n txcopy.txIns[i] = TxIn.fromBuffer(txcopy.txIns[i].toBuffer()).setScript(\n new Script()\n )\n }\n\n txcopy.txIns[nIn] = TxIn.fromBuffer(\n txcopy.txIns[nIn].toBuffer()\n ).setScript(subScript)\n\n if ((nHashType & 31) === Sig.SIGHASH_NONE) {\n txcopy.txOuts.length = 0\n txcopy.txOutsVi = VarInt.fromNumber(0)\n\n for (let i = 0; i < txcopy.txIns.length; i++) {\n if (i !== nIn) {\n txcopy.txIns[i].nSequence = 0\n }\n }\n } else if ((nHashType & 31) === Sig.SIGHASH_SINGLE) {\n // The SIGHASH_SINGLE bug.\n // https://bitcointalk.org/index.php?topic=260595.0\n if (nIn > txcopy.txOuts.length - 1) {\n return Buffer.from(\n '0000000000000000000000000000000000000000000000000000000000000001',\n 'hex'\n )\n }\n\n txcopy.txOuts.length = nIn + 1\n txcopy.txOutsVi = VarInt.fromNumber(nIn + 1)\n\n for (let i = 0; i < txcopy.txOuts.length; i++) {\n if (i < nIn) {\n txcopy.txOuts[i] = TxOut.fromProperties(\n new Bn().fromBuffer(Buffer.from('ffffffffffffffff', 'hex')),\n new Script()\n )\n }\n }\n\n for (let i = 0; i < txcopy.txIns.length; i++) {\n if (i !== nIn) {\n txcopy.txIns[i].nSequence = 0\n }\n }\n }\n // else, SIGHASH_ALL\n\n if (nHashType & Sig.SIGHASH_ANYONECANPAY) {\n txcopy.txIns[0] = txcopy.txIns[nIn]\n txcopy.txIns.length = 1\n txcopy.txInsVi = VarInt.fromNumber(1)\n }\n\n const buf = new Bw()\n .write(txcopy.toBuffer())\n .writeInt32LE(nHashType)\n .toBuffer()\n return new Br(Hash.sha256Sha256(buf)).readReverse()\n }\n\n async asyncSighash (nHashType, nIn, subScript, valueBn, flags = 0, hashCache = {}) {\n const workersResult = await Workers.asyncObjectMethod(this, 'sighash', [\n nHashType,\n nIn,\n subScript,\n valueBn,\n flags,\n hashCache\n ])\n return workersResult.resbuf\n }\n\n // This function returns a signature but does not update any inputs\n sign (keyPair, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID, nIn, subScript, valueBn, flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID, hashCache = {}) {\n const hashBuf = this.sighash(nHashType, nIn, subScript, valueBn, flags, hashCache)\n const sig = Ecdsa.sign(hashBuf, keyPair, 'little').fromObject({\n nHashType: nHashType\n })\n return sig\n }\n\n async asyncSign (keyPair, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID, nIn, subScript, valueBn, flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID, hashCache = {}) {\n const workersResult = await Workers.asyncObjectMethod(this, 'sign', [\n keyPair,\n nHashType,\n nIn,\n subScript,\n valueBn,\n flags,\n hashCache\n ])\n return new Sig().fromFastBuffer(workersResult.resbuf)\n }\n\n // This function takes a signature as input and does not parse any inputs\n verify (\n sig,\n pubKey,\n nIn,\n subScript,\n enforceLowS = false,\n valueBn,\n flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID,\n hashCache = {}\n ) {\n const hashBuf = this.sighash(sig.nHashType, nIn, subScript, valueBn, flags, hashCache)\n return Ecdsa.verify(hashBuf, sig, pubKey, 'little', enforceLowS)\n }\n\n async asyncVerify (\n sig,\n pubKey,\n nIn,\n subScript,\n enforceLowS = false,\n valueBn,\n flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID,\n hashCache = {}\n ) {\n const workersResult = await Workers.asyncObjectMethod(this, 'verify', [\n sig,\n pubKey,\n nIn,\n subScript,\n enforceLowS,\n valueBn,\n flags,\n hashCache\n ])\n return JSON.parse(workersResult.resbuf.toString())\n }\n\n hash () {\n return Hash.sha256Sha256(this.toBuffer())\n }\n\n async asyncHash () {\n const workersResult = await Workers.asyncObjectMethod(this, 'hash', [])\n return workersResult.resbuf\n }\n\n id () {\n return new Br(this.hash()).readReverse().toString('hex')\n }\n\n async asyncId () {\n const workersResult = await Workers.asyncObjectMethod(this, 'id', [])\n return JSON.parse(workersResult.resbuf.toString())\n }\n\n addTxIn (txHashBuf, txOutNum, script, nSequence) {\n let txIn\n if (txHashBuf instanceof TxIn) {\n txIn = txHashBuf\n } else {\n txIn = new TxIn()\n .fromObject({ txHashBuf, txOutNum, nSequence })\n .setScript(script)\n }\n this.txIns.push(txIn)\n this.txInsVi = VarInt.fromNumber(this.txInsVi.toNumber() + 1)\n return this\n }\n\n addTxOut (valueBn, script) {\n let txOut\n if (valueBn instanceof TxOut) {\n txOut = valueBn\n } else {\n txOut = new TxOut().fromObject({ valueBn }).setScript(script)\n }\n this.txOuts.push(txOut)\n this.txOutsVi = VarInt.fromNumber(this.txOutsVi.toNumber() + 1)\n return this\n }\n\n /**\n * Analagous to bitcoind's IsCoinBase function in transaction.h\n */\n isCoinbase () {\n return this.txIns.length === 1 && this.txIns[0].hasNullInput()\n }\n\n /**\n * BIP 69 sorting. Be sure to sign after sorting.\n */\n sort () {\n this.txIns.sort((first, second) => {\n return new Br(first.txHashBuf).readReverse().compare(new Br(second.txHashBuf).readReverse()) ||\n first.txOutNum - second.txOutNum\n })\n\n this.txOuts.sort((first, second) => {\n return first.valueBn.sub(second.valueBn).toNumber() ||\n first.script.toBuffer().compare(second.script.toBuffer())\n })\n\n return this\n }\n}\n\nTx.MAX_MONEY = 21000000 * 1e8\n\n// This is defined on Interp, but Tx cannot depend on Interp - must redefine here\nTx.SCRIPT_ENABLE_SIGHASH_FORKID = 1 << 16\n\nexport { Tx }\n","/**\n * Random Number Generator\n * =======================\n *\n * Random numbers are important in bitcoin primarily for generating private\n * keys. It is also important for creating signatures if you are using a random\n * value of k, but Yours Bitcoin defaults to using deterministic k. That means\n * computing a random private key, or a random seed for use in Bip39 or Bip32,\n * is the primary use of the random number generator. Note that the simplicity\n * of this class is extremely carefully considered. It is easy to audit that\n * this code runs node's randomBytes function. It is also easy to audit that\n * the randomBytes method is correctly interpreted as\n * window.crypto.getRandomValues when this code is browserified by browserify,\n * and thus also works correctly in the browser. We deliberately do not do\n * anything else to this random number in order to minimize possible errors in\n * this absolutely critical code.\n */\n'use strict'\n\nimport randomBytes from 'randombytes'\n\nclass Random {}\n\nRandom.getRandomBuffer = function (size) {\n return randomBytes(size)\n}\n\nexport { Random }\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","/**\n * Constant-Time Buffer Compare\n * ============================\n *\n * A constant-time comparison function. This should be used in any security\n * sensitive code where leaking timing information may lead to lessened\n * security. Note that if the buffers are not equal in length, this function\n * loops for the longest buffer, which may not be necessary. Usually this\n * function should be used for buffers that would otherwise be equal length,\n * such as a hash, particularly Hmacs.\n *\n * The algorithm here, which is XORs each byte (or, if undefined, 0) with the\n * corresponding other byte, and then ORs that with a running total (d), is\n * adapted from here:\n *\n * https://groups.google.com/forum/#!topic/keyczar-discuss/VXHsoJSLKhM\n */\n'use strict'\nconst cmp = (buf1, buf2) => {\n if (!Buffer.isBuffer(buf1) || !Buffer.isBuffer(buf2)) {\n throw new Error('buf1 and buf2 must be buffers')\n }\n if (buf1.length !== buf2.length) {\n return false\n }\n\n let d = 0\n for (let i = 0; i < buf1.length; i++) {\n const x = buf1[i]\n const y = buf2[i]\n d |= x ^ y\n }\n\n return d === 0\n}\n\nexport { cmp }\n","/**\n * Constants\n * =========\n *\n * Constants used to distinguish mainnet from testnet.\n */\n'use strict'\nimport { config } from './config'\n\nconst Constants = {}\n\nConstants.Mainnet = {\n MaxSize: 0x02000000, // MAX_SIZE\n Port: 8333,\n Address: {\n pubKeyHash: 0x00,\n payToScriptHash: 0x05\n },\n Bip32: {\n pubKey: 0x0488b21e,\n privKey: 0x0488ade4\n },\n Block: {\n maxNBits: 0x1d00ffff,\n magicNum: 0xe3e1f3e8\n },\n Msg: {\n magicNum: 0xe3e1f3e8,\n versionBytesNum: 70015 // as of Bitcoin SV v1.0.5\n },\n PrivKey: {\n versionByteNum: 0x80\n },\n TxBuilder: {\n dust: 546, // number of satoshis that an output can't be less than\n feePerKbNum: 0.00000500e8\n },\n Workers: {\n // Cannot be 5 seconds. This is actually too low for low end devices. We\n // have found by experimenting with Chrome developer tools that 60 seconds\n // works on low end mobile.\n timeout: 60000\n }\n}\n\nConstants.Testnet = Object.assign({}, Constants.Mainnet, {\n Port: 18333,\n Address: {\n pubKeyHash: 0x6f,\n payToScriptHash: 0xc4\n },\n Bip32: {\n pubKey: 0x043587cf,\n privKey: 0x04358394\n },\n Block: {\n maxNBits: 0x1d00ffff,\n magicNum: 0xf4e5f3f4\n },\n Msg: {\n magicNum: 0xf4e5f3f4,\n versionBytesNum: 70015 // as of Bitcoin SV v1.0.5\n },\n PrivKey: {\n versionByteNum: 0xef\n }\n})\n\nConstants.Regtest = Object.assign({}, Constants.Mainnet, {\n Port: 18444,\n Address: {\n pubKeyHash: 0x6f,\n payToScriptHash: 0xc4\n },\n Bip32: {\n pubKey: 0x043587cf,\n privKey: 0x04358394\n },\n Block: {\n maxNBits: 0x1d00ffff,\n magicNum: 0xdab5bffa\n },\n Msg: {\n magicNum: 0xdab5bffa,\n versionBytesNum: 70015 // as of Bitcoin SV v1.0.5\n },\n PrivKey: {\n versionByteNum: 0xef\n }\n})\n\nConstants.STN = Object.assign({}, Constants.Mainnet, {\n Port: 9333,\n Address: {\n pubKeyHash: 0x6f,\n payToScriptHash: 0xc4\n },\n Bip32: {\n pubKey: 0x043587cf,\n privKey: 0x04358394\n },\n Block: {\n maxNBits: 0x1d00ffff,\n magicNum: 0xfbcec4f9\n },\n Msg: {\n magicNum: 0xfbcec4f9,\n versionBytesNum: 70015 // as of Bitcoin SV v1.0.5\n },\n PrivKey: {\n versionByteNum: 0xef\n }\n})\n\n/**\n * Yours Bitcoin can be globally configured to mainnet or testnet. Via the\n * inject pattern, you always have access to the other network at any time.\n * However, it is very convenient to be able to change the default\n * configuration. The default is mainnet, which can be changed to testnet.\n */\n// Constants.Default = Object.assign({}, Constants.Mainnet)\nif (config.get('NETWORK') === 'testnet') {\n Constants.Default = Object.assign({}, Constants.Testnet)\n} else if (config.get('NETWORK') === 'mainnet') {\n Constants.Default = Object.assign({}, Constants.Mainnet)\n} else if (config.get('NETWORK') === 'regtest') {\n Constants.Default = Object.assign({}, Constants.Regtest)\n} else if (config.get('NETWORK') === 'stn') {\n Constants.Default = Object.assign({}, Constants.STN)\n} else {\n throw new Error(\n `must set network in environment variable - mainnet, testnet, regtest or stn?, received ${config.get('NETWORK')}`\n )\n}\n\nconst getConstants = (magicNum) => {\n if (Constants.Mainnet.Msg.magicNum === magicNum) {\n return Constants.Mainnet\n } else if (Constants.Testnet.Msg.magicNum === magicNum) {\n return Constants.Testnet\n } else if (Constants.Regtest.Msg.magicNum === magicNum) {\n return Constants.Regtest\n } else if (Constants.STN.Msg.magicNum === magicNum) {\n return Constants.STN\n } else {\n return Constants.Default\n }\n}\n\nexport { Constants, getConstants }\n","/**\n * Transaction Output\n * ==================\n *\n * An output to a transaction. The way you normally want to make one is with\n * new TxOut(valueBn, script) (i.e., just as with TxIn, you can leave out the\n * scriptVi, since it can be computed automatically.\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Bw } from './bw'\nimport { Script } from './script'\nimport { Struct } from './struct'\nimport { VarInt } from './var-int'\n\nclass TxOut extends Struct {\n constructor (valueBn, scriptVi, script) {\n super({ valueBn, scriptVi, script })\n }\n\n setScript (script) {\n this.scriptVi = VarInt.fromNumber(script.toBuffer().length)\n this.script = script\n return this\n }\n\n fromProperties (valueBn, script) {\n this.fromObject({ valueBn })\n this.setScript(script)\n return this\n }\n\n static fromProperties (valueBn, script) {\n return new this().fromProperties(valueBn, script)\n }\n\n fromJSON (json) {\n this.fromObject({\n valueBn: new Bn().fromJSON(json.valueBn),\n scriptVi: new VarInt().fromJSON(json.scriptVi),\n script: new Script().fromJSON(json.script)\n })\n return this\n }\n\n toJSON () {\n return {\n valueBn: this.valueBn.toJSON(),\n scriptVi: this.scriptVi.toJSON(),\n script: this.script.toJSON()\n }\n }\n\n fromBr (br) {\n this.valueBn = br.readUInt64LEBn()\n this.scriptVi = VarInt.fromNumber(br.readVarIntNum())\n this.script = new Script().fromBuffer(br.read(this.scriptVi.toNumber()))\n return this\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n bw.writeUInt64LEBn(this.valueBn)\n bw.write(this.scriptVi.buf)\n bw.write(this.script.toBuffer())\n return bw\n }\n}\n\nexport { TxOut }\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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\nSafeBuffer.prototype = Object.create(Buffer.prototype)\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","/**\n * KeyPair\n * =======\n *\n * A keyPair is a collection of a private key and a public key.\n * const keyPair = new KeyPair().fromRandom()\n * const keyPair = new KeyPair().fromPrivKey(privKey)\n * const privKey = keyPair.privKey\n * const pubKey = keyPair.pubKey\n */\n'use strict'\n\nimport { PrivKey as DefaultPrivKey } from './priv-key'\nimport { PubKey } from './pub-key'\nimport { Struct } from './struct'\nimport { Bw } from './bw'\n\nclass KeyPair extends Struct {\n constructor (privKey, pubKey, PrivKey = DefaultPrivKey) {\n super({ privKey, pubKey })\n this.PrivKey = PrivKey\n }\n\n fromJSON (json) {\n if (json.privKey) {\n this.privKey = this.PrivKey.fromJSON(json.privKey)\n }\n if (json.pubKey) {\n this.pubKey = PubKey.fromJSON(json.pubKey)\n }\n return this\n }\n\n fromBr (br) {\n const buflen1 = br.readUInt8()\n if (buflen1 > 0) {\n this.privKey = new this.PrivKey().fromFastBuffer(br.read(buflen1))\n }\n const buflen2 = br.readUInt8()\n if (buflen2 > 0) {\n this.pubKey = new PubKey().fromFastBuffer(br.read(buflen2))\n }\n return this\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n if (this.privKey) {\n const privKeybuf = this.privKey.toFastBuffer()\n bw.writeUInt8(privKeybuf.length)\n bw.write(privKeybuf)\n } else {\n bw.writeUInt8(0)\n }\n if (this.pubKey) {\n const pubKeybuf = this.pubKey.toFastBuffer()\n bw.writeUInt8(pubKeybuf.length)\n bw.write(pubKeybuf)\n } else {\n bw.writeUInt8(0)\n }\n return bw\n }\n\n fromString (str) {\n return this.fromJSON(JSON.parse(str))\n }\n\n toString () {\n return JSON.stringify(this.toJSON())\n }\n\n toPublic () {\n const keyPair = new KeyPair().fromObject(this)\n keyPair.privKey = undefined\n return keyPair\n }\n\n fromPrivKey (privKey) {\n this.privKey = privKey\n this.pubKey = new PubKey().fromPrivKey(privKey)\n return this\n }\n\n static fromPrivKey (privKey) {\n return new this().fromPrivKey(privKey)\n }\n\n async asyncFromPrivKey (privKey) {\n this.privKey = privKey\n this.pubKey = await new PubKey().asyncFromPrivKey(privKey)\n return this\n }\n\n static asyncFromPrivKey (privKey) {\n return new this().asyncFromPrivKey(privKey)\n }\n\n fromRandom () {\n this.privKey = new this.PrivKey().fromRandom()\n this.pubKey = new PubKey().fromPrivKey(this.privKey)\n return this\n }\n\n static fromRandom () {\n return new this().fromRandom()\n }\n\n async asyncFromRandom () {\n this.privKey = new this.PrivKey().fromRandom()\n return this.asyncFromPrivKey(this.privKey)\n }\n\n static asyncFromRandom () {\n return new this().asyncFromRandom()\n }\n}\n\nKeyPair.Mainnet = class extends KeyPair {\n constructor (privKey, pubKey) {\n super(privKey, pubKey, DefaultPrivKey.Mainnet)\n }\n}\n\nKeyPair.Testnet = class extends KeyPair {\n constructor (privKey, pubKey) {\n super(privKey, pubKey, DefaultPrivKey.Testnet)\n }\n}\n\nexport { KeyPair }\n","/**\n * Private Key\n * ===========\n *\n * A private key is used for signing transactions (or messages). The primary\n * way to use this is new PrivKey().fromRandom(), or new PrivKey().fromBuffer(buf).\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Point } from './point'\nimport { Constants } from './constants'\nimport { Base58Check } from './base-58-check'\nimport { Random } from './random'\nimport { Struct } from './struct'\n\nclass PrivKey extends Struct {\n constructor (bn, compressed, constants = null) {\n super({ bn, compressed })\n constants = constants || Constants.Default.PrivKey\n this.Constants = constants\n }\n\n fromJSON (json) {\n this.fromHex(json)\n return this\n }\n\n toJSON () {\n return this.toHex()\n }\n\n fromRandom () {\n let privBuf, bn, condition\n\n do {\n privBuf = Random.getRandomBuffer(32)\n bn = new Bn().fromBuffer(privBuf)\n condition = bn.lt(Point.getN())\n } while (!condition)\n\n this.fromObject({\n bn: bn,\n compressed: true\n })\n return this\n }\n\n static fromRandom () {\n return new this().fromRandom()\n }\n\n toBuffer () {\n let compressed = this.compressed\n\n if (compressed === undefined) {\n compressed = true\n }\n\n const privBuf = this.bn.toBuffer({ size: 32 })\n let buf\n if (compressed) {\n buf = Buffer.concat([\n Buffer.from([this.Constants.versionByteNum]),\n privBuf,\n Buffer.from([0x01])\n ])\n } else {\n buf = Buffer.concat([Buffer.from([this.Constants.versionByteNum]), privBuf])\n }\n\n return buf\n }\n\n fromBuffer (buf) {\n if (buf.length === 1 + 32 + 1 && buf[1 + 32 + 1 - 1] === 1) {\n this.compressed = true\n } else if (buf.length === 1 + 32) {\n this.compressed = false\n } else {\n throw new Error(\n 'Length of privKey buffer must be 33 (uncompressed pubKey) or 34 (compressed pubKey)'\n )\n }\n\n if (buf[0] !== this.Constants.versionByteNum) {\n throw new Error('Invalid versionByteNum byte')\n }\n\n return this.fromBn(new Bn().fromBuffer(buf.slice(1, 1 + 32)))\n }\n\n toBn () {\n return this.bn\n }\n\n fromBn (bn) {\n this.bn = bn\n return this\n }\n\n static fromBn (bn) {\n return new this().fromBn(bn)\n }\n\n validate () {\n if (!this.bn.lt(Point.getN())) {\n throw new Error('Number must be less than N')\n }\n if (typeof this.compressed !== 'boolean') {\n throw new Error(\n 'Must specify whether the corresponding public key is compressed or not (true or false)'\n )\n }\n return this\n }\n\n /**\n * Output the private key a Wallet Import Format (Wif) string.\n */\n toWif () {\n return Base58Check.encode(this.toBuffer())\n }\n\n /**\n * Input the private key from a Wallet Import Format (Wif) string.\n */\n fromWif (str) {\n return this.fromBuffer(Base58Check.decode(str))\n }\n\n static fromWif (str) {\n return new this().fromWif(str)\n }\n\n toString () {\n return this.toWif()\n }\n\n fromString (str) {\n return this.fromWif(str)\n }\n}\n\nPrivKey.Mainnet = class extends PrivKey {\n constructor (bn, compressed) {\n super(bn, compressed, Constants.Mainnet.PrivKey)\n }\n}\n\nPrivKey.Testnet = class extends PrivKey {\n constructor (bn, compressed) {\n super(bn, compressed, Constants.Testnet.PrivKey)\n }\n}\n\nexport { PrivKey }\n","/**\n * Base58 Check Encoding\n * =====================\n *\n * Base58 check encoding. The usual way to use it is\n * new Base58Check(buf).toString() or new Base58Check(str).toBuffer().\n */\n'use strict'\n\nimport { Base58 } from './base-58'\nimport { cmp } from './cmp'\nimport { Hash } from './hash'\nimport { Struct } from './struct'\n\nclass Base58Check extends Struct {\n constructor (buf) {\n super({ buf })\n }\n\n fromHex (hex) {\n return this.fromBuffer(Buffer.from(hex, 'hex'))\n }\n\n toHex () {\n return this.toBuffer().toString('hex')\n }\n\n static decode (s) {\n if (typeof s !== 'string') {\n throw new Error('Input must be a string')\n }\n\n const buf = Base58.decode(s)\n\n if (buf.length < 4) {\n throw new Error('Input string too short')\n }\n\n const data = buf.slice(0, -4)\n const csum = buf.slice(-4)\n\n const hash = Hash.sha256Sha256(data)\n const hash4 = hash.slice(0, 4)\n\n if (!cmp(csum, hash4)) {\n throw new Error('Checksum mismatch')\n }\n\n return data\n }\n\n static encode (buf) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('Input must be a buffer')\n }\n const checkedBuf = Buffer.alloc(buf.length + 4)\n const hash = Hash.sha256Sha256(buf)\n buf.copy(checkedBuf)\n hash.copy(checkedBuf, buf.length)\n return Base58.encode(checkedBuf)\n }\n\n fromBuffer (buf) {\n this.buf = buf\n return this\n }\n\n fromString (str) {\n const buf = Base58Check.decode(str)\n this.buf = buf\n return this\n }\n\n toBuffer () {\n return this.buf\n }\n\n toString () {\n return Base58Check.encode(this.buf)\n }\n}\n\nexport { Base58Check }\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\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}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\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}\n\nprocess.nextTick = function (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\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};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Aescbc (experimental)\n * =====================\n *\n * This is a convenience class for using Aes with Cbc. This is a low-level tool\n * that does not include authentication. You should only use this if you are\n * authenticating your data somehow else.\n */\n'use strict'\n\nimport { Aes } from './aes'\nimport { Cbc } from './cbc'\nimport { Random } from './random'\n\nclass Aescbc { }\n\nAescbc.encrypt = function (messageBuf, cipherKeyBuf, ivBuf, concatIvBuf = true) {\n ivBuf = ivBuf || Random.getRandomBuffer(128 / 8)\n const ctBuf = Cbc.encrypt(messageBuf, ivBuf, Aes, cipherKeyBuf)\n if (concatIvBuf) {\n return Buffer.concat([ivBuf, ctBuf])\n } else {\n return ctBuf\n }\n}\n\nAescbc.decrypt = function (encBuf, cipherKeyBuf, ivBuf = false) {\n if (!ivBuf) {\n const ivBuf = encBuf.slice(0, 128 / 8)\n const ctBuf = encBuf.slice(128 / 8)\n return Cbc.decrypt(ctBuf, ivBuf, Aes, cipherKeyBuf)\n } else {\n const ctBuf = encBuf\n return Cbc.decrypt(ctBuf, ivBuf, Aes, cipherKeyBuf)\n }\n}\n\nexport { Aescbc }\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","/**\n * Bitcoin Address\n * ===============\n *\n * A bitcoin address. Normal use cases:\n * const address = new Address().fromPubKey(pubKey)\n * const address = new Address().fromString(string)\n * const string = address.toString()\n * const script = address.toTxOutScript()\n * const isValid = Address.isValid(string)\n *\n * Can also do testnet:\n * const address = Address.Testnet()\n *\n * Note that an Address and an Addr are two completely different things. An\n * Address is what you send bitcoin to. An Addr is an ip address and port that\n * you connect to over the internet.\n */\n'use strict'\n\nimport { Base58Check } from './base-58-check'\nimport { Constants } from './constants'\nimport { Hash } from './hash'\nimport { OpCode } from './op-code'\nimport { PubKey } from './pub-key'\nimport { PrivKey } from './priv-key'\nimport { Script } from './script'\nimport { Struct } from './struct'\nimport { Workers } from './workers'\n\nclass Address extends Struct {\n constructor (versionByteNum, hashBuf, constants = null) {\n super({ versionByteNum, hashBuf })\n constants = constants || Constants.Default.Address\n this.Constants = constants\n }\n\n fromBuffer (buf) {\n if (buf.length !== 1 + 20) {\n throw new Error('address buffers must be exactly 21 bytes')\n }\n if (\n buf[0] !== this.Constants.pubKeyHash\n ) {\n throw new Error('address: invalid versionByteNum byte')\n }\n this.versionByteNum = buf[0]\n this.hashBuf = buf.slice(1)\n return this\n }\n\n fromPubKeyHashBuf (hashBuf) {\n this.hashBuf = hashBuf\n this.versionByteNum = this.Constants.pubKeyHash\n return this\n }\n\n static fromPubKeyHashBuf (hashBuf) {\n return new this().fromPubKeyHashBuf(hashBuf)\n }\n\n fromPubKey (pubKey) {\n const hashBuf = Hash.sha256Ripemd160(pubKey.toBuffer())\n return this.fromPubKeyHashBuf(hashBuf)\n }\n\n static fromPubKey (pubKey) {\n return new this().fromPubKey(pubKey)\n }\n\n async asyncFromPubKey (pubKey) {\n const args = [pubKey]\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'fromPubKey',\n args\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromPubKey (pubKey) {\n return new this().asyncFromPubKey(pubKey)\n }\n\n fromPrivKey (privKey) {\n const pubKey = new PubKey().fromPrivKey(privKey)\n const hashBuf = Hash.sha256Ripemd160(pubKey.toBuffer())\n return this.fromPubKeyHashBuf(hashBuf)\n }\n\n static fromPrivKey (privKey) {\n return new this().fromPrivKey(privKey)\n }\n\n async asyncFromPrivKey (privKey) {\n const args = [privKey]\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'fromPrivKey',\n args\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromPrivKey (privKey) {\n return new this().fromPrivKey(privKey)\n }\n\n fromRandom () {\n const randomPrivKey = new PrivKey().fromRandom()\n return this.fromPrivKey(randomPrivKey)\n }\n\n static fromRandom () {\n return new this().fromRandom()\n }\n\n async asyncFromRandom () {\n const args = []\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'fromRandom',\n args\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromRandom () {\n return new this().fromRandom()\n }\n\n fromString (str) {\n const buf = Base58Check.decode(str)\n return this.fromBuffer(buf)\n }\n\n async asyncFromString (str) {\n const args = [str]\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'fromString',\n args\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromString (str) {\n return new this().asyncFromString(str)\n }\n\n static isValid (addrstr) {\n let address\n try {\n address = new Address().fromString(addrstr)\n } catch (e) {\n return false\n }\n return address.isValid()\n }\n\n isValid () {\n try {\n this.validate()\n return true\n } catch (e) {\n return false\n }\n }\n\n toTxOutScript () {\n const script = new Script()\n script.writeOpCode(OpCode.OP_DUP)\n script.writeOpCode(OpCode.OP_HASH160)\n script.writeBuffer(this.hashBuf)\n script.writeOpCode(OpCode.OP_EQUALVERIFY)\n script.writeOpCode(OpCode.OP_CHECKSIG)\n\n return script\n }\n\n fromTxInScript (script) {\n const pubKeyHashBuf = Hash.sha256Ripemd160(script.chunks[1].buf || Buffer.from('00'.repeat(32), 'hex'))\n return this.fromPubKeyHashBuf(pubKeyHashBuf)\n }\n\n static fromTxInScript (script) {\n return new this().fromTxInScript(script)\n }\n\n fromTxOutScript (script) {\n return this.fromPubKeyHashBuf(script.chunks[2].buf)\n }\n\n static fromTxOutScript (script) {\n return new this().fromTxOutScript(script)\n }\n\n toBuffer () {\n const versionByteBuf = Buffer.from([this.versionByteNum])\n const buf = Buffer.concat([versionByteBuf, this.hashBuf])\n return buf\n }\n\n toJSON () {\n const json = {}\n if (this.hashBuf) {\n json.hashBuf = this.hashBuf.toString('hex')\n }\n if (typeof this.versionByteNum !== 'undefined') {\n json.versionByteNum = this.versionByteNum\n }\n return json\n }\n\n fromJSON (json) {\n if (json.hashBuf) {\n this.hashBuf = Buffer.from(json.hashBuf, 'hex')\n }\n if (typeof json.versionByteNum !== 'undefined') {\n this.versionByteNum = json.versionByteNum\n }\n return this\n }\n\n toString () {\n return Base58Check.encode(this.toBuffer())\n }\n\n async asyncToString () {\n const args = []\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'toString',\n args\n )\n return JSON.parse(workersResult.resbuf.toString())\n }\n\n validate () {\n if (!Buffer.isBuffer(this.hashBuf) || this.hashBuf.length !== 20) {\n throw new Error('hashBuf must be a buffer of 20 bytes')\n }\n if (\n this.versionByteNum !== this.Constants.pubKeyHash\n ) {\n throw new Error('invalid versionByteNum')\n }\n return this\n }\n}\n\nAddress.Mainnet = class extends Address {\n constructor (versionByteNum, hashBuf) {\n super(versionByteNum, hashBuf, Constants.Mainnet.Address)\n }\n}\n\nAddress.Testnet = class extends Address {\n constructor (versionByteNum, hashBuf) {\n super(versionByteNum, hashBuf, Constants.Testnet.Address)\n }\n}\n\nexport { Address }\n","/**\n * Ecdsa\n * =====\n *\n * Ecdsa is the signature algorithm used by bitcoin. The way you probably want\n * to use this is with the static Ecdsa.sign( ... ) and Ecdsa.verify( ... )\n * functions. Note that in bitcoin, the hashBuf is little endian, so if you are\n * signing or verifying something that has to do with a transaction, you should\n * explicitly plug in that it is little endian as an option to the sign and\n * verify functions.\n *\n * This implementation of Ecdsa uses deterministic signatures as defined in RFC\n * 6979 as the default, which has become a defacto standard in bitcoin wallets\n * due to recurring security issues around using a value of k pulled from a\n * possibly faulty entropy pool. If you use the same value of k twice, someone\n * can derive your private key. Deterministic k prevents this without needing\n * an entropy pool.\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Br } from './br'\nimport { Hash } from './hash'\nimport { KeyPair } from './key-pair'\nimport { Point } from './point'\nimport { PubKey } from './pub-key'\nimport { Random } from './random'\nimport { Sig } from './sig'\nimport { Struct } from './struct'\nimport { Workers } from './workers'\n\nclass Ecdsa extends Struct {\n constructor (sig, keyPair, hashBuf, k, endian, verified) {\n super({ sig, keyPair, hashBuf, k, endian, verified })\n }\n\n toJSON () {\n return {\n sig: this.sig ? this.sig.toString() : undefined,\n keyPair: this.keyPair\n ? this.keyPair.toBuffer().toString('hex')\n : undefined,\n hashBuf: this.hashBuf ? this.hashBuf.toString('hex') : undefined,\n k: this.k ? this.k.toString() : undefined,\n endian: this.endian,\n verified: this.verified\n }\n }\n\n fromJSON (json) {\n this.sig = json.sig ? new Sig().fromString(json.sig) : undefined\n this.keyPair = json.keyPair\n ? new KeyPair().fromBuffer(Buffer.from(json.keyPair, 'hex'))\n : undefined\n this.hashBuf = json.hashBuf ? Buffer.from(json.hashBuf, 'hex') : undefined\n this.k = json.k ? new Bn().fromString(json.k) : undefined\n this.endian = json.endian\n this.verified = json.verified\n return this\n }\n\n toBuffer () {\n const str = JSON.stringify(this.toJSON())\n return Buffer.from(str)\n }\n\n fromBuffer (buf) {\n const json = JSON.parse(buf.toString())\n return this.fromJSON(json)\n }\n\n calcrecovery () {\n for (let recovery = 0; recovery < 4; recovery++) {\n let Qprime\n this.sig.recovery = recovery\n try {\n Qprime = this.sig2PubKey()\n } catch (e) {\n continue\n }\n\n if (Qprime.point.eq(this.keyPair.pubKey.point)) {\n const compressed = this.keyPair.pubKey.compressed\n this.sig.compressed =\n this.keyPair.pubKey.compressed === undefined ? true : compressed\n return this\n }\n }\n\n this.sig.recovery = undefined\n throw new Error('Unable to find valid recovery factor')\n }\n\n async asyncCalcrecovery () {\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'calcrecovery',\n []\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n /**\n * Calculates the recovery factor, and mutates sig so that it now contains\n * the recovery factor and the \"compressed\" variable. Throws an exception on\n * failure.\n */\n static calcrecovery (sig, pubKey, hashBuf) {\n const ecdsa = new Ecdsa().fromObject({\n sig: sig,\n keyPair: new KeyPair().fromObject({ pubKey: pubKey }),\n hashBuf: hashBuf\n })\n return ecdsa.calcrecovery().sig\n }\n\n static async asyncCalcrecovery (sig, pubKey, hashBuf) {\n const workersResult = await Workers.asyncClassMethod(\n Ecdsa,\n 'calcrecovery',\n [sig, pubKey, hashBuf]\n )\n return new Sig().fromFastBuffer(workersResult.resbuf)\n }\n\n fromString (str) {\n const obj = JSON.parse(str)\n if (obj.hashBuf) {\n this.hashBuf = Buffer.from(obj.hashBuf, 'hex')\n }\n if (obj.keyPair) {\n this.keyPair = new KeyPair().fromString(obj.keyPair)\n }\n if (obj.sig) {\n this.sig = new Sig().fromString(obj.sig)\n }\n if (obj.k) {\n this.k = new Bn(obj.k, 10)\n }\n return this\n }\n\n randomK () {\n const N = Point.getN()\n let k\n do {\n k = new Bn().fromBuffer(Random.getRandomBuffer(32))\n } while (!(k.lt(N) && k.gt(0)))\n this.k = k\n return this\n }\n\n /**\n * The traditional Ecdsa algorithm uses a purely random value of k. This has\n * the negative that when signing, your entropy must be good, or the private\n * key can be recovered if two signatures use the same value of k. It turns out\n * that k does not have to be purely random. It can be deterministic, so long\n * as an attacker can't guess it. RFC 6979 specifies how to do this using a\n * combination of the private key and the hash of the thing to be signed. It is\n * best practice to use this value, which can be tested for byte-for-byte\n * accuracy, and is resistant to a broken RNG. Note that it is actually the\n * case that bitcoin private keys have been compromised through that attack.\n * Deterministic k is a best practice.\n *\n * https://tools.ietf.org/html/rfc6979#section-3.2\n */\n deterministicK (badrs) {\n let v = Buffer.alloc(32)\n v.fill(0x01)\n let k = Buffer.alloc(32)\n k.fill(0x00)\n const x = this.keyPair.privKey.bn.toBuffer({ size: 32 })\n k = Hash.sha256Hmac(\n Buffer.concat([v, Buffer.from([0x00]), x, this.hashBuf]),\n k\n )\n v = Hash.sha256Hmac(v, k)\n k = Hash.sha256Hmac(\n Buffer.concat([v, Buffer.from([0x01]), x, this.hashBuf]),\n k\n )\n v = Hash.sha256Hmac(v, k)\n v = Hash.sha256Hmac(v, k)\n let T = new Bn().fromBuffer(v)\n const N = Point.getN()\n\n // if r or s were invalid when this function was used in signing,\n // we do not want to actually compute r, s here for efficiency, so,\n // we can increment badrs. explained at end of RFC 6979 section 3.2\n if (badrs === undefined) {\n badrs = 0\n }\n // also explained in 3.2, we must ensure T is in the proper range (0, N)\n for (let i = 0; i < badrs || !(T.lt(N) && T.gt(0)); i++) {\n k = Hash.sha256Hmac(Buffer.concat([v, Buffer.from([0x00])]), k)\n v = Hash.sha256Hmac(v, k)\n v = Hash.sha256Hmac(v, k)\n T = new Bn().fromBuffer(v)\n }\n\n this.k = T\n return this\n }\n\n /**\n * Information about public key recovery:\n * https://bitcointalk.org/index.php?topic=6430.0\n * http://stackoverflow.com/questions/19665491/how-do-i-get-an-ecdsa-public-key-from-just-a-bitcoin-signature-sec1-4-1-6-k\n * This code was originally taken from BitcoinJS\n */\n sig2PubKey () {\n const recovery = this.sig.recovery\n if (\n !(recovery === 0 || recovery === 1 || recovery === 2 || recovery === 3)\n ) {\n throw new Error('i must be equal to 0, 1, 2, or 3')\n }\n\n const e = new Bn().fromBuffer(this.hashBuf)\n const r = this.sig.r\n const s = this.sig.s\n\n // A set LSB signifies that the y-coordinate is odd\n const isYOdd = recovery & 1\n\n // The more significant bit specifies whether we should use the\n // first or second candidate key.\n const isSecondKey = recovery >> 1\n\n const n = Point.getN()\n const G = Point.getG()\n\n // 1.1 LEt x = r + jn\n const x = isSecondKey ? r.add(n) : r\n const R = Point.fromX(isYOdd, x)\n\n // 1.4 Check that nR is at infinity\n let errm = ''\n try {\n R.mul(n)\n } catch (err) {\n errm = err.message\n }\n if (errm !== 'point mul out of range') {\n throw new Error('nR is not a valid curve point')\n }\n\n // Compute -e from e\n const eNeg = e.neg().umod(n)\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n const rInv = r.invm(n)\n\n // const Q = R.multiplyTwo(s, G, eNeg).mul(rInv)\n const Q = R.mul(s)\n .add(G.mul(eNeg))\n .mul(rInv)\n\n const pubKey = new PubKey(Q)\n pubKey.compressed = this.sig.compressed\n pubKey.validate()\n\n return pubKey\n }\n\n async asyncSig2PubKey () {\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'sig2PubKey',\n []\n )\n return PubKey.fromFastBuffer(workersResult.resbuf)\n }\n\n static sig2PubKey (sig, hashBuf) {\n const ecdsa = new Ecdsa().fromObject({\n sig: sig,\n hashBuf: hashBuf\n })\n return ecdsa.sig2PubKey()\n }\n\n static async asyncSig2PubKey (sig, hashBuf) {\n const ecdsa = new Ecdsa().fromObject({\n sig: sig,\n hashBuf: hashBuf\n })\n const pubKey = await ecdsa.asyncSig2PubKey()\n return pubKey\n }\n\n verifyStr (enforceLowS = true) {\n if (!Buffer.isBuffer(this.hashBuf) || this.hashBuf.length !== 32) {\n return 'hashBuf must be a 32 byte buffer'\n }\n\n try {\n this.keyPair.pubKey.validate()\n } catch (e) {\n return 'Invalid pubKey: ' + e\n }\n\n const r = this.sig.r\n const s = this.sig.s\n if (\n !(r.gt(0) && r.lt(Point.getN())) ||\n !(s.gt(0) && s.lt(Point.getN()))\n ) {\n return 'r and s not in range'\n }\n\n if (enforceLowS) {\n if (!this.sig.hasLowS()) {\n return 's is too high and does not satisfy low s contraint - see bip 62'\n }\n }\n\n const e = new Bn().fromBuffer(\n this.hashBuf,\n this.endian ? { endian: this.endian } : undefined\n )\n const n = Point.getN()\n const sinv = s.invm(n)\n const u1 = sinv.mul(e).mod(n)\n const u2 = sinv.mul(r).mod(n)\n\n const p = Point.getG().mulAdd(u1, this.keyPair.pubKey.point, u2)\n // const p = Point.getG().mulAdd(u1, this.keyPair.pubKey.point, u2)\n if (p.isInfinity()) {\n return 'p is infinity'\n }\n\n if (\n !(\n p\n .getX()\n .mod(n)\n .cmp(r) === 0\n )\n ) {\n return 'Invalid signature'\n } else {\n return false\n }\n }\n\n sign () {\n const hashBuf =\n this.endian === 'little'\n ? new Br(this.hashBuf).readReverse()\n : this.hashBuf\n\n const privKey = this.keyPair.privKey\n\n const d = privKey.bn\n\n if (!hashBuf || !privKey || !d) {\n throw new Error('invalid parameters')\n }\n\n if (!Buffer.isBuffer(hashBuf) || hashBuf.length !== 32) {\n throw new Error('hashBuf must be a 32 byte buffer')\n }\n\n const N = Point.getN()\n const G = Point.getG()\n const e = new Bn().fromBuffer(hashBuf)\n\n // try different values of k until r, s are valid\n let badrs = 0\n let k, Q, r, s\n do {\n if (!this.k || badrs > 0) {\n this.deterministicK(badrs)\n }\n badrs++\n k = this.k\n Q = G.mul(k)\n r = Q.getX().mod(N)\n s = k\n .invm(N)\n .mul(e.add(d.mul(r)))\n .mod(N)\n } while (r.cmp(0) <= 0 || s.cmp(0) <= 0)\n\n // enforce low s\n // see Bip 62, \"low S values in signatures\"\n if (\n s.gt(\n new Bn().fromBuffer(\n Buffer.from(\n '7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0',\n 'hex'\n )\n )\n )\n ) {\n s = Point.getN().sub(s)\n }\n this.sig = Sig.fromObject({\n r: r,\n s: s,\n compressed: this.keyPair.pubKey.compressed\n })\n return this\n }\n\n async asyncSign () {\n const workersResult = await Workers.asyncObjectMethod(this, 'sign', [])\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n signRandomK () {\n this.randomK()\n return this.sign()\n }\n\n toString () {\n const obj = {}\n if (this.hashBuf) {\n obj.hashBuf = this.hashBuf.toString('hex')\n }\n if (this.keyPair) {\n obj.keyPair = this.keyPair.toString()\n }\n if (this.sig) {\n obj.sig = this.sig.toString()\n }\n if (this.k) {\n obj.k = this.k.toString()\n }\n return JSON.stringify(obj)\n }\n\n verify (enforceLowS = true) {\n if (!this.verifyStr(enforceLowS)) {\n this.verified = true\n } else {\n this.verified = false\n }\n return this\n }\n\n async asyncVerify (enforceLowS = true) {\n const workersResult = await Workers.asyncObjectMethod(this, 'verify', [\n enforceLowS\n ])\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static sign (hashBuf, keyPair, endian) {\n return new Ecdsa()\n .fromObject({\n hashBuf: hashBuf,\n endian: endian,\n keyPair: keyPair\n })\n .sign().sig\n }\n\n static async asyncSign (hashBuf, keyPair, endian) {\n const ecdsa = new Ecdsa().fromObject({\n hashBuf: hashBuf,\n endian: endian,\n keyPair: keyPair\n })\n await ecdsa.asyncSign()\n return ecdsa.sig\n }\n\n static verify (hashBuf, sig, pubKey, endian, enforceLowS = true) {\n return new Ecdsa()\n .fromObject({\n hashBuf: hashBuf,\n endian: endian,\n sig: sig,\n keyPair: new KeyPair().fromObject({ pubKey: pubKey })\n })\n .verify(enforceLowS).verified\n }\n\n static async asyncVerify (hashBuf, sig, pubKey, endian, enforceLowS = true) {\n const ecdsa = new Ecdsa().fromObject({\n hashBuf: hashBuf,\n endian: endian,\n sig: sig,\n keyPair: new KeyPair().fromObject({ pubKey: pubKey })\n })\n await ecdsa.asyncVerify(enforceLowS)\n return ecdsa.verified\n }\n}\n\nexport { Ecdsa }\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n []\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n var m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n var m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\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// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","/**\n * Block Header\n * ============\n *\n * Every block contains a blockHeader. This is probably not something you will\n * personally use, but it's here if you need it.\n */\n'use strict'\n\nimport { Bw } from './bw'\nimport { Struct } from './struct'\n\nclass BlockHeader extends Struct {\n constructor (\n versionBytesNum,\n prevBlockHashBuf,\n merkleRootBuf,\n time,\n bits,\n nonce\n ) {\n super({\n versionBytesNum,\n prevBlockHashBuf,\n merkleRootBuf,\n time,\n bits,\n nonce\n })\n }\n\n fromJSON (json) {\n this.fromObject({\n versionBytesNum: json.versionBytesNum,\n prevBlockHashBuf: Buffer.from(json.prevBlockHashBuf, 'hex'),\n merkleRootBuf: Buffer.from(json.merkleRootBuf, 'hex'),\n time: json.time,\n bits: json.bits,\n nonce: json.nonce\n })\n return this\n }\n\n toJSON () {\n return {\n versionBytesNum: this.versionBytesNum,\n prevBlockHashBuf: this.prevBlockHashBuf.toString('hex'),\n merkleRootBuf: this.merkleRootBuf.toString('hex'),\n time: this.time,\n bits: this.bits,\n nonce: this.nonce\n }\n }\n\n fromBr (br) {\n this.versionBytesNum = br.readUInt32LE()\n this.prevBlockHashBuf = br.read(32)\n this.merkleRootBuf = br.read(32)\n this.time = br.readUInt32LE()\n this.bits = br.readUInt32LE()\n this.nonce = br.readUInt32LE()\n return this\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n bw.writeUInt32LE(this.versionBytesNum)\n bw.write(this.prevBlockHashBuf)\n bw.write(this.merkleRootBuf)\n bw.writeUInt32LE(this.time)\n bw.writeUInt32LE(this.bits)\n bw.writeUInt32LE(this.nonce)\n return bw\n }\n}\n\nexport { BlockHeader }\n","/**\n * Script Interpreter\n * ==================\n *\n * Bitcoin transactions contain scripts. Each input has a script called the\n * scriptSig, and each output has a script called the scriptPubKey. To validate\n * an input, the ScriptSig is executed, then with the same stack, the\n * scriptPubKey from the output corresponding to that input is run. The primary\n * way to use this class is via the verify function:\n *\n * new Interp().verify( ... )\n *\n * In some ways, the script interpreter is one of the most poorly architected\n * components of Yours Bitcoin because of the giant switch statement in step(). But\n * that is deliberately so to make it similar to bitcoin core, and thus easier\n * to audit.\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Bw } from './bw'\nimport { cmp } from './cmp'\nimport { Hash } from './hash'\nimport { OpCode } from './op-code'\nimport { PubKey } from './pub-key'\nimport { Script } from './script'\nimport { Sig } from './sig'\nimport { Struct } from './struct'\nimport { Tx } from './tx'\nimport { TxIn } from './tx-in'\n\n class Interp extends Struct {\n constructor (\n script,\n tx,\n nIn,\n stack = [],\n altStack = [],\n pc = 0,\n pBeginCodeHash = 0,\n nOpCount = 0,\n ifStack = [],\n errStr = '',\n flags = Interp.defaultFlags,\n valueBn = new Bn(0)\n ) {\n super({\n script,\n tx,\n nIn,\n stack,\n altStack,\n pc,\n pBeginCodeHash,\n nOpCount,\n ifStack,\n errStr,\n flags,\n valueBn\n })\n }\n\n initialize () {\n this.script = new Script()\n this.stack = []\n this.altStack = []\n this.pc = 0\n this.pBeginCodeHash = 0\n this.nOpCount = 0\n this.ifStack = []\n this.errStr = ''\n this.flags = Interp.defaultFlags\n return this\n }\n\n fromJSON (json) {\n this.fromJSONNoTx(json)\n this.tx = json.tx ? new Tx().fromJSON(json.tx) : undefined\n return this\n }\n /**\n * Convert JSON containing everything but the tx to an interp object.\n */\n fromJSONNoTx (json) {\n this.fromObject({\n script:\n json.script !== undefined\n ? new Script().fromJSON(json.script)\n : undefined,\n nIn: json.nIn\n })\n this.stack = []\n json.stack.forEach(\n function (hex) {\n this.stack.push(Buffer.from(hex, 'hex'))\n }.bind(this)\n )\n this.altStack = []\n json.altStack.forEach(\n function (hex) {\n this.altStack.push(Buffer.from(hex, 'hex'))\n }.bind(this)\n )\n this.fromObject({\n pc: json.pc,\n pBeginCodeHash: json.pBeginCodeHash,\n nOpCount: json.nOpCount,\n ifStack: json.ifStack,\n errStr: json.errStr,\n flags: json.flags\n })\n return this\n }\n\n fromBr (br) {\n let jsonNoTxBufLEn = br.readVarIntNum()\n let jsonNoTxBuf = br.read(jsonNoTxBufLEn)\n this.fromJSONNoTx(JSON.parse(jsonNoTxBuf.toString()))\n let txbuflen = br.readVarIntNum()\n if (txbuflen > 0) {\n let txbuf = br.read(txbuflen)\n this.tx = new Tx().fromFastBuffer(txbuf)\n }\n return this\n }\n\n toJSON () {\n let json = this.toJSONNoTx()\n json.tx = this.tx ? this.tx.toJSON() : undefined\n return json\n }\n\n /**\n * Convert everything but the tx to JSON.\n */\n toJSONNoTx () {\n let stack = []\n this.stack.forEach(function (buf) {\n stack.push(buf.toString('hex'))\n })\n let altStack = []\n this.altStack.forEach(function (buf) {\n altStack.push(buf.toString('hex'))\n })\n return {\n script: this.script ? this.script.toJSON() : undefined,\n nIn: this.nIn,\n stack: stack,\n altStack: altStack,\n pc: this.pc,\n pBeginCodeHash: this.pBeginCodeHash,\n nOpCount: this.nOpCount,\n ifStack: this.ifStack,\n errStr: this.errStr,\n flags: this.flags\n }\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n let jsonNoTxBuf = Buffer.from(JSON.stringify(this.toJSONNoTx()))\n bw.writeVarIntNum(jsonNoTxBuf.length)\n bw.write(jsonNoTxBuf)\n if (this.tx) {\n let txbuf = this.tx.toFastBuffer()\n bw.writeVarIntNum(txbuf.length)\n bw.write(txbuf)\n } else {\n bw.writeVarIntNum(0)\n }\n return bw\n }\n\n /**\n * In order to make auduting the script interpreter easier, we use the same\n * constants as bitcoin core, including the flags, which customize the\n * operation of the interpreter.\n */\n static getFlags (flagstr) {\n let flags = 0\n if (flagstr.indexOf('NONE') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_NONE\n }\n if (flagstr.indexOf('P2SH') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_P2SH\n }\n if (flagstr.indexOf('STRICTENC') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_STRICTENC\n }\n if (flagstr.indexOf('DERSIG') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_DERSIG\n }\n if (flagstr.indexOf('LOW_S') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_LOW_S\n }\n if (flagstr.indexOf('NULLDUMMY') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_NULLDUMMY\n }\n if (flagstr.indexOf('SIGPUSHONLY') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_SIGPUSHONLY\n }\n if (flagstr.indexOf('MINIMALDATA') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_MINIMALDATA\n }\n if (flagstr.indexOf('DISCOURAGE_UPGRADABLE_NOPS') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS\n }\n if (flagstr.indexOf('CLEANSTACK') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_CLEANSTACK\n }\n if (flagstr.indexOf('CHECKLOCKTIMEVERIFY') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY\n }\n if (flagstr.indexOf('CHECKSEQUENCEVERIFY') !== -1) {\n flags = flags | Interp.SCRIPT_VERIFY_CHECKSEQUENCEVERIFY\n }\n if (flagstr.indexOf('SIGHASH_FORKID') !== -1) {\n flags = flags | Interp.SCRIPT_ENABLE_SIGHASH_FORKID\n }\n return flags\n }\n\n static castToBool (buf) {\n for (let i = 0; i < buf.length; i++) {\n if (buf[i] !== 0) {\n // can be negative zero\n if (i === buf.length - 1 && buf[i] === 0x80) {\n return false\n }\n return true\n }\n }\n return false\n }\n\n /**\n * Translated from bitcoin core's CheckSigEncoding\n */\n checkSigEncoding (buf) {\n // Empty signature. Not strictly DER encoded, but allowed to provide a\n // compact way to provide an invalid signature for use with CHECK(MULTI)SIG\n if (buf.length === 0) {\n return true\n }\n if (\n (this.flags &\n (Interp.SCRIPT_VERIFY_DERSIG |\n Interp.SCRIPT_VERIFY_LOW_S |\n Interp.SCRIPT_VERIFY_STRICTENC)) !==\n 0 &&\n !Sig.IsTxDer(buf)\n ) {\n this.errStr = 'SCRIPT_ERR_SIG_DER'\n return false\n } else if ((this.flags & Interp.SCRIPT_VERIFY_LOW_S) !== 0) {\n let sig = new Sig().fromTxFormat(buf)\n if (!sig.hasLowS()) {\n this.errStr = 'SCRIPT_ERR_SIG_DER'\n return false\n }\n } else if ((this.flags & Interp.SCRIPT_VERIFY_STRICTENC) !== 0) {\n let sig = new Sig().fromTxFormat(buf)\n if (!sig.hasDefinedHashType()) {\n this.errStr = 'SCRIPT_ERR_SIG_HASHTYPE'\n return false\n }\n }\n return true\n }\n\n /**\n * Translated from bitcoin core's CheckPubKeyEncoding\n */\n checkPubKeyEncoding (buf) {\n if (\n (this.flags & Interp.SCRIPT_VERIFY_STRICTENC) !== 0 &&\n !PubKey.isCompressedOrUncompressed(buf)\n ) {\n this.errStr = 'SCRIPT_ERR_PUBKEYTYPE'\n return false\n }\n return true\n }\n\n /**\n * Translated from bitcoin core's CheckLockTime\n */\n checkLockTime (nLockTime) {\n // There are two kinds of nLockTime: lock-by-blockheight\n // and lock-by-blocktime, distinguished by whether\n // nLockTime < LOCKTIME_THRESHOLD.\n //\n // We want to compare apples to apples, so fail the script\n // unless the type of nLockTime being tested is the same as\n // the nLockTime in the transaction.\n if (\n !(\n (this.tx.nLockTime < Interp.LOCKTIME_THRESHOLD &&\n nLockTime < Interp.LOCKTIME_THRESHOLD) ||\n (this.tx.nLockTime >= Interp.LOCKTIME_THRESHOLD &&\n nLockTime >= Interp.LOCKTIME_THRESHOLD)\n )\n ) {\n return false\n }\n\n // Now that we know we're comparing apples-to-apples, the\n // comparison is a simple numeric one.\n if (nLockTime > this.tx.nLockTime) {\n return false\n }\n\n // Finally the nLockTime feature can be disabled and thus\n // CHECKLOCKTIMEVERIFY bypassed if every txIn has been\n // finalized by setting nSequence to maxint. The\n // transaction would be allowed into the blockchain, making\n // the opCode ineffective.\n //\n // Testing if this vin is not final is sufficient to\n // prevent this condition. Alternatively we could test all\n // inputs, but testing just this input minimizes the data\n // required to prove correct CHECKLOCKTIMEVERIFY execution.\n if (TxIn.SEQUENCE_FINAL === this.tx.txIns[this.nIn].nSequence) {\n return false\n }\n\n return true\n }\n\n /**\n * Translated from bitcoin core's CheckSequence.\n */\n checkSequence (nSequence) {\n // Relative lock times are supported by comparing the passed\n // in operand to the sequence number of the input.\n let txToSequence = this.tx.txIns[this.nIn].nSequence\n\n // Fail if the transaction's version number is not set high\n // enough to trigger Bip 68 rules.\n if (this.tx.versionBytesNum < 2) {\n return false\n }\n\n // Sequence numbers with their most significant bit set are not\n // consensus constrained. Testing that the transaction's sequence\n // number do not have this bit set prevents using this property\n // to get around a CHECKSEQUENCEVERIFY check.\n if (txToSequence & TxIn.SEQUENCE_LOCKTIME_DISABLE_FLAG) {\n return false\n }\n\n // Mask off any bits that do not have consensus-enforced meaning\n // before doing the integer comparisons\n let nLockTimeMask =\n TxIn.SEQUENCE_LOCKTIME_TYPE_FLAG | TxIn.SEQUENCE_LOCKTIME_MASK\n let txToSequenceMasked = txToSequence & nLockTimeMask\n let nSequenceMasked = nSequence & nLockTimeMask\n\n // There are two kinds of nSequence: lock-by-blockheight\n // and lock-by-blocktime, distinguished by whether\n // nSequenceMasked < CTxIn::SEQUENCE_LOCKTIME_TYPE_FLAG.\n //\n // We want to compare apples to apples, so fail the script\n // unless the type of nSequenceMasked being tested is the same as\n // the nSequenceMasked in the transaction.\n if (\n !(\n (txToSequenceMasked < TxIn.SEQUENCE_LOCKTIME_TYPE_FLAG &&\n nSequenceMasked < TxIn.SEQUENCE_LOCKTIME_TYPE_FLAG) ||\n (txToSequenceMasked >= TxIn.SEQUENCE_LOCKTIME_TYPE_FLAG &&\n nSequenceMasked >= TxIn.SEQUENCE_LOCKTIME_TYPE_FLAG)\n )\n ) {\n return false\n }\n\n // Now that we know we're comparing apples-to-apples, the\n // comparison is a simple numeric one.\n if (nSequenceMasked > txToSequenceMasked) {\n return false\n }\n\n return true\n }\n\n /**\n * Based on bitcoin core's EvalScript function, with the inner loop moved to\n * Interp.prototype.step()\n * bitcoin core commit: b5d1b1092998bc95313856d535c632ea5a8f9104\n */\n * eval () {\n if (this.script.toBuffer().length > 10000) {\n this.errStr = 'SCRIPT_ERR_SCRIPT_SIZE'\n yield false\n }\n\n try {\n while (this.pc < this.script.chunks.length) {\n let fSuccess = this.step()\n if (!fSuccess) {\n yield false\n } else {\n yield fSuccess\n }\n }\n\n // Size limits\n if (this.stack.length + this.altStack.length > 1000) {\n this.errStr = 'SCRIPT_ERR_STACK_SIZE'\n yield false\n }\n } catch (e) {\n this.errStr = 'SCRIPT_ERR_UNKNOWN_ERROR: ' + e\n yield false\n }\n\n if (this.ifStack.length > 0) {\n this.errStr = 'SCRIPT_ERR_UNBALANCED_CONDITIONAL'\n yield false\n }\n\n yield true\n }\n\n /**\n * Based on the inner loop of bitcoin core's EvalScript function\n */\n step () {\n let fRequireMinimal =\n (this.flags & Interp.SCRIPT_VERIFY_MINIMALDATA) !== 0\n\n // bool fExec = !count(ifStack.begin(), ifStack.end(), false)\n let fExec = !(this.ifStack.indexOf(false) + 1)\n\n //\n // Read instruction\n //\n let chunk = this.script.chunks[this.pc]\n this.pc++\n let opCodeNum = chunk.opCodeNum\n if (opCodeNum === undefined) {\n this.errStr = 'SCRIPT_ERR_BAD_OPCODE'\n return false\n }\n if (chunk.buf && chunk.buf.length > Interp.MAX_SCRIPT_ELEMENT_SIZE) {\n this.errStr = 'SCRIPT_ERR_PUSH_SIZE'\n return false\n }\n\n // Note how OpCode.OP_RESERVED does not count towards the opCode limit.\n if (opCodeNum > OpCode.OP_16 && ++this.nOpCount > 201) {\n this.errStr = 'SCRIPT_ERR_OP_COUNT'\n return false\n }\n\n if (\n opCodeNum === OpCode.OP_LEFT ||\n opCodeNum === OpCode.OP_RIGHT ||\n opCodeNum === OpCode.OP_2MUL ||\n opCodeNum === OpCode.OP_2DIV\n ) {\n this.errStr = 'SCRIPT_ERR_DISABLED_OPCODE'\n return false\n }\n\n if (fExec && opCodeNum >= 0 && opCodeNum <= OpCode.OP_PUSHDATA4) {\n if (fRequireMinimal && !this.script.checkMinimalPush(this.pc - 1)) {\n this.errStr = 'SCRIPT_ERR_MINIMALDATA'\n return false\n }\n if (!chunk.buf) {\n this.stack.push(Interp.false)\n } else if (chunk.len !== chunk.buf.length) {\n throw new Error('LEngth of push value not equal to length of data')\n } else {\n this.stack.push(chunk.buf)\n }\n } else if (\n fExec ||\n (OpCode.OP_IF <= opCodeNum && opCodeNum <= OpCode.OP_ENDIF)\n ) {\n switch (opCodeNum) {\n //\n // Push value\n //\n case OpCode.OP_1NEGATE:\n case OpCode.OP_1:\n case OpCode.OP_2:\n case OpCode.OP_3:\n case OpCode.OP_4:\n case OpCode.OP_5:\n case OpCode.OP_6:\n case OpCode.OP_7:\n case OpCode.OP_8:\n case OpCode.OP_9:\n case OpCode.OP_10:\n case OpCode.OP_11:\n case OpCode.OP_12:\n case OpCode.OP_13:\n case OpCode.OP_14:\n case OpCode.OP_15:\n case OpCode.OP_16:\n {\n // ( -- value)\n // ScriptNum bn((int)opCode - (int)(OpCode.OP_1 - 1))\n let n = opCodeNum - (OpCode.OP_1 - 1)\n let buf = new Bn(n).toScriptNumBuffer()\n this.stack.push(buf)\n // The result of these opCodes should always be the minimal way to push the data\n // they push, so no need for a CheckMinimalPush here.\n }\n break\n\n //\n // Control\n //\n case OpCode.OP_NOP:\n break\n\n case OpCode.OP_CHECKLOCKTIMEVERIFY:\n {\n if (!(this.flags & Interp.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY)) {\n // not enabled; treat as a NOP2\n if (\n this.flags & Interp.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS\n ) {\n this.errStr = 'SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS'\n return false\n }\n break\n }\n\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n // Note that elsewhere numeric opCodes are limited to\n // operands in the range -2**31+1 to 2**31-1, however it is\n // legal for opCodes to produce results exceeding that\n // range. This limitation is implemented by CScriptNum's\n // default 4-byte limit.\n //\n // If we kept to that limit we'd have a year 2038 problem,\n // even though the nLockTime field in transactions\n // themselves is uint32 which only becomes meaningless\n // after the year 2106.\n //\n // Thus as a special case we tell CScriptNum to accept up\n // to 5-byte bignums, which are good until 2**39-1, well\n // beyond the 2**32-1 limit of the nLockTime field itself.\n let nLockTimebuf = this.stack[this.stack.length - 1]\n let nLockTimebn = new Bn().fromScriptNumBuffer(\n nLockTimebuf,\n fRequireMinimal,\n 5\n )\n let nLockTime = nLockTimebn.toNumber()\n\n // In the rare event that the argument may be < 0 due to\n // some arithmetic being done first, you can always use\n // 0 MAX CHECKLOCKTIMEVERIFY.\n if (nLockTime < 0) {\n this.errStr = 'SCRIPT_ERR_NEGATIVE_LOCKTIME'\n return false\n }\n\n // Actually compare the specified lock time with the transaction.\n if (!this.checkLockTime(nLockTime)) {\n this.errStr = 'SCRIPT_ERR_UNSATISFIED_LOCKTIME'\n return false\n }\n }\n break\n\n case OpCode.OP_CHECKSEQUENCEVERIFY:\n {\n if (!(this.flags & Interp.SCRIPT_VERIFY_CHECKSEQUENCEVERIFY)) {\n // not enabled; treat as a NOP3\n if (\n this.flags & Interp.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS\n ) {\n this.errStr = 'SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS'\n return false\n }\n break\n }\n\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n // nSequence, like nLockTime, is a 32-bit unsigned integer\n // field. See the comment in CHECKLOCKTIMEVERIFY regarding\n // 5-byte numeric operands.\n let nSequencebuf = this.stack[this.stack.length - 1]\n let nSequencebn = new Bn().fromScriptNumBuffer(\n nSequencebuf,\n fRequireMinimal,\n 5\n )\n let nSequence = nSequencebn.toNumber()\n\n // In the rare event that the argument may be < 0 due to\n // some arithmetic being done first, you can always use\n // 0 MAX CHECKSEQUENCEVERIFY.\n if (nSequence < 0) {\n this.errStr = 'SCRIPT_ERR_NEGATIVE_LOCKTIME'\n return false\n }\n\n // To provide for future soft-fork extensibility, if the\n // operand has the disabled lock-time flag set,\n // CHECKSEQUENCEVERIFY behaves as a NOP.\n if ((nSequence & TxIn.SEQUENCE_LOCKTIME_DISABLE_FLAG) !== 0) {\n break\n }\n\n // Compare the specified sequence number with the input.\n if (!this.checkSequence(nSequence)) {\n this.errStr = 'SCRIPT_ERR_UNSATISFIED_LOCKTIME'\n return false\n }\n }\n break\n\n case OpCode.OP_NOP1:\n case OpCode.OP_NOP3:\n case OpCode.OP_NOP4:\n case OpCode.OP_NOP5:\n case OpCode.OP_NOP6:\n case OpCode.OP_NOP7:\n case OpCode.OP_NOP8:\n case OpCode.OP_NOP9:\n case OpCode.OP_NOP10:\n if (this.flags & Interp.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) {\n this.errStr = 'SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS'\n return false\n }\n break\n\n case OpCode.OP_IF:\n case OpCode.OP_NOTIF:\n {\n // <expression> if [statements] [else [statements]] endif\n // bool fValue = false\n let fValue = false\n if (fExec) {\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_UNBALANCED_CONDITIONAL'\n return false\n }\n let buf = this.stack.pop()\n fValue = Interp.castToBool(buf)\n if (opCodeNum === OpCode.OP_NOTIF) {\n fValue = !fValue\n }\n }\n this.ifStack.push(fValue)\n }\n break\n\n case OpCode.OP_ELSE:\n if (this.ifStack.length === 0) {\n this.errStr = 'SCRIPT_ERR_UNBALANCED_CONDITIONAL'\n return false\n }\n this.ifStack[this.ifStack.length - 1] = !this.ifStack[\n this.ifStack.length - 1\n ]\n break\n\n case OpCode.OP_ENDIF:\n if (this.ifStack.length === 0) {\n this.errStr = 'SCRIPT_ERR_UNBALANCED_CONDITIONAL'\n return false\n }\n this.ifStack.pop()\n break\n\n case OpCode.OP_VERIFY:\n {\n // (true -- ) or\n // (false -- false) and return\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf = this.stack[this.stack.length - 1]\n let fValue = Interp.castToBool(buf)\n if (fValue) {\n this.stack.pop()\n } else {\n this.errStr = 'SCRIPT_ERR_VERIFY'\n return false\n }\n }\n break\n\n case OpCode.OP_RETURN: {\n this.errStr = 'SCRIPT_ERR_OP_RETURN'\n return false\n }\n // unreachable code: break\n\n //\n // Stack ops\n //\n case OpCode.OP_TOALTSTACK:\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n this.altStack.push(this.stack.pop())\n break\n\n case OpCode.OP_FROMALTSTACK:\n if (this.altStack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_ALTSTACK_OPERATION'\n return false\n }\n this.stack.push(this.altStack.pop())\n break\n\n case OpCode.OP_2DROP:\n // (x1 x2 -- )\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n this.stack.pop()\n this.stack.pop()\n break\n\n case OpCode.OP_2DUP:\n {\n // (x1 x2 -- x1 x2 x1 x2)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf1 = this.stack[this.stack.length - 2]\n let buf2 = this.stack[this.stack.length - 1]\n this.stack.push(buf1)\n this.stack.push(buf2)\n }\n break\n\n case OpCode.OP_3DUP:\n {\n // (x1 x2 x3 -- x1 x2 x3 x1 x2 x3)\n if (this.stack.length < 3) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf1 = this.stack[this.stack.length - 3]\n let buf2 = this.stack[this.stack.length - 2]\n let buf3 = this.stack[this.stack.length - 1]\n this.stack.push(buf1)\n this.stack.push(buf2)\n this.stack.push(buf3)\n }\n break\n\n case OpCode.OP_2OVER:\n {\n // (x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2)\n if (this.stack.length < 4) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf1 = this.stack[this.stack.length - 4]\n let buf2 = this.stack[this.stack.length - 3]\n this.stack.push(buf1)\n this.stack.push(buf2)\n }\n break\n\n case OpCode.OP_2ROT:\n {\n // (x1 x2 x3 x4 x5 x6 -- x3 x4 x5 x6 x1 x2)\n if (this.stack.length < 6) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let spliced = this.stack.splice(this.stack.length - 6, 2)\n this.stack.push(spliced[0])\n this.stack.push(spliced[1])\n }\n break\n\n case OpCode.OP_2SWAP:\n {\n // (x1 x2 x3 x4 -- x3 x4 x1 x2)\n if (this.stack.length < 4) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let spliced = this.stack.splice(this.stack.length - 4, 2)\n this.stack.push(spliced[0])\n this.stack.push(spliced[1])\n }\n break\n\n case OpCode.OP_IFDUP:\n {\n // (x - 0 | x x)\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf = this.stack[this.stack.length - 1]\n let fValue = Interp.castToBool(buf)\n if (fValue) {\n this.stack.push(buf)\n }\n }\n break\n\n case OpCode.OP_DEPTH:\n {\n // -- stacksize\n let buf = new Bn(this.stack.length).toScriptNumBuffer()\n this.stack.push(buf)\n }\n break\n\n case OpCode.OP_DROP:\n // (x -- )\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n this.stack.pop()\n break\n\n case OpCode.OP_DUP:\n // (x -- x x)\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n this.stack.push(this.stack[this.stack.length - 1])\n break\n\n case OpCode.OP_NIP:\n // (x1 x2 -- x2)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n this.stack.splice(this.stack.length - 2, 1)\n break\n\n case OpCode.OP_OVER:\n // (x1 x2 -- x1 x2 x1)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n this.stack.push(this.stack[this.stack.length - 2])\n break\n\n case OpCode.OP_PICK:\n case OpCode.OP_ROLL:\n {\n // (xn ... x2 x1 x0 n - xn ... x2 x1 x0 xn)\n // (xn ... x2 x1 x0 n - ... x2 x1 x0 xn)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf = this.stack[this.stack.length - 1]\n let bn = new Bn().fromScriptNumBuffer(buf, fRequireMinimal)\n let n = bn.toNumber()\n this.stack.pop()\n if (n < 0 || n >= this.stack.length) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n buf = this.stack[this.stack.length - n - 1]\n if (opCodeNum === OpCode.OP_ROLL) {\n this.stack.splice(this.stack.length - n - 1, 1)\n }\n this.stack.push(buf)\n }\n break\n\n case OpCode.OP_ROT:\n {\n // (x1 x2 x3 -- x2 x3 x1)\n // x2 x1 x3 after first swap\n // x2 x3 x1 after second swap\n if (this.stack.length < 3) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let x1 = this.stack[this.stack.length - 3]\n let x2 = this.stack[this.stack.length - 2]\n let x3 = this.stack[this.stack.length - 1]\n this.stack[this.stack.length - 3] = x2\n this.stack[this.stack.length - 2] = x3\n this.stack[this.stack.length - 1] = x1\n }\n break\n\n case OpCode.OP_SWAP:\n {\n // (x1 x2 -- x2 x1)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let x1 = this.stack[this.stack.length - 2]\n let x2 = this.stack[this.stack.length - 1]\n this.stack[this.stack.length - 2] = x2\n this.stack[this.stack.length - 1] = x1\n }\n break\n\n case OpCode.OP_TUCK:\n // (x1 x2 -- x2 x1 x2)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n this.stack.splice(\n this.stack.length - 2,\n 0,\n this.stack[this.stack.length - 1]\n )\n break\n\n case OpCode.OP_SIZE:\n {\n // (in -- in size)\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let bn = new Bn(this.stack[this.stack.length - 1].length)\n this.stack.push(bn.toScriptNumBuffer())\n }\n break\n\n //\n // Bitwise logic\n //\n case OpCode.OP_OR:\n case OpCode.OP_AND:\n case OpCode.OP_XOR:\n // (x1 x2 -- out)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf1 = this.stack[this.stack.length - 2]\n let buf2 = this.stack[this.stack.length - 1]\n\n if (buf1.length != buf2.length) {\n this.errStr = 'SCRIPT_ERR_INVALID_OPERAND_SIZE'\n return false\n }\n\n switch (opCodeNum) {\n case OpCode.OP_AND:\n for(let i = 0; i < buf1.length; i++) {\n buf1[i] &= buf2[i]\n }\n break\n case OpCode.OP_OR:\n for(let i = 0; i < buf1.length; i++) {\n buf1[i] |= buf2[i]\n }\n break\n case OpCode.OP_XOR:\n for(let i = 0; i < buf1.length; i++) {\n buf1[i] ^= buf2[i]\n }\n break\n }\n\n // pop out buf2\n this.stack.pop();\n break\n case OpCode.OP_INVERT:\n // (x -- out)\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf = this.stack[this.stack.length - 1]\n for(let i = 0; i < buf.length; i++) {\n buf[i] = ~buf[i]\n }\n break\n case OpCode.OP_LSHIFT:\n case OpCode.OP_RSHIFT:\n // (x n -- out)\n {\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n let buf1 = this.stack[this.stack.length - 2]\n let value = new Bn(buf1)\n let n = new Bn().fromScriptNumBuffer(\n this.stack[this.stack.length - 1],\n fRequireMinimal\n ).toNumber()\n if(n < 0) {\n this.errStr = 'SCRIPT_ERR_INVALID_NUMBER_RANGE'\n return false\n }\n\n this.stack.pop()\n this.stack.pop()\n \n switch(opCodeNum) {\n case OpCode.OP_LSHIFT:\n value = value.ushln(n)\n break\n case OpCode.OP_RSHIFT:\n value = value.ushrn(n)\n break\n }\n\n let buf2 = value.toBuffer().slice(-buf1.length)\n if(buf2.length < buf1.length) {\n buf2 = Buffer.concat([Buffer.alloc(buf1.length - buf2.length), buf2])\n }\n\n this.stack.push(buf2)\n break\n }\n case OpCode.OP_EQUAL:\n case OpCode.OP_EQUALVERIFY:\n // case OpCode.OP_NOTEQUAL: // use OpCode.OP_NUMNOTEQUAL\n {\n // (x1 x2 - bool)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf1 = this.stack[this.stack.length - 2]\n let buf2 = this.stack[this.stack.length - 1]\n let fEqual = cmp(buf1, buf2)\n // OpCode.OP_NOTEQUAL is disabled because it would be too easy to say\n // something like n != 1 and have some wiseguy pass in 1 with extra\n // zero bytes after it (numerically, 0x01 == 0x0001 == 0x000001)\n // if (opCode == OpCode.OP_NOTEQUAL)\n // fEqual = !fEqual\n this.stack.pop()\n this.stack.pop()\n this.stack.push(fEqual ? Interp.true : Interp.false)\n if (opCodeNum === OpCode.OP_EQUALVERIFY) {\n if (fEqual) {\n this.stack.pop()\n } else {\n this.errStr = 'SCRIPT_ERR_EQUALVERIFY'\n return false\n }\n }\n }\n break\n\n //\n // Numeric\n //\n case OpCode.OP_1ADD:\n case OpCode.OP_1SUB:\n case OpCode.OP_NEGATE:\n case OpCode.OP_ABS:\n case OpCode.OP_NOT:\n case OpCode.OP_0NOTEQUAL:\n {\n // (in -- out)\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf = this.stack[this.stack.length - 1]\n let bn = new Bn().fromScriptNumBuffer(buf, fRequireMinimal)\n switch (opCodeNum) {\n case OpCode.OP_1ADD:\n bn = bn.add(1)\n break\n case OpCode.OP_1SUB:\n bn = bn.sub(1)\n break\n case OpCode.OP_NEGATE:\n bn = bn.neg()\n break\n case OpCode.OP_ABS:\n if (bn.lt(0)) bn = bn.neg()\n break\n case OpCode.OP_NOT:\n bn = new Bn(bn.eq(0) + 0)\n break\n case OpCode.OP_0NOTEQUAL:\n bn = new Bn(bn.neq(0) + 0)\n break\n // default: assert(!\"invalid opCode\"); break; // TODO: does this ever occur?\n }\n this.stack.pop()\n this.stack.push(bn.toScriptNumBuffer())\n }\n break\n\n case OpCode.OP_ADD:\n case OpCode.OP_SUB:\n case OpCode.OP_MUL:\n case OpCode.OP_DIV:\n case OpCode.OP_MOD:\n case OpCode.OP_BOOLAND:\n case OpCode.OP_BOOLOR:\n case OpCode.OP_NUMEQUAL:\n case OpCode.OP_NUMEQUALVERIFY:\n case OpCode.OP_NUMNOTEQUAL:\n case OpCode.OP_LESSTHAN:\n case OpCode.OP_GREATERTHAN:\n case OpCode.OP_LESSTHANOREQUAL:\n case OpCode.OP_GREATERTHANOREQUAL:\n case OpCode.OP_MIN:\n case OpCode.OP_MAX:\n {\n // (x1 x2 -- out)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let bn1 = new Bn().fromScriptNumBuffer(\n this.stack[this.stack.length - 2],\n fRequireMinimal\n )\n let bn2 = new Bn().fromScriptNumBuffer(\n this.stack[this.stack.length - 1],\n fRequireMinimal\n )\n let bn = new Bn(0)\n\n switch (opCodeNum) {\n case OpCode.OP_ADD:\n bn = bn1.add(bn2)\n break\n\n case OpCode.OP_SUB:\n bn = bn1.sub(bn2)\n break\n\n case OpCode.OP_MUL:\n bn = bn1.mul(bn2)\n break\n\n case OpCode.OP_DIV:\n if (bn2 == 0) {\n this.errStr = \"SCRIPT_ERR_DIV_BY_ZERO\"\n return false\n }\n bn = bn1.div(bn2)\n break\n\n case OpCode.OP_MOD:\n if (bn2 == 0) {\n this.errStr = \"SCRIPT_ERR_DIV_BY_ZERO\"\n return false\n }\n bn = bn1.mod(bn2)\n break\n\n // case OpCode.OP_BOOLAND: bn = (bn1 != bnZero && bn2 != bnZero); break\n case OpCode.OP_BOOLAND:\n bn = new Bn((bn1.neq(0) && bn2.neq(0)) + 0)\n break\n // case OpCode.OP_BOOLOR: bn = (bn1 != bnZero || bn2 != bnZero); break\n case OpCode.OP_BOOLOR:\n bn = new Bn((bn1.neq(0) || bn2.neq(0)) + 0)\n break\n // case OpCode.OP_NUMEQUAL: bn = (bn1 == bn2); break\n case OpCode.OP_NUMEQUAL:\n bn = new Bn(bn1.eq(bn2) + 0)\n break\n // case OpCode.OP_NUMEQUALVERIFY: bn = (bn1 == bn2); break\n case OpCode.OP_NUMEQUALVERIFY:\n bn = new Bn(bn1.eq(bn2) + 0)\n break\n // case OpCode.OP_NUMNOTEQUAL: bn = (bn1 != bn2); break\n case OpCode.OP_NUMNOTEQUAL:\n bn = new Bn(bn1.neq(bn2) + 0)\n break\n // case OpCode.OP_LESSTHAN: bn = (bn1 < bn2); break\n case OpCode.OP_LESSTHAN:\n bn = new Bn(bn1.lt(bn2) + 0)\n break\n // case OpCode.OP_GREATERTHAN: bn = (bn1 > bn2); break\n case OpCode.OP_GREATERTHAN:\n bn = new Bn(bn1.gt(bn2) + 0)\n break\n // case OpCode.OP_LESSTHANOREQUAL: bn = (bn1 <= bn2); break\n case OpCode.OP_LESSTHANOREQUAL:\n bn = new Bn(bn1.leq(bn2) + 0)\n break\n // case OpCode.OP_GREATERTHANOREQUAL: bn = (bn1 >= bn2); break\n case OpCode.OP_GREATERTHANOREQUAL:\n bn = new Bn(bn1.geq(bn2) + 0)\n break\n case OpCode.OP_MIN:\n bn = bn1.lt(bn2) ? bn1 : bn2\n break\n case OpCode.OP_MAX:\n bn = bn1.gt(bn2) ? bn1 : bn2\n break\n // default: assert(!\"invalid opCode\"); break; //TODO: does this ever occur?\n }\n this.stack.pop()\n this.stack.pop()\n this.stack.push(bn.toScriptNumBuffer())\n\n if (opCodeNum === OpCode.OP_NUMEQUALVERIFY) {\n // if (CastToBool(stacktop(-1)))\n if (Interp.castToBool(this.stack[this.stack.length - 1])) {\n this.stack.pop()\n } else {\n this.errStr = 'SCRIPT_ERR_NUMEQUALVERIFY'\n return false\n }\n }\n }\n break\n\n case OpCode.OP_WITHIN:\n {\n // (x min max -- out)\n if (this.stack.length < 3) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let bn1 = new Bn().fromScriptNumBuffer(\n this.stack[this.stack.length - 3],\n fRequireMinimal\n )\n let bn2 = new Bn().fromScriptNumBuffer(\n this.stack[this.stack.length - 2],\n fRequireMinimal\n )\n let bn3 = new Bn().fromScriptNumBuffer(\n this.stack[this.stack.length - 1],\n fRequireMinimal\n )\n // bool fValue = (bn2 <= bn1 && bn1 < bn3)\n let fValue = bn2.leq(bn1) && bn1.lt(bn3)\n this.stack.pop()\n this.stack.pop()\n this.stack.pop()\n this.stack.push(fValue ? Interp.true : Interp.false)\n }\n break\n\n //\n // Crypto\n //\n case OpCode.OP_RIPEMD160:\n case OpCode.OP_SHA1:\n case OpCode.OP_SHA256:\n case OpCode.OP_HASH160:\n case OpCode.OP_HASH256:\n {\n // (in -- hash)\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n let buf = this.stack[this.stack.length - 1]\n // valtype vchnew Hash((opCode == OpCode.OP_RIPEMD160 || opCode == OpCode.OP_SHA1 || opCode == OpCode.OP_HASH160) ? 20 : 32)\n let bufHash\n if (opCodeNum === OpCode.OP_RIPEMD160) {\n bufHash = Hash.ripemd160(buf)\n } else if (opCodeNum === OpCode.OP_SHA1) {\n bufHash = Hash.sha1(buf)\n } else if (opCodeNum === OpCode.OP_SHA256) {\n bufHash = Hash.sha256(buf)\n } else if (opCodeNum === OpCode.OP_HASH160) {\n bufHash = Hash.sha256Ripemd160(buf)\n } else if (opCodeNum === OpCode.OP_HASH256) {\n bufHash = Hash.sha256Sha256(buf)\n }\n this.stack.pop()\n this.stack.push(bufHash)\n }\n break\n\n case OpCode.OP_CODESEPARATOR:\n // Hash starts after the code separator\n this.pBeginCodeHash = this.pc\n break\n\n case OpCode.OP_CHECKSIG:\n case OpCode.OP_CHECKSIGVERIFY:\n {\n // (sig pubKey -- bool)\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n let bufSig = this.stack[this.stack.length - 2]\n let bufPubKey = this.stack[this.stack.length - 1]\n\n // Subset of script starting at the most recent codeseparator\n // CScript scriptCode(pBeginCodeHash, pend)\n let subScript = new Script().fromObject({\n chunks: this.script.chunks.slice(this.pBeginCodeHash)\n })\n\n // https://github.com/Bitcoin-UAHF/spec/blob/master/replay-protected-sighash.md\n let nHashType =\n bufSig.length > 0 ? bufSig.readUInt8(bufSig.length - 1) : 0\n if (nHashType & Sig.SIGHASH_FORKID) {\n if (!(this.flags & Interp.SCRIPT_ENABLE_SIGHASH_FORKID)) {\n this.errStr = 'SCRIPT_ERR_ILLEGAL_FORKID'\n return false\n }\n } else {\n subScript.findAndDelete(new Script().writeBuffer(bufSig))\n }\n\n if (\n !this.checkSigEncoding(bufSig) ||\n !this.checkPubKeyEncoding(bufPubKey)\n ) {\n // serror is set\n return false\n }\n\n let fSuccess\n try {\n let sig = new Sig().fromTxFormat(bufSig)\n let pubKey = new PubKey().fromBuffer(bufPubKey, false)\n fSuccess = this.tx.verify(\n sig,\n pubKey,\n this.nIn,\n subScript,\n Boolean(this.flags & Interp.SCRIPT_VERIFY_LOW_S),\n this.valueBn,\n this.flags\n )\n } catch (e) {\n // invalid sig or pubKey\n fSuccess = false\n }\n\n this.stack.pop()\n this.stack.pop()\n // stack.push_back(fSuccess ? vchTrue : vchFalse)\n this.stack.push(fSuccess ? Interp.true : Interp.false)\n if (opCodeNum === OpCode.OP_CHECKSIGVERIFY) {\n if (fSuccess) {\n this.stack.pop()\n } else {\n this.errStr = 'SCRIPT_ERR_CHECKSIGVERIFY'\n return false\n }\n }\n }\n break\n\n case OpCode.OP_CHECKMULTISIG:\n case OpCode.OP_CHECKMULTISIGVERIFY:\n {\n // ([sig ...] num_of_signatures [pubKey ...] num_of_pubKeys -- bool)\n\n let i = 1\n if (this.stack.length < i) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n let nKeysCount = new Bn()\n .fromScriptNumBuffer(\n this.stack[this.stack.length - i],\n fRequireMinimal\n )\n .toNumber()\n if (nKeysCount < 0 || nKeysCount > 20) {\n this.errStr = 'SCRIPT_ERR_PUBKEY_COUNT'\n return false\n }\n this.nOpCount += nKeysCount\n if (this.nOpCount > 201) {\n this.errStr = 'SCRIPT_ERR_OP_COUNT'\n return false\n }\n // int ikey = ++i\n let ikey = ++i\n i += nKeysCount\n if (this.stack.length < i) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n let nSigsCount = new Bn()\n .fromScriptNumBuffer(\n this.stack[this.stack.length - i],\n fRequireMinimal\n )\n .toNumber()\n if (nSigsCount < 0 || nSigsCount > nKeysCount) {\n this.errStr = 'SCRIPT_ERR_SIG_COUNT'\n return false\n }\n // int isig = ++i\n let isig = ++i\n i += nSigsCount\n if (this.stack.length < i) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n // Subset of script starting at the most recent codeseparator\n let subScript = new Script().fromObject({\n chunks: this.script.chunks.slice(this.pBeginCodeHash)\n })\n\n for (let k = 0; k < nSigsCount; k++) {\n let bufSig = this.stack[this.stack.length - isig - k]\n\n // https://github.com/Bitcoin-UAHF/spec/blob/master/replay-protected-sighash.md\n let nHashType =\n bufSig.length > 0 ? bufSig.readUInt8(bufSig.length - 1) : 0\n if (nHashType & Sig.SIGHASH_FORKID) {\n if (!(this.flags & Interp.SCRIPT_ENABLE_SIGHASH_FORKID)) {\n this.errStr = 'SCRIPT_ERR_ILLEGAL_FORKID'\n return false\n }\n } else {\n // Drop the signature, since there's no way for a signature to sign itself\n subScript.findAndDelete(new Script().writeBuffer(bufSig))\n }\n }\n\n let fSuccess = true\n while (fSuccess && nSigsCount > 0) {\n // valtype& vchSig = stacktop(-isig)\n let bufSig = this.stack[this.stack.length - isig]\n // valtype& vchPubKey = stacktop(-ikey)\n let bufPubKey = this.stack[this.stack.length - ikey]\n\n if (\n !this.checkSigEncoding(bufSig) ||\n !this.checkPubKeyEncoding(bufPubKey)\n ) {\n // serror is set\n return false\n }\n\n let fOk\n try {\n let sig = new Sig().fromTxFormat(bufSig)\n let pubKey = new PubKey().fromBuffer(bufPubKey, false)\n fOk = this.tx.verify(\n sig,\n pubKey,\n this.nIn,\n subScript,\n Boolean(this.flags & Interp.SCRIPT_VERIFY_LOW_S),\n this.valueBn,\n this.flags\n )\n } catch (e) {\n // invalid sig or pubKey\n fOk = false\n }\n\n if (fOk) {\n isig++\n nSigsCount--\n }\n ikey++\n nKeysCount--\n\n // If there are more signatures left than keys left,\n // then too many signatures have failed\n if (nSigsCount > nKeysCount) {\n fSuccess = false\n }\n }\n\n // Clean up stack of actual arguments\n while (i-- > 1) {\n this.stack.pop()\n }\n\n // A bug causes CHECKMULTISIG to consume one extra argument\n // whose contents were not checked in any way.\n //\n // Unfortunately this is a potential source of mutability,\n // so optionally verify it is exactly equal to zero prior\n // to removing it from the stack.\n if (this.stack.length < 1) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n if (\n this.flags & Interp.SCRIPT_VERIFY_NULLDUMMY &&\n this.stack[this.stack.length - 1].length\n ) {\n this.errStr = 'SCRIPT_ERR_SIG_NULLDUMMY'\n return false\n }\n this.stack.pop()\n\n // stack.push_back(fSuccess ? vchTrue : vchFalse)\n this.stack.push(fSuccess ? Interp.true : Interp.false)\n\n if (opCodeNum === OpCode.OP_CHECKMULTISIGVERIFY) {\n if (fSuccess) {\n this.stack.pop()\n } else {\n this.errStr = 'SCRIPT_ERR_CHECKMULTISIGVERIFY'\n return false\n }\n }\n }\n break\n\n //\n // Byte string operations\n //\n case OpCode.OP_CAT:\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n let vch1 = this.stack[this.stack.length - 2]\n let vch2 = this.stack[this.stack.length - 1]\n \n this.stack[this.stack.length - 2] = Buffer.concat([vch1, vch2])\n this.stack.pop()\n break\n\n case OpCode.OP_SPLIT:\n if (this.stack.length < 2) {\n this.errStr = 'SCRIPT_ERR_INVALID_STACK_OPERATION'\n return false\n }\n\n let data = this.stack[this.stack.length - 2]\n let position = new Bn().fromScriptNumBuffer(\n this.stack[this.stack.length - 1],\n fRequireMinimal\n )\n\n if(position.lt(0) || position.gt(data.length)) {\n this.errStr = 'SCRIPT_ERR_INVALID_SPLIT_RANGE'\n return false\n }\n\n let n1 = data.slice(0, position)\n let n2 = data.slice(position)\n\n this.stack.pop()\n this.stack.pop()\n\n this.stack.push(n1)\n this.stack.push(n2)\n\n break\n\n default:\n this.errStr = 'SCRIPT_ERR_BAD_OPCODE'\n return false\n }\n }\n\n return true\n }\n\n /**\n * This function has the same interface as bitcoin core's VerifyScript and is\n * the function you want to use to know if a particular input in a\n * transaction is valid or not. It simply iterates over the results generated\n * by the results method.\n */\n verify (scriptSig, scriptPubKey, tx, nIn, flags, valueBn) {\n let results = this.results(\n scriptSig,\n scriptPubKey,\n tx,\n nIn,\n flags,\n valueBn\n )\n for (let success of results) {\n if (!success) {\n return false\n }\n }\n return true\n }\n\n /**\n * Gives you the results of the execution each operation of the scripSig and\n * scriptPubKey corresponding to a particular input (nIn) for the concerned\n * transaction (tx). Each result can be either true or false. If true, then\n * the operation did not invalidate the transaction. If false, then the\n * operation has invalidated the script, and the transaction is not valid.\n * flags is a number that can pass in some special flags, such as whether or\n * not to execute the redeemScript in a p2sh transaction.\n *\n * This method is translated from bitcoin core's VerifyScript. This function\n * is a generator, thus you can and need to iterate through it. To\n * automatically return true or false, use the verify method.\n */\n * results (scriptSig, scriptPubKey, tx, nIn, flags, valueBn) {\n let stackCopy\n\n this.fromObject({\n script: scriptSig,\n tx: tx,\n nIn: nIn,\n flags: flags,\n valueBn: valueBn\n })\n\n if (\n (flags & Interp.SCRIPT_VERIFY_SIGPUSHONLY) !== 0 &&\n !scriptSig.isPushOnly()\n ) {\n this.errStr = this.errStr || 'SCRIPT_ERR_SIG_PUSHONLY'\n yield false\n }\n\n yield * this.eval()\n\n if (flags & Interp.SCRIPT_VERIFY_P2SH) {\n stackCopy = this.stack.slice()\n }\n\n let stack = this.stack\n this.initialize()\n this.fromObject({\n script: scriptPubKey,\n stack: stack,\n tx: tx,\n nIn: nIn,\n flags: flags,\n valueBn: valueBn\n })\n\n yield * this.eval()\n\n if (this.stack.length === 0) {\n this.errStr = this.errStr || 'SCRIPT_ERR_EVAL_FALSE'\n yield false\n }\n\n let buf = this.stack[this.stack.length - 1]\n if (!Interp.castToBool(buf)) {\n this.errStr = this.errStr || 'SCRIPT_ERR_EVAL_FALSE'\n yield false\n }\n\n // Additional validation for spend-to-script-hash transactions:\n if (flags & Interp.SCRIPT_VERIFY_P2SH && scriptPubKey.isScriptHashOut()) {\n // scriptSig must be literals-only or validation fails\n if (!scriptSig.isPushOnly()) {\n this.errStr = this.errStr || 'SCRIPT_ERR_SIG_PUSHONLY'\n yield false\n }\n\n // Restore stack.\n let tmp = stack\n stack = stackCopy\n stackCopy = tmp\n\n // stack cannot be empty here, because if it was the\n // P2SH HASH <> EQUAL scriptPubKey would be evaluated with\n // an empty stack and the EvalScript above would yield false.\n if (stack.length === 0) {\n throw new Error('internal error - stack copy empty')\n }\n\n let pubKeySerialized = stack[stack.length - 1]\n let scriptPubKey2 = new Script().fromBuffer(pubKeySerialized)\n stack.pop()\n\n this.initialize()\n this.fromObject({\n script: scriptPubKey2,\n stack: stack,\n tx: tx,\n nIn: nIn,\n flags: flags,\n valueBn: valueBn\n })\n\n yield * this.eval()\n\n if (stack.length === 0) {\n this.errStr = this.errStr || 'SCRIPT_ERR_EVAL_FALSE'\n yield false\n }\n\n if (!Interp.castToBool(stack[stack.length - 1])) {\n this.errStr = this.errStr || 'SCRIPT_ERR_EVAL_FALSE'\n yield false\n } else {\n yield true\n }\n }\n\n // The CLEANSTACK check is only performed after potential P2SH evaluation,\n // as the non-P2SH evaluation of a P2SH script will obviously not result in\n // a clean stack (the P2SH inputs remain).\n if ((flags & Interp.SCRIPT_VERIFY_CLEANSTACK) !== 0) {\n // Disallow CLEANSTACK without P2SH, as otherwise a switch\n // CLEANSTACK->P2SH+CLEANSTACK would be possible, which is not a softfork\n // (and P2SH should be one).\n if (!(flags & Interp.SCRIPT_VERIFY_P2SH)) {\n throw new Error('cannot use CLEANSTACK without P2SH')\n }\n if (stack.length !== 1) {\n this.errStr = this.errStr || 'SCRIPT_ERR_CLEANSTACK'\n yield false\n }\n }\n\n yield true\n }\n\n /**\n * If the script has failed, this methods returns valuable debug\n * information about exactly where the script failed. It is a\n * JSON-compatible object so it can be easily stringified. pc refers to the\n * currently executing opcode.\n */\n getDebugObject () {\n let pc = this.pc - 1 // pc is incremented immediately after getting\n return {\n errStr: this.errStr,\n scriptStr: this.script ? this.script.toString() : 'no script found',\n pc: pc,\n stack: this.stack.map(buf => buf.toString('hex')),\n altStack: this.altStack.map(buf => buf.toString('hex')),\n opCodeStr: this.script\n ? OpCode.fromNumber(this.script.chunks[pc].opCodeNum).toString()\n : 'no script found'\n }\n }\n\n getDebugString () {\n return JSON.stringify(this.getDebugObject(), null, 2)\n }\n }\n\n Interp.true = Buffer.from([1])\n Interp.false = Buffer.from([])\n\n Interp.MAX_SCRIPT_ELEMENT_SIZE = 520\n Interp.LOCKTIME_THRESHOLD = 500000000 // Tue Nov 5 00:53:20 1985 UTC\n\n // flags taken from bitcoin core\n // bitcoin core commit: b5d1b1092998bc95313856d535c632ea5a8f9104\n Interp.SCRIPT_VERIFY_NONE = 0\n\n // Evaluate P2SH subScripts (softfork safe, Bip16).\n Interp.SCRIPT_VERIFY_P2SH = 1 << 0\n\n // Passing a non-strict-DER signature or one with undefined hashtype to a checksig operation causes script failure.\n // Passing a pubKey that is not (0x04 + 64 bytes) or (0x02 or 0x03 + 32 bytes) to checksig causes that pubKey to be\n // skipped (not softfork safe: this flag can widen the validity of OP_CHECKSIG OP_NOT).\n Interp.SCRIPT_VERIFY_STRICTENC = 1 << 1\n\n // Passing a non-strict-DER signature to a checksig operation causes script failure (softfork safe, Bip62 rule 1)\n Interp.SCRIPT_VERIFY_DERSIG = 1 << 2\n\n // Passing a non-strict-DER signature or one with S > order/2 to a checksig operation causes script failure\n // (softfork safe, Bip62 rule 5).\n Interp.SCRIPT_VERIFY_LOW_S = 1 << 3\n\n // verify dummy stack item consumed by CHECKMULTISIG is of zero-length (softfork safe, Bip62 rule 7).\n Interp.SCRIPT_VERIFY_NULLDUMMY = 1 << 4\n\n // Using a non-push operator in the scriptSig causes script failure (softfork safe, Bip62 rule 2).\n Interp.SCRIPT_VERIFY_SIGPUSHONLY = 1 << 5\n\n // Require minimal encodings for all push operations (OP_0... OP_16, OP_1NEGATE where possible, direct\n // pushes up to 75 bytes, OP_PUSHDATA up to 255 bytes, OP_PUSHDATA2 for anything larger). Evaluating\n // any other push causes the script to fail (Bip62 rule 3).\n // In addition, whenever a stack element is interpreted as a number, it must be of minimal length (Bip62 rule 4).\n // (softfork safe)\n Interp.SCRIPT_VERIFY_MINIMALDATA = 1 << 6\n\n // Discourage use of NOPs reserved for upgrades (NOP1-10)\n //\n // Provided so that nodes can avoid accepting or mining transactions\n // containing executed NOP's whose meaning may change after a soft-fork,\n // thus rendering the script invalid; with this flag set executing\n // discouraged NOPs fails the script. This verification flag will never be\n // a mandatory flag applied to scripts in a block. NOPs that are not\n // executed, e.g. within an unexecuted IF ENDIF block, are *not* rejected.\n Interp.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS = 1 << 7\n\n // Require that only a single stack element remains after evaluation. This\n // changes the success criterion from \"At least one stack element must\n // remain, and when interpreted as a boolean, it must be true\" to \"Exactly\n // one stack element must remain, and when interpreted as a boolean, it must\n // be true\". (softfork safe, Bip62 rule 6)\n // Note: CLEANSTACK should never be used without P2SH.\n Interp.SCRIPT_VERIFY_CLEANSTACK = 1 << 8\n\n // Verify CHECKLOCKTIMEVERIFY\n //\n // See Bip65 for details.\n Interp.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY = 1 << 9\n\n // support CHECKSEQUENCEVERIFY opCode\n //\n // See Bip112 for details\n Interp.SCRIPT_VERIFY_CHECKSEQUENCEVERIFY = 1 << 10\n\n // used for UAHF\n // https://github.com/Bitcoin-UAHF/spec/blob/master/replay-protected-sighash.md\n Interp.SCRIPT_ENABLE_SIGHASH_FORKID = 1 << 16\n\n // These are the things we wish to verify by default. At the time of writing,\n // P2SH and CHECKLOCKTIMEVERIFY are both active, but CHECKSEQUENCEVERIFY is\n // not.\n Interp.defaultFlags =\n Interp.SCRIPT_VERIFY_P2SH | Interp.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY\n // Interp.defaultFlags = Interp.SCRIPT_VERIFY_P2SH | Interp.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY | Interp.SCRIPT_VERIFY_CHECKSEQUENCEVERIFY\n\nexport { Interp }\n","/**\n * Aes (experimental)\n * ==================\n *\n * Advanced Encryption Standard (Aes). This is a low-level tool for encrypting\n * or decrypting blocks of data. There is almost never a reason to use this -\n * don't use it unless you need to encrypt or decrypt individual blocks.\n */\n'use strict'\n\nimport _Aes from 'aes'\n\nclass Aes { }\n\nAes.encrypt = function (messageBuf, keyBuf) {\n const key = Aes.buf2Words(keyBuf)\n const message = Aes.buf2Words(messageBuf)\n const a = new _Aes(key)\n const enc = a.encrypt(message)\n const encBuf = Aes.words2Buf(enc)\n return encBuf\n}\n\nAes.decrypt = function (encBuf, keyBuf) {\n const enc = Aes.buf2Words(encBuf)\n const key = Aes.buf2Words(keyBuf)\n const a = new _Aes(key)\n const message = a.decrypt(enc)\n const messageBuf = Aes.words2Buf(message)\n return messageBuf\n}\n\nAes.buf2Words = function (buf) {\n if (buf.length % 4) {\n throw new Error('buf length must be a multiple of 4')\n }\n\n const words = []\n\n for (let i = 0; i < buf.length / 4; i++) {\n words.push(buf.readUInt32BE(i * 4))\n }\n\n return words\n}\n\nAes.words2Buf = function (words) {\n const buf = Buffer.alloc(words.length * 4)\n\n for (let i = 0; i < words.length; i++) {\n buf.writeUInt32BE(words[i], i * 4)\n }\n\n return buf\n}\n\nexport { Aes }\n","/**\n * Cbc\n * ===\n *\n * Cipher Block Chaining (Cbc). This is a low-level tool for chaining multiple\n * encrypted blocks together, usually with Aes. This is a low-level tool that\n * does not include authentication. You should only be using this if you have\n * authentication at another step. It is best combined with Hmac.\n *\n * http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher-block_chaining_.28Cbc.29\n */\n'use strict'\n\nimport { cmp } from './cmp'\n\nclass Cbc {}\n\nCbc.buf2BlocksBuf = function (buf, blockSize) {\n const bytesize = blockSize / 8\n const blockBufs = []\n\n for (let i = 0; i <= buf.length / bytesize; i++) {\n let blockBuf = buf.slice(i * bytesize, i * bytesize + bytesize)\n\n if (blockBuf.length < blockSize) {\n blockBuf = Cbc.pkcs7Pad(blockBuf, blockSize)\n }\n\n blockBufs.push(blockBuf)\n }\n\n return blockBufs\n}\n\nCbc.blockBufs2Buf = function (blockBufs) {\n let last = blockBufs[blockBufs.length - 1]\n last = Cbc.pkcs7Unpad(last)\n blockBufs[blockBufs.length - 1] = last\n\n const buf = Buffer.concat(blockBufs)\n\n return buf\n}\n\nCbc.encrypt = function (messageBuf, ivBuf, blockCipher, cipherKeyBuf) {\n const blockSize = ivBuf.length * 8\n const blockBufs = Cbc.buf2BlocksBuf(messageBuf, blockSize)\n const encBufs = Cbc.encryptBlocks(blockBufs, ivBuf, blockCipher, cipherKeyBuf)\n const encBuf = Buffer.concat(encBufs)\n return encBuf\n}\n\nCbc.decrypt = function (encBuf, ivBuf, blockCipher, cipherKeyBuf) {\n const bytesize = ivBuf.length\n const encBufs = []\n for (let i = 0; i < encBuf.length / bytesize; i++) {\n encBufs.push(encBuf.slice(i * bytesize, i * bytesize + bytesize))\n }\n const blockBufs = Cbc.decryptBlocks(encBufs, ivBuf, blockCipher, cipherKeyBuf)\n const buf = Cbc.blockBufs2Buf(blockBufs)\n return buf\n}\n\nCbc.encryptBlock = function (blockBuf, ivBuf, blockCipher, cipherKeyBuf) {\n const xorbuf = Cbc.xorBufs(blockBuf, ivBuf)\n const encBuf = blockCipher.encrypt(xorbuf, cipherKeyBuf)\n return encBuf\n}\n\nCbc.decryptBlock = function (encBuf, ivBuf, blockCipher, cipherKeyBuf) {\n const xorbuf = blockCipher.decrypt(encBuf, cipherKeyBuf)\n const blockBuf = Cbc.xorBufs(xorbuf, ivBuf)\n return blockBuf\n}\n\nCbc.encryptBlocks = function (blockBufs, ivBuf, blockCipher, cipherKeyBuf) {\n const encBufs = []\n\n for (let i = 0; i < blockBufs.length; i++) {\n const blockBuf = blockBufs[i]\n const encBuf = Cbc.encryptBlock(blockBuf, ivBuf, blockCipher, cipherKeyBuf)\n\n encBufs.push(encBuf)\n\n ivBuf = encBuf\n }\n\n return encBufs\n}\n\nCbc.decryptBlocks = function (encBufs, ivBuf, blockCipher, cipherKeyBuf) {\n const blockBufs = []\n\n for (let i = 0; i < encBufs.length; i++) {\n const encBuf = encBufs[i]\n const blockBuf = Cbc.decryptBlock(encBuf, ivBuf, blockCipher, cipherKeyBuf)\n\n blockBufs.push(blockBuf)\n\n ivBuf = encBuf\n }\n\n return blockBufs\n}\n\nCbc.pkcs7Pad = function (buf, blockSize) {\n const bytesize = blockSize / 8\n const padbytesize = bytesize - buf.length\n const pad = Buffer.alloc(padbytesize)\n pad.fill(padbytesize)\n const paddedbuf = Buffer.concat([buf, pad])\n return paddedbuf\n}\n\nCbc.pkcs7Unpad = function (paddedbuf) {\n const padlength = paddedbuf[paddedbuf.length - 1]\n const padbuf = paddedbuf.slice(paddedbuf.length - padlength, paddedbuf.length)\n const padbuf2 = Buffer.alloc(padlength)\n padbuf2.fill(padlength)\n if (!cmp(padbuf, padbuf2)) {\n throw new Error('invalid padding')\n }\n return paddedbuf.slice(0, paddedbuf.length - padlength)\n}\n\nCbc.xorBufs = function (buf1, buf2) {\n if (buf1.length !== buf2.length) {\n throw new Error('bufs must have the same length')\n }\n\n const buf = Buffer.alloc(buf1.length)\n\n for (let i = 0; i < buf1.length; i++) {\n buf[i] = buf1[i] ^ buf2[i]\n }\n\n return buf\n}\n\nexport { Cbc }\n","'use strict'\n\nclass Config {\n constructor (values) {\n this.keyDefined = (key) => key in values\n this.getValue = (key) => values[key]\n }\n\n get (key) {\n if (this.keyDefined(key)) {\n return this.getValue(key)\n } else {\n throw new Error(`Unknown configuration: ${key}`)\n }\n }\n}\n\nclass ConfigBuilder {\n constructor () {\n this.variables = {}\n }\n\n build () {\n return new Config(this.variables)\n }\n\n addValue (key, value) {\n if (value === undefined) {\n throw new Error(`Failed to add \"${key}\" property. The value cannot be undefined`)\n }\n if (key in this.variables) {\n throw new Error(`\"${key}\" already has a value defined.`)\n }\n this.variables[key] = value\n return this\n }\n\n addValueWithDefault (key, value, defaultValue) {\n if (defaultValue === undefined) {\n throw new Error(`Failed to add \"${key}\" property. Default value cannot be undefined`)\n }\n return this.addValue(key, value === undefined ? defaultValue : value)\n }\n}\n\nconst config = new ConfigBuilder()\n .addValue('NETWORK', process.env.NETWORK || 'mainnet')\n .build()\n\nexport { config }\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","/**\n * Base58 Encoding\n * ===============\n *\n * Base58 (no check)\n */\n'use strict'\n\nimport bs58 from 'bs58'\nimport { Struct } from './struct'\n\nclass Base58 extends Struct {\n constructor (buf) {\n super({ buf })\n }\n\n fromHex (hex) {\n return this.fromBuffer(Buffer.from(hex, 'hex'))\n }\n\n toHex () {\n return this.toBuffer().toString('hex')\n }\n\n static encode (buf) {\n if (!Buffer.isBuffer(buf)) {\n throw new Error('Input should be a buffer')\n }\n return bs58.encode(buf)\n }\n\n static decode (str) {\n if (typeof str !== 'string') {\n throw new Error('Input should be a string')\n }\n return Buffer.from(bs58.decode(str))\n }\n\n fromBuffer (buf) {\n this.buf = buf\n return this\n }\n\n fromString (str) {\n const buf = Base58.decode(str)\n this.buf = buf\n return this\n }\n\n toBuffer () {\n return this.buf\n }\n\n toString () {\n return Base58.encode(this.buf)\n }\n}\n\nexport { Base58 }\n","/**\n * WorkersResult\n * =============\n *\n * A response sent back from a worker to the main thread. Contains the \"result\"\n * of the computation in the form of a buffer, resbuf. If the actual result is\n * an object with a .toFastBuffer method, the object is converted to a buffer\n * using that method. Otherwise it is JSON serialized into a buffer. The result\n * can also be an error, in which case the isError flag is set.\n */\n'use strict'\n\nimport { Bw } from './bw'\nimport { Struct } from './struct'\n\nclass WorkersResult extends Struct {\n constructor (resbuf, isError, id) {\n super({ resbuf, isError, id })\n }\n\n fromResult (result, id) {\n if (result.toFastBuffer) {\n this.resbuf = result.toFastBuffer()\n } else if (Buffer.isBuffer(result)) {\n this.resbuf = result\n } else {\n this.resbuf = Buffer.from(JSON.stringify(result))\n }\n this.isError = false\n this.id = id\n return this\n }\n\n static fromResult (result, id) {\n return new this().fromResult(result, id)\n }\n\n fromError (error, id) {\n this.resbuf = Buffer.from(JSON.stringify(error.message))\n this.isError = true\n this.id = id\n return this\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n bw.writeVarIntNum(this.resbuf.length)\n bw.write(this.resbuf)\n bw.writeUInt8(Number(this.isError))\n bw.writeVarIntNum(this.id)\n return bw\n }\n\n fromBr (br) {\n const resbuflen = br.readVarIntNum()\n this.resbuf = br.read(resbuflen)\n this.isError = Boolean(br.readUInt8())\n this.id = br.readVarIntNum()\n return this\n }\n}\n\nexport { WorkersResult }\n","/**\n * Transaction Output Map\n * ======================\n *\n * A map from a transaction hash and output number to that particular output.\n * Note that the map is from the transaction *hash*, which is the value that\n * occurs in the blockchain, not the id, which is the reverse of the hash. The\n * TxOutMap is necessary when signing a transction to get the script and value\n * of that output which is plugged into the sighash algorithm.\n */\n'use strict'\n\nimport { Struct } from './struct'\nimport { TxOut } from './tx-out'\n\nclass TxOutMap extends Struct {\n constructor (map = new Map()) {\n super({ map })\n }\n\n toJSON () {\n const json = {}\n this.map.forEach((txOut, label) => {\n json[label] = txOut.toHex()\n })\n return json\n }\n\n fromJSON (json) {\n Object.keys(json).forEach(label => {\n this.map.set(label, TxOut.fromHex(json[label]))\n })\n return this\n }\n\n set (txHashBuf, txOutNum, txOut) {\n const label = txHashBuf.toString('hex') + ':' + txOutNum\n this.map.set(label, txOut)\n return this\n }\n\n get (txHashBuf, txOutNum) {\n const label = txHashBuf.toString('hex') + ':' + txOutNum\n return this.map.get(label)\n }\n\n setTx (tx) {\n const txhashhex = tx.hash().toString('hex')\n tx.txOuts.forEach((txOut, index) => {\n const label = txhashhex + ':' + index\n this.map.set(label, txOut)\n })\n return this\n }\n}\n\nexport { TxOutMap }\n","\n\nmodule.exports = AES;\n\n//@param {Array} key The key as an array of 4, 6 or 8 words.\nfunction AES (key) {\n if (!this._tables[0][0][0]) this._precompute();\n \n var tmp, encKey, decKey;\n var sbox = this._tables[0][4];\n var decTable = this._tables[1];\n var keyLen = key.length; \n var rcon = 1;\n \n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error(\"invalid aes key size\");\n }\n \n this._key = [encKey = key.slice(0), decKey = []];\n \n // schedule encryption keys\n for (var i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i-1];\n \n // apply sbox\n if (i % keyLen === 0 || (keyLen === 8 && i % keyLen === 4)) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255]<< 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255];\n \n // shift rows and add rcon\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon<<24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n \n encKey[i] = encKey[i-keyLen] ^ tmp;\n }\n \n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = encKey[j&3 ? i : i - 4];\n if (i<=4 || j<4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp>>>24 ]] ^\n decTable[1][sbox[tmp>>16 & 255]] ^\n decTable[2][sbox[tmp>>8 & 255]] ^\n decTable[3][sbox[tmp & 255]];\n }\n }\n};\n\nAES.prototype = {\n \n /**\n * Encrypt an array of 4 big-endian words.\n * @param {Array} data The plaintext.\n * @return {Array} The ciphertext.\n */\n encrypt:function (data) { return this._crypt(data, 0); },\n \n /**\n * Decrypt an array of 4 big-endian words.\n * @param {Array} data The ciphertext.\n * @return {Array} The plaintext.\n */\n decrypt:function (data) { return this._crypt(data, 1); },\n \n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n _tables: [\n [ new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256) ],\n [ new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256) ]\n ],\n\n //Expand the S-box tables.\n _precompute: function () {\n var encTable = this._tables[0], decTable = this._tables[1],\n sbox = encTable[4], sboxInv = decTable[4],\n i, x, xInv, d=new Uint8Array(256), th=new Uint8Array(256), x2, x4, x8, s, tEnc, tDec;\n\n // Compute double and third tables\n for (i = 0; i < 256; i++) {\n th[( d[i] = i<<1 ^ (i>>7)*283 )^i]=i;\n }\n \n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x;\n \n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8*0x1010101 ^ x4*0x10001 ^ x2*0x101 ^ x*0x1010100;\n tEnc = d[s]*0x101 ^ s*0x1010100;\n \n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc<<24 ^ tEnc>>>8;\n decTable[i][s] = tDec = tDec<<24 ^ tDec>>>8;\n }\n }\n },\n \n /**\n * Encryption and decryption core.\n * @param {Array} input Four words to be encrypted or decrypted.\n * @param dir The direction, 0 for encrypt and 1 for decrypt.\n * @return {Array} The four encrypted or decrypted words.\n * @private\n */\n _crypt:function (input, dir) {\n if (input.length !== 4) {\n throw new Error(\"invalid aes block size\");\n }\n \n var key = this._key[dir],\n // state variables a,b,c,d are loaded with pre-whitened data\n a = input[0] ^ key[0],\n b = input[dir ? 3 : 1] ^ key[1],\n c = input[2] ^ key[2],\n d = input[dir ? 1 : 3] ^ key[3],\n a2, b2, c2,\n \n nInnerRounds = key.length/4 - 2,\n i,\n kIndex = 4,\n out = new Uint32Array(4),// <--- this is slower in Node.js, about the same in Chrome */ \n table = this._tables[dir],\n \n // load up the tables\n t0 = table[0],\n t1 = table[1],\n t2 = table[2],\n t3 = table[3],\n sbox = table[4];\n \n // Inner rounds. Cribbed from OpenSSL.\n for (i = 0; i < nInnerRounds; i++) {\n a2 = t0[a>>>24] ^ t1[b>>16 & 255] ^ t2[c>>8 & 255] ^ t3[d & 255] ^ key[kIndex];\n b2 = t0[b>>>24] ^ t1[c>>16 & 255] ^ t2[d>>8 & 255] ^ t3[a & 255] ^ key[kIndex + 1];\n c2 = t0[c>>>24] ^ t1[d>>16 & 255] ^ t2[a>>8 & 255] ^ t3[b & 255] ^ key[kIndex + 2];\n d = t0[d>>>24] ^ t1[a>>16 & 255] ^ t2[b>>8 & 255] ^ t3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a=a2; b=b2; c=c2;\n }\n \n // Last round.\n for (i = 0; i < 4; i++) {\n out[dir ? 3&-i : i] =\n sbox[a>>>24 ]<<24 ^ \n sbox[b>>16 & 255]<<16 ^\n sbox[c>>8 & 255]<<8 ^\n sbox[d & 255] ^\n key[kIndex++];\n a2=a; a=b; b=c; c=d; d=a2;\n }\n \n return out;\n }\n};\n","var basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","/**\n * Hash Cache\n * ==========\n *\n * For use in sighash.\n */\n'use strict'\n\nimport { Struct } from './struct'\n\nclass HashCache extends Struct {\n constructor (prevoutsHashBuf, sequenceHashBuf, outputsHashBuf) {\n super()\n this.fromObject({ prevoutsHashBuf, sequenceHashBuf, outputsHashBuf })\n }\n\n fromBuffer (buf) {\n return this.fromJSON(JSON.parse(buf.toString()))\n }\n\n toBuffer () {\n return Buffer.from(JSON.stringify(this.toJSON()))\n }\n\n fromJSON (json) {\n this.prevoutsHashBuf = json.prevoutsHashBuf ? Buffer.from(json.prevoutsHashBuf, 'hex') : undefined\n this.sequenceHashBuf = json.sequenceHashBuf ? Buffer.from(json.sequenceHashBuf, 'hex') : undefined\n this.outputsHashBuf = json.outputsHashBuf ? Buffer.from(json.outputsHashBuf, 'hex') : undefined\n return this\n }\n\n toJSON () {\n return {\n prevoutsHashBuf: this.prevoutsHashBuf ? this.prevoutsHashBuf.toString('hex') : undefined,\n sequenceHashBuf: this.sequenceHashBuf ? this.sequenceHashBuf.toString('hex') : undefined,\n outputsHashBuf: this.outputsHashBuf ? this.outputsHashBuf.toString('hex') : undefined\n }\n }\n}\n\nexport { HashCache }\n","'use strict'\nconst wordList = [\n 'abandon',\n 'ability',\n 'able',\n 'about',\n 'above',\n 'absent',\n 'absorb',\n 'abstract',\n 'absurd',\n 'abuse',\n 'access',\n 'accident',\n 'account',\n 'accuse',\n 'achieve',\n 'acid',\n 'acoustic',\n 'acquire',\n 'across',\n 'act',\n 'action',\n 'actor',\n 'actress',\n 'actual',\n 'adapt',\n 'add',\n 'addict',\n 'address',\n 'adjust',\n 'admit',\n 'adult',\n 'advance',\n 'advice',\n 'aerobic',\n 'affair',\n 'afford',\n 'afraid',\n 'again',\n 'age',\n 'agent',\n 'agree',\n 'ahead',\n 'aim',\n 'air',\n 'airport',\n 'aisle',\n 'alarm',\n 'album',\n 'alcohol',\n 'alert',\n 'alien',\n 'all',\n 'alley',\n 'allow',\n 'almost',\n 'alone',\n 'alpha',\n 'already',\n 'also',\n 'alter',\n 'always',\n 'amateur',\n 'amazing',\n 'among',\n 'amount',\n 'amused',\n 'analyst',\n 'anchor',\n 'ancient',\n 'anger',\n 'angle',\n 'angry',\n 'animal',\n 'ankle',\n 'announce',\n 'annual',\n 'another',\n 'answer',\n 'antenna',\n 'antique',\n 'anxiety',\n 'any',\n 'apart',\n 'apology',\n 'appear',\n 'apple',\n 'approve',\n 'april',\n 'arch',\n 'arctic',\n 'area',\n 'arena',\n 'argue',\n 'arm',\n 'armed',\n 'armor',\n 'army',\n 'around',\n 'arrange',\n 'arrest',\n 'arrive',\n 'arrow',\n 'art',\n 'artefact',\n 'artist',\n 'artwork',\n 'ask',\n 'aspect',\n 'assault',\n 'asset',\n 'assist',\n 'assume',\n 'asthma',\n 'athlete',\n 'atom',\n 'attack',\n 'attend',\n 'attitude',\n 'attract',\n 'auction',\n 'audit',\n 'august',\n 'aunt',\n 'author',\n 'auto',\n 'autumn',\n 'average',\n 'avocado',\n 'avoid',\n 'awake',\n 'aware',\n 'away',\n 'awesome',\n 'awful',\n 'awkward',\n 'axis',\n 'baby',\n 'bachelor',\n 'bacon',\n 'badge',\n 'bag',\n 'balance',\n 'balcony',\n 'ball',\n 'bamboo',\n 'banana',\n 'banner',\n 'bar',\n 'barely',\n 'bargain',\n 'barrel',\n 'base',\n 'basic',\n 'basket',\n 'battle',\n 'beach',\n 'bean',\n 'beauty',\n 'because',\n 'become',\n 'beef',\n 'before',\n 'begin',\n 'behave',\n 'behind',\n 'believe',\n 'below',\n 'belt',\n 'bench',\n 'benefit',\n 'best',\n 'betray',\n 'better',\n 'between',\n 'beyond',\n 'bicycle',\n 'bid',\n 'bike',\n 'bind',\n 'biology',\n 'bird',\n 'birth',\n 'bitter',\n 'black',\n 'blade',\n 'blame',\n 'blanket',\n 'blast',\n 'bleak',\n 'bless',\n 'blind',\n 'blood',\n 'blossom',\n 'blouse',\n 'blue',\n 'blur',\n 'blush',\n 'board',\n 'boat',\n 'body',\n 'boil',\n 'bomb',\n 'bone',\n 'bonus',\n 'book',\n 'boost',\n 'border',\n 'boring',\n 'borrow',\n 'boss',\n 'bottom',\n 'bounce',\n 'box',\n 'boy',\n 'bracket',\n 'brain',\n 'brand',\n 'brass',\n 'brave',\n 'bread',\n 'breeze',\n 'brick',\n 'bridge',\n 'brief',\n 'bright',\n 'bring',\n 'brisk',\n 'broccoli',\n 'broken',\n 'bronze',\n 'broom',\n 'brother',\n 'brown',\n 'brush',\n 'bubble',\n 'buddy',\n 'budget',\n 'buffalo',\n 'build',\n 'bulb',\n 'bulk',\n 'bullet',\n 'bundle',\n 'bunker',\n 'burden',\n 'burger',\n 'burst',\n 'bus',\n 'business',\n 'busy',\n 'butter',\n 'buyer',\n 'buzz',\n 'cabbage',\n 'cabin',\n 'cable',\n 'cactus',\n 'cage',\n 'cake',\n 'call',\n 'calm',\n 'camera',\n 'camp',\n 'can',\n 'canal',\n 'cancel',\n 'candy',\n 'cannon',\n 'canoe',\n 'canvas',\n 'canyon',\n 'capable',\n 'capital',\n 'captain',\n 'car',\n 'carbon',\n 'card',\n 'cargo',\n 'carpet',\n 'carry',\n 'cart',\n 'case',\n 'cash',\n 'casino',\n 'castle',\n 'casual',\n 'cat',\n 'catalog',\n 'catch',\n 'category',\n 'cattle',\n 'caught',\n 'cause',\n 'caution',\n 'cave',\n 'ceiling',\n 'celery',\n 'cement',\n 'census',\n 'century',\n 'cereal',\n 'certain',\n 'chair',\n 'chalk',\n 'champion',\n 'change',\n 'chaos',\n 'chapter',\n 'charge',\n 'chase',\n 'chat',\n 'cheap',\n 'check',\n 'cheese',\n 'chef',\n 'cherry',\n 'chest',\n 'chicken',\n 'chief',\n 'child',\n 'chimney',\n 'choice',\n 'choose',\n 'chronic',\n 'chuckle',\n 'chunk',\n 'churn',\n 'cigar',\n 'cinnamon',\n 'circle',\n 'citizen',\n 'city',\n 'civil',\n 'claim',\n 'clap',\n 'clarify',\n 'claw',\n 'clay',\n 'clean',\n 'clerk',\n 'clever',\n 'click',\n 'client',\n 'cliff',\n 'climb',\n 'clinic',\n 'clip',\n 'clock',\n 'clog',\n 'close',\n 'cloth',\n 'cloud',\n 'clown',\n 'club',\n 'clump',\n 'cluster',\n 'clutch',\n 'coach',\n 'coast',\n 'coconut',\n 'code',\n 'coffee',\n 'coil',\n 'coin',\n 'collect',\n 'color',\n 'column',\n 'combine',\n 'come',\n 'comfort',\n 'comic',\n 'common',\n 'company',\n 'concert',\n 'conduct',\n 'confirm',\n 'congress',\n 'connect',\n 'consider',\n 'control',\n 'convince',\n 'cook',\n 'cool',\n 'copper',\n 'copy',\n 'coral',\n 'core',\n 'corn',\n 'correct',\n 'cost',\n 'cotton',\n 'couch',\n 'country',\n 'couple',\n 'course',\n 'cousin',\n 'cover',\n 'coyote',\n 'crack',\n 'cradle',\n 'craft',\n 'cram',\n 'crane',\n 'crash',\n 'crater',\n 'crawl',\n 'crazy',\n 'cream',\n 'credit',\n 'creek',\n 'crew',\n 'cricket',\n 'crime',\n 'crisp',\n 'critic',\n 'crop',\n 'cross',\n 'crouch',\n 'crowd',\n 'crucial',\n 'cruel',\n 'cruise',\n 'crumble',\n 'crunch',\n 'crush',\n 'cry',\n 'crystal',\n 'cube',\n 'culture',\n 'cup',\n 'cupboard',\n 'curious',\n 'current',\n 'curtain',\n 'curve',\n 'cushion',\n 'custom',\n 'cute',\n 'cycle',\n 'dad',\n 'damage',\n 'damp',\n 'dance',\n 'danger',\n 'daring',\n 'dash',\n 'daughter',\n 'dawn',\n 'day',\n 'deal',\n 'debate',\n 'debris',\n 'decade',\n 'december',\n 'decide',\n 'decline',\n 'decorate',\n 'decrease',\n 'deer',\n 'defense',\n 'define',\n 'defy',\n 'degree',\n 'delay',\n 'deliver',\n 'demand',\n 'demise',\n 'denial',\n 'dentist',\n 'deny',\n 'depart',\n 'depend',\n 'deposit',\n 'depth',\n 'deputy',\n 'derive',\n 'describe',\n 'desert',\n 'design',\n 'desk',\n 'despair',\n 'destroy',\n 'detail',\n 'detect',\n 'develop',\n 'device',\n 'devote',\n 'diagram',\n 'dial',\n 'diamond',\n 'diary',\n 'dice',\n 'diesel',\n 'diet',\n 'differ',\n 'digital',\n 'dignity',\n 'dilemma',\n 'dinner',\n 'dinosaur',\n 'direct',\n 'dirt',\n 'disagree',\n 'discover',\n 'disease',\n 'dish',\n 'dismiss',\n 'disorder',\n 'display',\n 'distance',\n 'divert',\n 'divide',\n 'divorce',\n 'dizzy',\n 'doctor',\n 'document',\n 'dog',\n 'doll',\n 'dolphin',\n 'domain',\n 'donate',\n 'donkey',\n 'donor',\n 'door',\n 'dose',\n 'double',\n 'dove',\n 'draft',\n 'dragon',\n 'drama',\n 'drastic',\n 'draw',\n 'dream',\n 'dress',\n 'drift',\n 'drill',\n 'drink',\n 'drip',\n 'drive',\n 'drop',\n 'drum',\n 'dry',\n 'duck',\n 'dumb',\n 'dune',\n 'during',\n 'dust',\n 'dutch',\n 'duty',\n 'dwarf',\n 'dynamic',\n 'eager',\n 'eagle',\n 'early',\n 'earn',\n 'earth',\n 'easily',\n 'east',\n 'easy',\n 'echo',\n 'ecology',\n 'economy',\n 'edge',\n 'edit',\n 'educate',\n 'effort',\n 'egg',\n 'eight',\n 'either',\n 'elbow',\n 'elder',\n 'electric',\n 'elegant',\n 'element',\n 'elephant',\n 'elevator',\n 'elite',\n 'else',\n 'embark',\n 'embody',\n 'embrace',\n 'emerge',\n 'emotion',\n 'employ',\n 'empower',\n 'empty',\n 'enable',\n 'enact',\n 'end',\n 'endless',\n 'endorse',\n 'enemy',\n 'energy',\n 'enforce',\n 'engage',\n 'engine',\n 'enhance',\n 'enjoy',\n 'enlist',\n 'enough',\n 'enrich',\n 'enroll',\n 'ensure',\n 'enter',\n 'entire',\n 'entry',\n 'envelope',\n 'episode',\n 'equal',\n 'equip',\n 'era',\n 'erase',\n 'erode',\n 'erosion',\n 'error',\n 'erupt',\n 'escape',\n 'essay',\n 'essence',\n 'estate',\n 'eternal',\n 'ethics',\n 'evidence',\n 'evil',\n 'evoke',\n 'evolve',\n 'exact',\n 'example',\n 'excess',\n 'exchange',\n 'excite',\n 'exclude',\n 'excuse',\n 'execute',\n 'exercise',\n 'exhaust',\n 'exhibit',\n 'exile',\n 'exist',\n 'exit',\n 'exotic',\n 'expand',\n 'expect',\n 'expire',\n 'explain',\n 'expose',\n 'express',\n 'extend',\n 'extra',\n 'eye',\n 'eyebrow',\n 'fabric',\n 'face',\n 'faculty',\n 'fade',\n 'faint',\n 'faith',\n 'fall',\n 'false',\n 'fame',\n 'family',\n 'famous',\n 'fan',\n 'fancy',\n 'fantasy',\n 'farm',\n 'fashion',\n 'fat',\n 'fatal',\n 'father',\n 'fatigue',\n 'fault',\n 'favorite',\n 'feature',\n 'february',\n 'federal',\n 'fee',\n 'feed',\n 'feel',\n 'female',\n 'fence',\n 'festival',\n 'fetch',\n 'fever',\n 'few',\n 'fiber',\n 'fiction',\n 'field',\n 'figure',\n 'file',\n 'film',\n 'filter',\n 'final',\n 'find',\n 'fine',\n 'finger',\n 'finish',\n 'fire',\n 'firm',\n 'first',\n 'fiscal',\n 'fish',\n 'fit',\n 'fitness',\n 'fix',\n 'flag',\n 'flame',\n 'flash',\n 'flat',\n 'flavor',\n 'flee',\n 'flight',\n 'flip',\n 'float',\n 'flock',\n 'floor',\n 'flower',\n 'fluid',\n 'flush',\n 'fly',\n 'foam',\n 'focus',\n 'fog',\n 'foil',\n 'fold',\n 'follow',\n 'food',\n 'foot',\n 'force',\n 'forest',\n 'forget',\n 'fork',\n 'fortune',\n 'forum',\n 'forward',\n 'fossil',\n 'foster',\n 'found',\n 'fox',\n 'fragile',\n 'frame',\n 'frequent',\n 'fresh',\n 'friend',\n 'fringe',\n 'frog',\n 'front',\n 'frost',\n 'frown',\n 'frozen',\n 'fruit',\n 'fuel',\n 'fun',\n 'funny',\n 'furnace',\n 'fury',\n 'future',\n 'gadget',\n 'gain',\n 'galaxy',\n 'gallery',\n 'game',\n 'gap',\n 'garage',\n 'garbage',\n 'garden',\n 'garlic',\n 'garment',\n 'gas',\n 'gasp',\n 'gate',\n 'gather',\n 'gauge',\n 'gaze',\n 'general',\n 'genius',\n 'genre',\n 'gentle',\n 'genuine',\n 'gesture',\n 'ghost',\n 'giant',\n 'gift',\n 'giggle',\n 'ginger',\n 'giraffe',\n 'girl',\n 'give',\n 'glad',\n 'glance',\n 'glare',\n 'glass',\n 'glide',\n 'glimpse',\n 'globe',\n 'gloom',\n 'glory',\n 'glove',\n 'glow',\n 'glue',\n 'goat',\n 'goddess',\n 'gold',\n 'good',\n 'goose',\n 'gorilla',\n 'gospel',\n 'gossip',\n 'govern',\n 'gown',\n 'grab',\n 'grace',\n 'grain',\n 'grant',\n 'grape',\n 'grass',\n 'gravity',\n 'great',\n 'green',\n 'grid',\n 'grief',\n 'grit',\n 'grocery',\n 'group',\n 'grow',\n 'grunt',\n 'guard',\n 'guess',\n 'guide',\n 'guilt',\n 'guitar',\n 'gun',\n 'gym',\n 'habit',\n 'hair',\n 'half',\n 'hammer',\n 'hamster',\n 'hand',\n 'happy',\n 'harbor',\n 'hard',\n 'harsh',\n 'harvest',\n 'hat',\n 'have',\n 'hawk',\n 'hazard',\n 'head',\n 'health',\n 'heart',\n 'heavy',\n 'hedgehog',\n 'height',\n 'hello',\n 'helmet',\n 'help',\n 'hen',\n 'hero',\n 'hidden',\n 'high',\n 'hill',\n 'hint',\n 'hip',\n 'hire',\n 'history',\n 'hobby',\n 'hockey',\n 'hold',\n 'hole',\n 'holiday',\n 'hollow',\n 'home',\n 'honey',\n 'hood',\n 'hope',\n 'horn',\n 'horror',\n 'horse',\n 'hospital',\n 'host',\n 'hotel',\n 'hour',\n 'hover',\n 'hub',\n 'huge',\n 'human',\n 'humble',\n 'humor',\n 'hundred',\n 'hungry',\n 'hunt',\n 'hurdle',\n 'hurry',\n 'hurt',\n 'husband',\n 'hybrid',\n 'ice',\n 'icon',\n 'idea',\n 'identify',\n 'idle',\n 'ignore',\n 'ill',\n 'illegal',\n 'illness',\n 'image',\n 'imitate',\n 'immense',\n 'immune',\n 'impact',\n 'impose',\n 'improve',\n 'impulse',\n 'inch',\n 'include',\n 'income',\n 'increase',\n 'index',\n 'indicate',\n 'indoor',\n 'industry',\n 'infant',\n 'inflict',\n 'inform',\n 'inhale',\n 'inherit',\n 'initial',\n 'inject',\n 'injury',\n 'inmate',\n 'inner',\n 'innocent',\n 'input',\n 'inquiry',\n 'insane',\n 'insect',\n 'inside',\n 'inspire',\n 'install',\n 'intact',\n 'interest',\n 'into',\n 'invest',\n 'invite',\n 'involve',\n 'iron',\n 'island',\n 'isolate',\n 'issue',\n 'item',\n 'ivory',\n 'jacket',\n 'jaguar',\n 'jar',\n 'jazz',\n 'jealous',\n 'jeans',\n 'jelly',\n 'jewel',\n 'job',\n 'join',\n 'joke',\n 'journey',\n 'joy',\n 'judge',\n 'juice',\n 'jump',\n 'jungle',\n 'junior',\n 'junk',\n 'just',\n 'kangaroo',\n 'keen',\n 'keep',\n 'ketchup',\n 'key',\n 'kick',\n 'kid',\n 'kidney',\n 'kind',\n 'kingdom',\n 'kiss',\n 'kit',\n 'kitchen',\n 'kite',\n 'kitten',\n 'kiwi',\n 'knee',\n 'knife',\n 'knock',\n 'know',\n 'lab',\n 'label',\n 'labor',\n 'ladder',\n 'lady',\n 'lake',\n 'lamp',\n 'language',\n 'laptop',\n 'large',\n 'later',\n 'latin',\n 'laugh',\n 'laundry',\n 'lava',\n 'law',\n 'lawn',\n 'lawsuit',\n 'layer',\n 'lazy',\n 'leader',\n 'leaf',\n 'learn',\n 'leave',\n 'lecture',\n 'left',\n 'leg',\n 'legal',\n 'legend',\n 'leisure',\n 'lemon',\n 'lend',\n 'length',\n 'lens',\n 'leopard',\n 'lesson',\n 'letter',\n 'level',\n 'liar',\n 'liberty',\n 'library',\n 'license',\n 'life',\n 'lift',\n 'light',\n 'like',\n 'limb',\n 'limit',\n 'link',\n 'lion',\n 'liquid',\n 'list',\n 'little',\n 'live',\n 'lizard',\n 'load',\n 'loan',\n 'lobster',\n 'local',\n 'lock',\n 'logic',\n 'lonely',\n 'long',\n 'loop',\n 'lottery',\n 'loud',\n 'lounge',\n 'love',\n 'loyal',\n 'lucky',\n 'luggage',\n 'lumber',\n 'lunar',\n 'lunch',\n 'luxury',\n 'lyrics',\n 'machine',\n 'mad',\n 'magic',\n 'magnet',\n 'maid',\n 'mail',\n 'main',\n 'major',\n 'make',\n 'mammal',\n 'man',\n 'manage',\n 'mandate',\n 'mango',\n 'mansion',\n 'manual',\n 'maple',\n 'marble',\n 'march',\n 'margin',\n 'marine',\n 'market',\n 'marriage',\n 'mask',\n 'mass',\n 'master',\n 'match',\n 'material',\n 'math',\n 'matrix',\n 'matter',\n 'maximum',\n 'maze',\n 'meadow',\n 'mean',\n 'measure',\n 'meat',\n 'mechanic',\n 'medal',\n 'media',\n 'melody',\n 'melt',\n 'member',\n 'memory',\n 'mention',\n 'menu',\n 'mercy',\n 'merge',\n 'merit',\n 'merry',\n 'mesh',\n 'message',\n 'metal',\n 'method',\n 'middle',\n 'midnight',\n 'milk',\n 'million',\n 'mimic',\n 'mind',\n 'minimum',\n 'minor',\n 'minute',\n 'miracle',\n 'mirror',\n 'misery',\n 'miss',\n 'mistake',\n 'mix',\n 'mixed',\n 'mixture',\n 'mobile',\n 'model',\n 'modify',\n 'mom',\n 'moment',\n 'monitor',\n 'monkey',\n 'monster',\n 'month',\n 'moon',\n 'moral',\n 'more',\n 'morning',\n 'mosquito',\n 'mother',\n 'motion',\n 'motor',\n 'mountain',\n 'mouse',\n 'move',\n 'movie',\n 'much',\n 'muffin',\n 'mule',\n 'multiply',\n 'muscle',\n 'museum',\n 'mushroom',\n 'music',\n 'must',\n 'mutual',\n 'myself',\n 'mystery',\n 'myth',\n 'naive',\n 'name',\n 'napkin',\n 'narrow',\n 'nasty',\n 'nation',\n 'nature',\n 'near',\n 'neck',\n 'need',\n 'negative',\n 'neglect',\n 'neither',\n 'nephew',\n 'nerve',\n 'nest',\n 'net',\n 'network',\n 'neutral',\n 'never',\n 'news',\n 'next',\n 'nice',\n 'night',\n 'noble',\n 'noise',\n 'nominee',\n 'noodle',\n 'normal',\n 'north',\n 'nose',\n 'notable',\n 'note',\n 'nothing',\n 'notice',\n 'novel',\n 'now',\n 'nuclear',\n 'number',\n 'nurse',\n 'nut',\n 'oak',\n 'obey',\n 'object',\n 'oblige',\n 'obscure',\n 'observe',\n 'obtain',\n 'obvious',\n 'occur',\n 'ocean',\n 'october',\n 'odor',\n 'off',\n 'offer',\n 'office',\n 'often',\n 'oil',\n 'okay',\n 'old',\n 'olive',\n 'olympic',\n 'omit',\n 'once',\n 'one',\n 'onion',\n 'online',\n 'only',\n 'open',\n 'opera',\n 'opinion',\n 'oppose',\n 'option',\n 'orange',\n 'orbit',\n 'orchard',\n 'order',\n 'ordinary',\n 'organ',\n 'orient',\n 'original',\n 'orphan',\n 'ostrich',\n 'other',\n 'outdoor',\n 'outer',\n 'output',\n 'outside',\n 'oval',\n 'oven',\n 'over',\n 'own',\n 'owner',\n 'oxygen',\n 'oyster',\n 'ozone',\n 'pact',\n 'paddle',\n 'page',\n 'pair',\n 'palace',\n 'palm',\n 'panda',\n 'panel',\n 'panic',\n 'panther',\n 'paper',\n 'parade',\n 'parent',\n 'park',\n 'parrot',\n 'party',\n 'pass',\n 'patch',\n 'path',\n 'patient',\n 'patrol',\n 'pattern',\n 'pause',\n 'pave',\n 'payment',\n 'peace',\n 'peanut',\n 'pear',\n 'peasant',\n 'pelican',\n 'pen',\n 'penalty',\n 'pencil',\n 'people',\n 'pepper',\n 'perfect',\n 'permit',\n 'person',\n 'pet',\n 'phone',\n 'photo',\n 'phrase',\n 'physical',\n 'piano',\n 'picnic',\n 'picture',\n 'piece',\n 'pig',\n 'pigeon',\n 'pill',\n 'pilot',\n 'pink',\n 'pioneer',\n 'pipe',\n 'pistol',\n 'pitch',\n 'pizza',\n 'place',\n 'planet',\n 'plastic',\n 'plate',\n 'play',\n 'please',\n 'pledge',\n 'pluck',\n 'plug',\n 'plunge',\n 'poem',\n 'poet',\n 'point',\n 'polar',\n 'pole',\n 'police',\n 'pond',\n 'pony',\n 'pool',\n 'popular',\n 'portion',\n 'position',\n 'possible',\n 'post',\n 'potato',\n 'pottery',\n 'poverty',\n 'powder',\n 'power',\n 'practice',\n 'praise',\n 'predict',\n 'prefer',\n 'prepare',\n 'present',\n 'pretty',\n 'prevent',\n 'price',\n 'pride',\n 'primary',\n 'print',\n 'priority',\n 'prison',\n 'private',\n 'prize',\n 'problem',\n 'process',\n 'produce',\n 'profit',\n 'program',\n 'project',\n 'promote',\n 'proof',\n 'property',\n 'prosper',\n 'protect',\n 'proud',\n 'provide',\n 'public',\n 'pudding',\n 'pull',\n 'pulp',\n 'pulse',\n 'pumpkin',\n 'punch',\n 'pupil',\n 'puppy',\n 'purchase',\n 'purity',\n 'purpose',\n 'purse',\n 'push',\n 'put',\n 'puzzle',\n 'pyramid',\n 'quality',\n 'quantum',\n 'quarter',\n 'question',\n 'quick',\n 'quit',\n 'quiz',\n 'quote',\n 'rabbit',\n 'raccoon',\n 'race',\n 'rack',\n 'radar',\n 'radio',\n 'rail',\n 'rain',\n 'raise',\n 'rally',\n 'ramp',\n 'ranch',\n 'random',\n 'range',\n 'rapid',\n 'rare',\n 'rate',\n 'rather',\n 'raven',\n 'raw',\n 'razor',\n 'ready',\n 'real',\n 'reason',\n 'rebel',\n 'rebuild',\n 'recall',\n 'receive',\n 'recipe',\n 'record',\n 'recycle',\n 'reduce',\n 'reflect',\n 'reform',\n 'refuse',\n 'region',\n 'regret',\n 'regular',\n 'reject',\n 'relax',\n 'release',\n 'relief',\n 'rely',\n 'remain',\n 'remember',\n 'remind',\n 'remove',\n 'render',\n 'renew',\n 'rent',\n 'reopen',\n 'repair',\n 'repeat',\n 'replace',\n 'report',\n 'require',\n 'rescue',\n 'resemble',\n 'resist',\n 'resource',\n 'response',\n 'result',\n 'retire',\n 'retreat',\n 'return',\n 'reunion',\n 'reveal',\n 'review',\n 'reward',\n 'rhythm',\n 'rib',\n 'ribbon',\n 'rice',\n 'rich',\n 'ride',\n 'ridge',\n 'rifle',\n 'right',\n 'rigid',\n 'ring',\n 'riot',\n 'ripple',\n 'risk',\n 'ritual',\n 'rival',\n 'river',\n 'road',\n 'roast',\n 'robot',\n 'robust',\n 'rocket',\n 'romance',\n 'roof',\n 'rookie',\n 'room',\n 'rose',\n 'rotate',\n 'rough',\n 'round',\n 'route',\n 'royal',\n 'rubber',\n 'rude',\n 'rug',\n 'rule',\n 'run',\n 'runway',\n 'rural',\n 'sad',\n 'saddle',\n 'sadness',\n 'safe',\n 'sail',\n 'salad',\n 'salmon',\n 'salon',\n 'salt',\n 'salute',\n 'same',\n 'sample',\n 'sand',\n 'satisfy',\n 'satoshi',\n 'sauce',\n 'sausage',\n 'save',\n 'say',\n 'scale',\n 'scan',\n 'scare',\n 'scatter',\n 'scene',\n 'scheme',\n 'school',\n 'science',\n 'scissors',\n 'scorpion',\n 'scout',\n 'scrap',\n 'screen',\n 'script',\n 'scrub',\n 'sea',\n 'search',\n 'season',\n 'seat',\n 'second',\n 'secret',\n 'section',\n 'security',\n 'seed',\n 'seek',\n 'segment',\n 'select',\n 'sell',\n 'seminar',\n 'senior',\n 'sense',\n 'sentence',\n 'series',\n 'service',\n 'session',\n 'settle',\n 'setup',\n 'seven',\n 'shadow',\n 'shaft',\n 'shallow',\n 'share',\n 'shed',\n 'shell',\n 'sheriff',\n 'shield',\n 'shift',\n 'shine',\n 'ship',\n 'shiver',\n 'shock',\n 'shoe',\n 'shoot',\n 'shop',\n 'short',\n 'shoulder',\n 'shove',\n 'shrimp',\n 'shrug',\n 'shuffle',\n 'shy',\n 'sibling',\n 'sick',\n 'side',\n 'siege',\n 'sight',\n 'sign',\n 'silent',\n 'silk',\n 'silly',\n 'silver',\n 'similar',\n 'simple',\n 'since',\n 'sing',\n 'siren',\n 'sister',\n 'situate',\n 'six',\n 'size',\n 'skate',\n 'sketch',\n 'ski',\n 'skill',\n 'skin',\n 'skirt',\n 'skull',\n 'slab',\n 'slam',\n 'sleep',\n 'slender',\n 'slice',\n 'slide',\n 'slight',\n 'slim',\n 'slogan',\n 'slot',\n 'slow',\n 'slush',\n 'small',\n 'smart',\n 'smile',\n 'smoke',\n 'smooth',\n 'snack',\n 'snake',\n 'snap',\n 'sniff',\n 'snow',\n 'soap',\n 'soccer',\n 'social',\n 'sock',\n 'soda',\n 'soft',\n 'solar',\n 'soldier',\n 'solid',\n 'solution',\n 'solve',\n 'someone',\n 'song',\n 'soon',\n 'sorry',\n 'sort',\n 'soul',\n 'sound',\n 'soup',\n 'source',\n 'south',\n 'space',\n 'spare',\n 'spatial',\n 'spawn',\n 'speak',\n 'special',\n 'speed',\n 'spell',\n 'spend',\n 'sphere',\n 'spice',\n 'spider',\n 'spike',\n 'spin',\n 'spirit',\n 'split',\n 'spoil',\n 'sponsor',\n 'spoon',\n 'sport',\n 'spot',\n 'spray',\n 'spread',\n 'spring',\n 'spy',\n 'square',\n 'squeeze',\n 'squirrel',\n 'stable',\n 'stadium',\n 'staff',\n 'stage',\n 'stairs',\n 'stamp',\n 'stand',\n 'start',\n 'state',\n 'stay',\n 'steak',\n 'steel',\n 'stem',\n 'step',\n 'stereo',\n 'stick',\n 'still',\n 'sting',\n 'stock',\n 'stomach',\n 'stone',\n 'stool',\n 'story',\n 'stove',\n 'strategy',\n 'street',\n 'strike',\n 'strong',\n 'struggle',\n 'student',\n 'stuff',\n 'stumble',\n 'style',\n 'subject',\n 'submit',\n 'subway',\n 'success',\n 'such',\n 'sudden',\n 'suffer',\n 'sugar',\n 'suggest',\n 'suit',\n 'summer',\n 'sun',\n 'sunny',\n 'sunset',\n 'super',\n 'supply',\n 'supreme',\n 'sure',\n 'surface',\n 'surge',\n 'surprise',\n 'surround',\n 'survey',\n 'suspect',\n 'sustain',\n 'swallow',\n 'swamp',\n 'swap',\n 'swarm',\n 'swear',\n 'sweet',\n 'swift',\n 'swim',\n 'swing',\n 'switch',\n 'sword',\n 'symbol',\n 'symptom',\n 'syrup',\n 'system',\n 'table',\n 'tackle',\n 'tag',\n 'tail',\n 'talent',\n 'talk',\n 'tank',\n 'tape',\n 'target',\n 'task',\n 'taste',\n 'tattoo',\n 'taxi',\n 'teach',\n 'team',\n 'tell',\n 'ten',\n 'tenant',\n 'tennis',\n 'tent',\n 'term',\n 'test',\n 'text',\n 'thank',\n 'that',\n 'theme',\n 'then',\n 'theory',\n 'there',\n 'they',\n 'thing',\n 'this',\n 'thought',\n 'three',\n 'thrive',\n 'throw',\n 'thumb',\n 'thunder',\n 'ticket',\n 'tide',\n 'tiger',\n 'tilt',\n 'timber',\n 'time',\n 'tiny',\n 'tip',\n 'tired',\n 'tissue',\n 'title',\n 'toast',\n 'tobacco',\n 'today',\n 'toddler',\n 'toe',\n 'together',\n 'toilet',\n 'token',\n 'tomato',\n 'tomorrow',\n 'tone',\n 'tongue',\n 'tonight',\n 'tool',\n 'tooth',\n 'top',\n 'topic',\n 'topple',\n 'torch',\n 'tornado',\n 'tortoise',\n 'toss',\n 'total',\n 'tourist',\n 'toward',\n 'tower',\n 'town',\n 'toy',\n 'track',\n 'trade',\n 'traffic',\n 'tragic',\n 'train',\n 'transfer',\n 'trap',\n 'trash',\n 'travel',\n 'tray',\n 'treat',\n 'tree',\n 'trend',\n 'trial',\n 'tribe',\n 'trick',\n 'trigger',\n 'trim',\n 'trip',\n 'trophy',\n 'trouble',\n 'truck',\n 'true',\n 'truly',\n 'trumpet',\n 'trust',\n 'truth',\n 'try',\n 'tube',\n 'tuition',\n 'tumble',\n 'tuna',\n 'tunnel',\n 'turkey',\n 'turn',\n 'turtle',\n 'twelve',\n 'twenty',\n 'twice',\n 'twin',\n 'twist',\n 'two',\n 'type',\n 'typical',\n 'ugly',\n 'umbrella',\n 'unable',\n 'unaware',\n 'uncle',\n 'uncover',\n 'under',\n 'undo',\n 'unfair',\n 'unfold',\n 'unhappy',\n 'uniform',\n 'unique',\n 'unit',\n 'universe',\n 'unknown',\n 'unlock',\n 'until',\n 'unusual',\n 'unveil',\n 'update',\n 'upgrade',\n 'uphold',\n 'upon',\n 'upper',\n 'upset',\n 'urban',\n 'urge',\n 'usage',\n 'use',\n 'used',\n 'useful',\n 'useless',\n 'usual',\n 'utility',\n 'vacant',\n 'vacuum',\n 'vague',\n 'valid',\n 'valley',\n 'valve',\n 'van',\n 'vanish',\n 'vapor',\n 'various',\n 'vast',\n 'vault',\n 'vehicle',\n 'velvet',\n 'vendor',\n 'venture',\n 'venue',\n 'verb',\n 'verify',\n 'version',\n 'very',\n 'vessel',\n 'veteran',\n 'viable',\n 'vibrant',\n 'vicious',\n 'victory',\n 'video',\n 'view',\n 'village',\n 'vintage',\n 'violin',\n 'virtual',\n 'virus',\n 'visa',\n 'visit',\n 'visual',\n 'vital',\n 'vivid',\n 'vocal',\n 'voice',\n 'void',\n 'volcano',\n 'volume',\n 'vote',\n 'voyage',\n 'wage',\n 'wagon',\n 'wait',\n 'walk',\n 'wall',\n 'walnut',\n 'want',\n 'warfare',\n 'warm',\n 'warrior',\n 'wash',\n 'wasp',\n 'waste',\n 'water',\n 'wave',\n 'way',\n 'wealth',\n 'weapon',\n 'wear',\n 'weasel',\n 'weather',\n 'web',\n 'wedding',\n 'weekend',\n 'weird',\n 'welcome',\n 'west',\n 'wet',\n 'whale',\n 'what',\n 'wheat',\n 'wheel',\n 'when',\n 'where',\n 'whip',\n 'whisper',\n 'wide',\n 'width',\n 'wife',\n 'wild',\n 'will',\n 'win',\n 'window',\n 'wine',\n 'wing',\n 'wink',\n 'winner',\n 'winter',\n 'wire',\n 'wisdom',\n 'wise',\n 'wish',\n 'witness',\n 'wolf',\n 'woman',\n 'wonder',\n 'wood',\n 'wool',\n 'word',\n 'work',\n 'world',\n 'worry',\n 'worth',\n 'wrap',\n 'wreck',\n 'wrestle',\n 'wrist',\n 'write',\n 'wrong',\n 'yard',\n 'year',\n 'yellow',\n 'you',\n 'young',\n 'youth',\n 'zebra',\n 'zero',\n 'zone',\n 'zoo'\n]\nwordList.space = ' '\n\nexport { wordList }\n","/**\n * Block\n * =====\n *\n * A block, of course, is a collection of transactions. This class is somewhat\n * incompconste at the moment. In the future, it should support the ability to\n * check to see if a transaction is in a block (thanks to the magic of merkle\n * trees). You will probably never use Yours Bitcoin to create a block, since almost\n * everyone will use bitcoind for that. As such, the primary way to use this is\n * new Block().fromBuffer(buf), which will parse the block and prepare its insides\n * for you to inspect.\n */\n'use strict'\n\nimport { Br } from './br'\nimport { Bw } from './bw'\nimport { BlockHeader } from './block-header'\nimport { Hash } from './hash'\nimport { Merkle } from './merkle'\nimport { Struct } from './struct'\nimport { Tx } from './tx'\nimport { VarInt } from './var-int'\nimport { Workers } from './workers'\n\nclass Block extends Struct {\n constructor (blockHeader, txsVi, txs) {\n super({ blockHeader, txsVi, txs })\n }\n\n fromJSON (json) {\n const txs = []\n json.txs.forEach(function (tx) {\n txs.push(new Tx().fromJSON(tx))\n })\n this.fromObject({\n blockHeader: new BlockHeader().fromJSON(json.blockHeader),\n txsVi: new VarInt().fromJSON(json.txsVi),\n txs: txs\n })\n return this\n }\n\n toJSON () {\n const txs = []\n this.txs.forEach(function (tx) {\n txs.push(tx.toJSON())\n })\n return {\n blockHeader: this.blockHeader.toJSON(),\n txsVi: this.txsVi.toJSON(),\n txs: txs\n }\n }\n\n fromBr (br) {\n this.blockHeader = new BlockHeader().fromBr(br)\n this.txsVi = new VarInt(br.readVarIntBuf())\n const txsNum = this.txsVi.toNumber()\n this.txs = []\n for (let i = 0; i < txsNum; i++) {\n this.txs.push(new Tx().fromBr(br))\n }\n return this\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n bw.write(this.blockHeader.toBuffer())\n bw.write(this.txsVi.buf)\n const txsNum = this.txsVi.toNumber()\n for (let i = 0; i < txsNum; i++) {\n this.txs[i].toBw(bw)\n }\n return bw\n }\n\n hash () {\n return Hash.sha256Sha256(this.blockHeader.toBuffer())\n }\n\n async asyncHash () {\n const workersResult = await Workers.asyncObjectMethod(this, 'hash', [])\n return workersResult.resbuf\n }\n\n id () {\n return new Br(this.hash()).readReverse().toString('hex')\n }\n\n async asyncId () {\n const workersResult = await Workers.asyncObjectMethod(this, 'id', [])\n return JSON.parse(workersResult.resbuf.toString())\n }\n\n verifyMerkleRoot () {\n const txsbufs = this.txs.map(tx => tx.toBuffer())\n const merkleRootBuf = Merkle.fromBuffers(txsbufs).hash()\n return Buffer.compare(merkleRootBuf, this.blockHeader.merkleRootBuf)\n }\n\n /**\n * Sometimes we don't want to parse an entire block into memory. Instead, we\n * simply want to iterate through all transactions in the block. That is what\n * this method is for. This method returns an efficient iterator which can be\n * used in a `for (tx of txs)` construct that returns each tx one at a time\n * without first parsing all of them into memory.\n *\n * @param {Buffer} blockBuf A buffer of a block.\n */\n static iterateTxs (blockBuf) {\n const br = new Br(blockBuf)\n const blockHeader = new BlockHeader().fromBr(br)\n const txsVi = new VarInt(br.readVarIntBuf())\n const txsNum = txsVi.toNumber()\n return {\n blockHeader,\n txsVi,\n txsNum,\n * [Symbol.iterator] () {\n for (let i = 0; i < txsNum; i++) {\n yield new Tx().fromBr(br)\n }\n }\n }\n }\n}\n\nBlock.MAX_BLOCK_SIZE = 1000000\n\nexport { Block }\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","'use strict'\n\nvar hexRegEx = /([0-9]|[a-f])/gim\n\nmodule.exports = function (input) {\n return typeof input === 'string' &&\n (input.match(hexRegEx) || []).length === input.length\n}\n","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\n\nmodule.exports = eos;","/**\n * PubKey Map\n * ==========\n *\n * A map from (transaction hash, output number) to (script chunk index, pubKey).\n * Whening signing a bitcoin transaction, we need to be able to sign an input\n * with the correct key and also we need to know where to put signature when we\n * get it. This mapping allows us to find the key for an associated input (which\n * is identified by tx output hash and number) with which to sign the\n * transaction and then also to know where to insert the signature into the\n * input script. This gets us the public key, and we need a different method to\n * get the private key. That is because we often know the public key to be used\n * but may not have access to the private key until the entire tx is sent to\n * where the private keys are.\n */\n'use strict'\n\nimport { Struct } from './struct'\nimport { Sig } from './sig'\n\nclass SigOperations extends Struct {\n constructor (map = new Map()) {\n super({ map })\n }\n\n toJSON () {\n const json = {}\n this.map.forEach((arr, label) => {\n json[label] = arr.map(obj => ({\n nScriptChunk: obj.nScriptChunk,\n type: obj.type, // 'sig' or 'pubKey'\n addressStr: obj.addressStr,\n nHashType: obj.nHashType,\n log: obj.log\n }))\n })\n return json\n }\n\n fromJSON (json) {\n Object.keys(json).forEach(label => {\n this.map.set(label, json[label].map(obj => ({\n nScriptChunk: obj.nScriptChunk,\n type: obj.type,\n addressStr: obj.addressStr,\n nHashType: obj.nHashType,\n log: obj.log\n })))\n })\n return this\n }\n\n /**\n * Set an address to in the map for use with single-sig.\n *\n * @param {Buffer} txHashBuf The hash of a transsaction. Note that this is\n * *not* the reversed transaction id, but is the raw hash.\n * @param {Number} txOutNum The output number, a.k.a. the \"vout\".\n * @param {Number} nScriptChunk The index of the chunk of the script where\n * we are going to place the signature.\n * @param {String} addressStr The addressStr coresponding to this (txHashBuf,\n * txOutNum, nScriptChunk) where we are going to sign and insert the\n * signature or public key.\n * @param {Number} nHashType Usually = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID\n */\n setOne (txHashBuf, txOutNum, nScriptChunk, type = 'sig', addressStr, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID) {\n const label = txHashBuf.toString('hex') + ':' + txOutNum\n const obj = { nScriptChunk, type, addressStr, nHashType }\n this.map.set(label, [obj])\n return this\n }\n\n /**\n * Set a bunch of addresses for signing an input such as for use with multi-sig.\n *\n * @param {Buffer} txHashBuf The hash of a transsaction. Note that this is\n * *not* the reversed transaction id, but is the raw hash.\n * @param {Number} txOutNum The output number, a.k.a. the \"vout\".\n * @param {Array} arr Must take the form of [{nScriptChunk, type, addressStr, nHashType}, ...]\n */\n setMany (txHashBuf, txOutNum, arr) {\n const label = txHashBuf.toString('hex') + ':' + txOutNum\n arr = arr.map(obj => ({\n type: obj.type || 'sig',\n nHashType: obj.nHashType || Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID,\n ...obj\n }))\n this.map.set(label, arr)\n return this\n }\n\n addOne (txHashBuf, txOutNum, nScriptChunk, type = 'sig', addressStr, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID) {\n const arr = this.get(txHashBuf, txOutNum) || []\n arr.push({\n nScriptChunk,\n type,\n addressStr,\n nHashType\n })\n this.setMany(txHashBuf, txOutNum, arr)\n return this\n }\n\n /**\n * Get an address from the map\n *\n * @param {Buffer} txHashBuf The hash of a transction. Note that this is *not*\n * the reversed transaction id, but is the raw hash.\n * @param {Number} txOutNum The output number, a.k.a. the \"vout\".\n * @param {Number} nScriptChunk The index of the chunk of the script where\n * we are going to place the signature.\n * @returns {PubKey}\n */\n get (txHashBuf, txOutNum) {\n const label = txHashBuf.toString('hex') + ':' + txOutNum\n return this.map.get(label)\n }\n}\n\nexport { SigOperations }\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n for (var j = 0; j < naf.length; j += doubles.step) {\n var nafW = 0;\n for (var k = j + doubles.step - 1; k >= j; k--)\n nafW = (nafW << 1) + naf[k];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (var j = 0; j < repr.length; j++) {\n var nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\n k++;\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n for (var i = 0; i < len; i++) {\n var p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (var i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b] /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3 /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (var j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (var i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (var j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (var j = 0; j < len; j++) {\n var z = tmp[j];\n var p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (var i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type !== 'short')\n throw new Error('invalid curve type')\n this.curve = new curve.short(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve\n });\n return curve;\n }\n });\n}\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3'\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15'\n }\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre\n ]\n});\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nfunction checkBuffer (buf, name) {\n if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n throw new TypeError(name + ' must be a buffer or string')\n }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n checkBuffer(password, 'Password')\n checkBuffer(salt, 'Salt')\n\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (process.browser) {\n defaultEncoding = 'utf-8'\n} else {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n}\nmodule.exports = defaultEncoding\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar Buffer = require('safe-buffer').Buffer\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(password, salt, iterations, keylen)\n\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\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'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n } // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n } // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n } // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\n} // abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\n\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n } // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true; // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0; // Try start flowing on next tick if stream isn't explicitly paused\n\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\n while (state.flowing && stream.read() !== null) {\n ;\n }\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\n}\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n}); // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\n\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n\n return from(Readable, iterable, opts);\n };\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n\n return -1;\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'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","module.exports = require('events').EventEmitter;\n","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n\n return this;\n } // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\n\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\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// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n\n this.sync = true; // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex); // legacy.\n\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er); // this can emit finish, and it will always happen\n // after error\n\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\n\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\n\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\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'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\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// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,\n 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,\n 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,\n 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,\n 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,\n 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,\n 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,\n 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,\n 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,\n 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,\n 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,\n 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,\n 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,\n 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,\n 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,\n 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2\n]\n\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\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\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\n","/**\n * Bip32: HD Wallets\n * =================\n *\n * Bip32 is hierarchical deterministic wallets. The standard way to use this is:\n * const bip32 = new Bip32().fromRandom()\n * const bip32 = new Bip32().fromSeed(buf)\n * const bip32 = new Bip32().fromString(string)\n * const xprv = bip32.toString()\n * const xpub = bip32.toPublic().toString()\n *\n * This code was originally copied from here:\n *\n * https://github.com/sarchar/brainwallet.github.com\n *\n * It has faced mostly cosmetic alterations since it was copied.\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Bw } from './bw'\nimport { Base58Check } from './base-58-check'\nimport { Constants } from './constants'\nimport { Hash } from './hash'\nimport { Point } from './point'\nimport { PrivKey as PrivKeyClass } from './priv-key'\nimport { PubKey } from './pub-key'\nimport { Random } from './random'\nimport { Struct } from './struct'\nimport { Workers } from './workers'\n\nclass Bip32 extends Struct {\n constructor (\n versionBytesNum,\n depth,\n parentFingerPrint,\n childIndex,\n chainCode,\n privKey,\n pubKey,\n constants = null,\n PrivKey = PrivKeyClass\n ) {\n super({\n versionBytesNum,\n depth,\n parentFingerPrint,\n childIndex,\n chainCode,\n privKey,\n pubKey\n })\n constants = constants || Constants.Default.Bip32\n this.Constants = constants\n this.PrivKey = PrivKey\n }\n\n fromRandom () {\n this.versionBytesNum = this.Constants.privKey\n this.depth = 0x00\n this.parentFingerPrint = Buffer.from([0, 0, 0, 0])\n this.childIndex = 0\n this.chainCode = Random.getRandomBuffer(32)\n this.privKey = new this.PrivKey().fromRandom()\n this.pubKey = new PubKey().fromPrivKey(this.privKey)\n return this\n }\n\n static fromRandom () {\n return new this().fromRandom()\n }\n\n fromString (str) {\n return this.fromBuffer(Base58Check.decode(str))\n }\n\n /**\n * Use workers to convert a bip32 string into a bip32 object without\n * blocking.\n */\n async asyncFromString (str) {\n const args = [str]\n const workersResult = await Workers.asyncObjectMethod(\n this,\n 'fromString',\n args\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n fromSeed (bytes) {\n if (!Buffer.isBuffer(bytes)) {\n throw new Error('bytes must be a buffer')\n }\n if (bytes.length < 128 / 8) {\n throw new Error('Need more than 128 bits of entropy')\n }\n if (bytes.length > 512 / 8) {\n throw new Error('More than 512 bits of entropy is nonstandard')\n }\n const hash = Hash.sha512Hmac(bytes, Buffer.from('Bitcoin seed'))\n\n this.depth = 0x00\n this.parentFingerPrint = Buffer.from([0, 0, 0, 0])\n this.childIndex = 0\n this.chainCode = hash.slice(32, 64)\n this.versionBytesNum = this.Constants.privKey\n this.privKey = new this.PrivKey().fromBn(Bn().fromBuffer(hash.slice(0, 32)))\n this.pubKey = new PubKey().fromPrivKey(this.privKey)\n\n return this\n }\n\n static fromSeed (bytes) {\n return new this().fromSeed(bytes)\n }\n\n async asyncFromSeed (bytes) {\n const workersResult = await Workers.asyncObjectMethod(this, 'fromSeed', [\n bytes\n ])\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromSeed (bytes) {\n return new this().asyncFromSeed(bytes)\n }\n\n fromBuffer (buf) {\n // Both pub and private extended keys are 78 buf\n if (buf.length !== 78) {\n throw new Error('incorrect bip32 data length')\n }\n\n this.versionBytesNum = buf.slice(0, 4).readUInt32BE(0)\n this.depth = buf.slice(4, 5).readUInt8(0)\n this.parentFingerPrint = buf.slice(5, 9)\n this.childIndex = buf.slice(9, 13).readUInt32BE(0)\n this.chainCode = buf.slice(13, 45)\n const keyBytes = buf.slice(45, 78)\n\n const isPrivate = this.versionBytesNum === this.Constants.privKey\n const isPublic = this.versionBytesNum === this.Constants.pubKey\n\n if (isPrivate && keyBytes[0] === 0) {\n this.privKey = new this.PrivKey().fromBn(\n Bn().fromBuffer(keyBytes.slice(1, 33))\n )\n this.pubKey = new PubKey().fromPrivKey(this.privKey)\n } else if (isPublic && (keyBytes[0] === 0x02 || keyBytes[0] === 0x03)) {\n this.pubKey = new PubKey().fromDer(keyBytes)\n } else {\n throw new Error('Invalid key')\n }\n\n return this\n }\n\n /**\n * This is a faster version of .fromBuffer that reads in the output from\n * .toFastBuffer rather than from .toBuffer. .toFastBuffer outputs almost the\n * same thing as .toBuffer, except the public key is uncompressed. That makes\n * it larger, but also means that point multiplication doesn't have to be\n * used to derive the y value. So reading it in is faster. The only thing we\n * have to do is explicitely set the \"compressed\" value of public key to true\n * after reading it in. That is because although .toFastBuffer and\n * .fromFastBuffer transmit the public key in uncompressed form, we want it\n * to be set to compressed when stored in memory.\n */\n fromFastBuffer (buf) {\n if (buf.length === 0) {\n return this\n }\n if (buf.length !== 78 && buf.length !== 78 + 33) {\n throw new Error('incorrect bip32 fastBuffer data length: ' + buf.length)\n }\n\n this.versionBytesNum = buf.slice(0, 4).readUInt32BE(0)\n this.depth = buf.slice(4, 5).readUInt8(0)\n this.parentFingerPrint = buf.slice(5, 9)\n this.childIndex = buf.slice(9, 13).readUInt32BE(0)\n this.chainCode = buf.slice(13, 45)\n\n const keyBytes = buf.slice(45, buf.length)\n\n const isPrivate = this.versionBytesNum === this.Constants.privKey\n const isPublic = this.versionBytesNum === this.Constants.pubKey\n\n if (isPrivate && keyBytes[0] === 0 && buf.length === 78) {\n this.privKey = new this.PrivKey().fromBn(\n Bn().fromBuffer(keyBytes.slice(1, 33))\n )\n this.pubKey = new PubKey().fromPrivKey(this.privKey)\n } else if (isPublic && buf.length === 78 + 33) {\n this.pubKey = new PubKey().fromFastBuffer(keyBytes)\n this.pubKey.compressed = true\n } else {\n throw new Error('Invalid key')\n }\n\n return this\n }\n\n derive (path) {\n const e = path.split('/')\n\n if (path === 'm') {\n return this\n }\n\n let bip32 = this\n for (const i in e) {\n const c = e[i]\n\n if (i === '0') {\n if (c !== 'm') throw new Error('invalid path')\n continue\n }\n\n if (\n parseInt(c.replace(\"'\", ''), 10).toString() !== c.replace(\"'\", '')\n ) {\n throw new Error('invalid path')\n }\n\n const usePrivate = c.length > 1 && c[c.length - 1] === \"'\"\n let childIndex =\n parseInt(usePrivate ? c.slice(0, c.length - 1) : c, 10) & 0x7fffffff\n\n if (usePrivate) {\n childIndex += 0x80000000\n }\n\n bip32 = bip32.deriveChild(childIndex)\n }\n\n return bip32\n }\n\n async asyncDerive (path) {\n const workersResult = await Workers.asyncObjectMethod(this, 'derive', [\n path\n ])\n return new this.constructor().fromFastBuffer(workersResult.resbuf)\n }\n\n deriveChild (i) {\n if (typeof i !== 'number') {\n throw new Error('i must be a number')\n }\n\n let ib = []\n ib.push((i >> 24) & 0xff)\n ib.push((i >> 16) & 0xff)\n ib.push((i >> 8) & 0xff)\n ib.push(i & 0xff)\n ib = Buffer.from(ib)\n\n const usePrivate = (i & 0x80000000) !== 0\n\n const isPrivate = this.versionBytesNum === this.Constants.privKey\n\n if (usePrivate && (!this.privKey || !isPrivate)) {\n throw new Error('Cannot do private key derivation without private key')\n }\n\n let ret = null\n if (this.privKey) {\n let data = null\n\n if (usePrivate) {\n data = Buffer.concat([\n Buffer.from([0]),\n this.privKey.bn.toBuffer({ size: 32 }),\n ib\n ])\n } else {\n data = Buffer.concat([this.pubKey.toBuffer({ size: 32 }), ib])\n }\n\n const hash = Hash.sha512Hmac(data, this.chainCode)\n const il = Bn().fromBuffer(hash.slice(0, 32), { size: 32 })\n const ir = hash.slice(32, 64)\n\n // ki = IL + kpar (mod n).\n const k = il.add(this.privKey.bn).mod(Point.getN())\n\n ret = new this.constructor()\n ret.chainCode = ir\n\n ret.privKey = new this.PrivKey().fromBn(k)\n ret.pubKey = new PubKey().fromPrivKey(ret.privKey)\n } else {\n const data = Buffer.concat([this.pubKey.toBuffer(), ib])\n const hash = Hash.sha512Hmac(data, this.chainCode)\n const il = Bn().fromBuffer(hash.slice(0, 32))\n const ir = hash.slice(32, 64)\n\n // Ki = (IL + kpar)*G = IL*G + Kpar\n const ilG = Point.getG().mul(il)\n const Kpar = this.pubKey.point\n const Ki = ilG.add(Kpar)\n const newpub = new PubKey()\n newpub.point = Ki\n\n ret = new this.constructor()\n ret.chainCode = ir\n\n ret.pubKey = newpub\n }\n\n ret.childIndex = i\n const pubKeyhash = Hash.sha256Ripemd160(this.pubKey.toBuffer())\n ret.parentFingerPrint = pubKeyhash.slice(0, 4)\n ret.versionBytesNum = this.versionBytesNum\n ret.depth = this.depth + 1\n\n return ret\n }\n\n toPublic () {\n const bip32 = new this.constructor().fromObject(this)\n bip32.versionBytesNum = this.Constants.pubKey\n bip32.privKey = undefined\n return bip32\n }\n\n toBuffer () {\n const isPrivate = this.versionBytesNum === this.Constants.privKey\n const isPublic = this.versionBytesNum === this.Constants.pubKey\n if (isPrivate) {\n return new Bw()\n .writeUInt32BE(this.versionBytesNum)\n .writeUInt8(this.depth)\n .write(this.parentFingerPrint)\n .writeUInt32BE(this.childIndex)\n .write(this.chainCode)\n .writeUInt8(0)\n .write(this.privKey.bn.toBuffer({ size: 32 }))\n .toBuffer()\n } else if (isPublic) {\n if (this.pubKey.compressed === false) {\n throw new Error(\n 'cannot convert bip32 to buffer if pubKey is not compressed'\n )\n }\n return new Bw()\n .writeUInt32BE(this.versionBytesNum)\n .writeUInt8(this.depth)\n .write(this.parentFingerPrint)\n .writeUInt32BE(this.childIndex)\n .write(this.chainCode)\n .write(this.pubKey.toBuffer())\n .toBuffer()\n } else {\n throw new Error('bip32: invalid versionBytesNum byte')\n }\n }\n\n /**\n * This is the \"fast\" analog of toBuffer. It is almost the same as toBuffer,\n * and in fact is actually not any faster. The only difference is that it\n * adds an uncompressed rather than compressed public key to the output. This\n * is so that .fromFastBufer can read in the public key without having to do\n * fancy, slow point multiplication to derive the y value of the public key.\n * Thus, although .toFastBuffer is not any faster, .fromFastBuffer is faster.\n */\n toFastBuffer () {\n if (!this.versionBytesNum) {\n return Buffer.alloc(0)\n }\n const isPrivate = this.versionBytesNum === this.Constants.privKey\n const isPublic = this.versionBytesNum === this.Constants.pubKey\n if (isPrivate) {\n return new Bw()\n .writeUInt32BE(this.versionBytesNum)\n .writeUInt8(this.depth)\n .write(this.parentFingerPrint)\n .writeUInt32BE(this.childIndex)\n .write(this.chainCode)\n .writeUInt8(0)\n .write(this.privKey.bn.toBuffer({ size: 32 }))\n .toBuffer()\n } else if (isPublic) {\n return new Bw()\n .writeUInt32BE(this.versionBytesNum)\n .writeUInt8(this.depth)\n .write(this.parentFingerPrint)\n .writeUInt32BE(this.childIndex)\n .write(this.chainCode)\n .write(this.pubKey.toFastBuffer())\n .toBuffer()\n } else {\n throw new Error('bip32: invalid versionBytesNum byte')\n }\n }\n\n toString () {\n return Base58Check.encode(this.toBuffer())\n }\n\n /**\n * Use workers to convert a bip32 object into a bip32 string without\n * blocking.\n */\n async asyncToString () {\n const workersResult = await Workers.asyncObjectMethod(this, 'toString', [])\n return JSON.parse(workersResult.resbuf.toString())\n }\n\n toJSON () {\n return this.toFastHex()\n }\n\n fromJSON (json) {\n return this.fromFastHex(json)\n }\n\n isPrivate () {\n return this.versionBytesNum === this.Constants.privKey\n }\n}\n\nBip32.Mainnet = class extends Bip32 {\n constructor (\n versionBytesNum,\n depth,\n parentFingerPrint,\n childIndex,\n chainCode,\n privKey,\n pubKey\n ) {\n super(\n versionBytesNum,\n depth,\n parentFingerPrint,\n childIndex,\n chainCode,\n privKey,\n pubKey,\n Constants.Mainnet.Bip32,\n PrivKeyClass.Mainnet\n )\n }\n}\n\nBip32.Testnet = class extends Bip32 {\n constructor (\n versionBytesNum,\n depth,\n parentFingerPrint,\n childIndex,\n chainCode,\n privKey,\n pubKey\n ) {\n super(\n versionBytesNum,\n depth,\n parentFingerPrint,\n childIndex,\n chainCode,\n privKey,\n pubKey,\n Constants.Testnet.Bip32,\n PrivKeyClass.Testnet\n )\n }\n}\n\nexport { Bip32 }\n","/**\n * Bip39: Mnemonic Seeds\n * =====================\n *\n * Bip39 is a way to turn random entropy into a mnemonic (a string of words\n * from a wordlist), and then that mnemonic into a seed. The seed can then be\n * used in Bip32 to derive hierarchical deterministic keys. It does not go the\n * other way around (i.e., you cannot turn a seed into a mnemonic). The usual\n * way to use it is either to generate a new one, like this:\n *\n * const mnemonic = new Bip39().fromRandom().toString()\n *\n * or from a known mnemonic:\n *\n * const seed = new Bip39().fromString(mnemonic).toSeed()\n */\n'use strict'\n\nimport { Bw } from './bw'\nimport { Hash } from './hash'\nimport pbkdf2 from 'pbkdf2'\nimport { Random } from './random'\nimport { Struct } from './struct'\nimport { wordList } from './bip-39-en-wordlist'\nimport { Workers } from './workers'\n\nclass Bip39 extends Struct {\n constructor (mnemonic, seed, wordlist = wordList) {\n super({ mnemonic, seed })\n this.Wordlist = wordlist\n }\n\n toBw (bw) {\n if (!bw) {\n bw = new Bw()\n }\n if (this.mnemonic) {\n const buf = Buffer.from(this.mnemonic)\n bw.writeVarIntNum(buf.length)\n bw.write(buf)\n } else {\n bw.writeVarIntNum(0)\n }\n if (this.seed) {\n bw.writeVarIntNum(this.seed.length)\n bw.write(this.seed)\n } else {\n bw.writeVarIntNum(0)\n }\n return bw\n }\n\n fromBr (br) {\n const mnemoniclen = br.readVarIntNum()\n if (mnemoniclen > 0) {\n this.mnemonic = br.read(mnemoniclen).toString()\n }\n const seedlen = br.readVarIntNum()\n if (seedlen > 0) {\n this.seed = br.read(seedlen)\n }\n return this\n }\n\n /**\n * Generate a random new mnemonic from the wordlist.\n */\n fromRandom (bits) {\n if (!bits) {\n bits = 128\n }\n if (bits % 32 !== 0) {\n throw new Error('bits must be multiple of 32')\n }\n if (bits < 128) {\n throw new Error('bits must be at least 128')\n }\n const buf = Random.getRandomBuffer(bits / 8)\n this.entropy2Mnemonic(buf)\n this.mnemonic2Seed()\n return this\n }\n\n static fromRandom (bits) {\n return new this().fromRandom(bits)\n }\n\n async asyncFromRandom (bits) {\n if (!bits) {\n bits = 128\n }\n const buf = Random.getRandomBuffer(bits / 8)\n let workersResult = await Workers.asyncObjectMethod(\n this,\n 'entropy2Mnemonic',\n [buf]\n )\n const bip39 = new Bip39().fromFastBuffer(workersResult.resbuf)\n workersResult = await Workers.asyncObjectMethod(\n bip39,\n 'mnemonic2Seed',\n []\n )\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromRandom (bits) {\n return new this().asyncFromRandom(bits)\n }\n\n fromEntropy (buf) {\n this.entropy2Mnemonic(buf)\n return this\n }\n\n static fromEntropy (buf) {\n return new this().fromEntropy(buf)\n }\n\n async asyncFromEntropy (buf) {\n const workersResult = await Workers.asyncObjectMethod(this, 'fromEntropy', [\n buf\n ])\n return this.fromFastBuffer(workersResult.resbuf)\n }\n\n static asyncFromEntropy (buf) {\n return new this().asyncFromEntropy(buf)\n }\n\n fromString (mnemonic) {\n this.mnemonic = mnemonic\n return this\n }\n\n toString () {\n return this.mnemonic\n }\n\n toSeed (passphrase) {\n this.mnemonic2Seed(passphrase)\n return this.seed\n }\n\n async asyncToSeed (passphrase) {\n if (passphrase === undefined) {\n passphrase = ''\n }\n const args = [passphrase]\n const workersResult = await Workers.asyncObjectMethod(this, 'toSeed', args)\n return workersResult.resbuf\n }\n\n /**\n * Generate a new mnemonic from some entropy generated somewhere else. The\n * entropy must be at least 128 bits.\n */\n entropy2Mnemonic (buf) {\n if (!Buffer.isBuffer(buf) || buf.length < 128 / 8) {\n throw new Error(\n 'Entropy is less than 128 bits. It must be 128 bits or more.'\n )\n }\n\n const hash = Hash.sha256(buf)\n let bin = ''\n const bits = buf.length * 8\n for (let i = 0; i < buf.length; i++) {\n bin = bin + ('00000000' + buf[i].toString(2)).slice(-8)\n }\n let hashbits = hash[0].toString(2)\n hashbits = ('00000000' + hashbits).slice(-8).slice(0, bits / 32)\n bin = bin + hashbits\n\n if (bin.length % 11 !== 0) {\n throw new Error(\n 'internal error - entropy not an even multiple of 11 bits - ' +\n bin.length\n )\n }\n\n let mnemonic = ''\n for (let i = 0; i < bin.length / 11; i++) {\n if (mnemonic !== '') {\n mnemonic = mnemonic + this.Wordlist.space\n }\n const wi = parseInt(bin.slice(i * 11, (i + 1) * 11), 2)\n mnemonic = mnemonic + this.Wordlist[wi]\n }\n\n this.mnemonic = mnemonic\n return this\n }\n\n /**\n * Check that a mnemonic is valid. This means there should be no superfluous\n * whitespace, no invalid words, and the checksum should match.\n */\n check () {\n const mnemonic = this.mnemonic\n\n // confirm no invalid words\n const words = mnemonic.split(this.Wordlist.space)\n let bin = ''\n for (let i = 0; i < words.length; i++) {\n const ind = this.Wordlist.indexOf(words[i])\n if (ind < 0) {\n return false\n }\n bin = bin + ('00000000000' + ind.toString(2)).slice(-11)\n }\n\n if (bin.length % 11 !== 0) {\n throw new Error(\n 'internal error - entropy not an even multiple of 11 bits - ' +\n bin.length\n )\n }\n\n // confirm checksum\n const cs = bin.length / 33\n const hashBits = bin.slice(-cs)\n const nonhashBits = bin.slice(0, bin.length - cs)\n const buf = Buffer.alloc(nonhashBits.length / 8)\n for (let i = 0; i < nonhashBits.length / 8; i++) {\n buf.writeUInt8(parseInt(bin.slice(i * 8, (i + 1) * 8), 2), i)\n }\n const hash = Hash.sha256(buf)\n let expectedHashBits = hash[0].toString(2)\n expectedHashBits = ('00000000' + expectedHashBits).slice(-8).slice(0, cs)\n\n return expectedHashBits === hashBits\n }\n\n /**\n * Convert a mnemonic to a seed. Does not check for validity of the mnemonic -\n * for that, you should manually run check() first.\n */\n mnemonic2Seed (passphrase = '') {\n let mnemonic = this.mnemonic\n if (!this.check()) {\n throw new Error(\n 'Mnemonic does not pass the check - was the mnemonic typed incorrectly? Are there extra spaces?'\n )\n }\n if (typeof passphrase !== 'string') {\n throw new Error('passphrase must be a string or undefined')\n }\n mnemonic = mnemonic.normalize('NFKD')\n passphrase = passphrase.normalize('NFKD')\n const mbuf = Buffer.from(mnemonic)\n const pbuf = Buffer.concat([\n Buffer.from('mnemonic'),\n Buffer.from(passphrase)\n ])\n this.seed = pbkdf2.pbkdf2Sync(mbuf, pbuf, 2048, 64, 'sha512')\n return this\n }\n\n isValid (passphrase = '') {\n let isValid\n try {\n isValid = !!this.mnemonic2Seed(passphrase)\n } catch (err) {\n isValid = false\n }\n return isValid\n }\n\n static isValid (mnemonic, passphrase = '') {\n return new Bip39(mnemonic).isValid(passphrase)\n }\n}\n\nexport { Bip39 }\n","/**\n * Bitcoin Signed Message\n * ======================\n *\n * \"Bitcoin Signed Message\" just refers to a standard way of signing and\n * verifying an arbitrary message. The standard way to do this involves using a\n * \"Bitcoin Signed Message:\\n\" prefix, which this code does. You are probably\n * interested in the static Bsm.sign( ... ) and Bsm.verify( ... ) functions,\n * which deal with a base64 string representing the compressed format of a\n * signature.\n */\n'use strict'\n\nimport { Address } from './address'\nimport { Bw } from './bw'\nimport { cmp } from './cmp'\nimport { Ecdsa } from './ecdsa'\nimport { Hash } from './hash'\nimport { KeyPair } from './key-pair'\nimport { Sig } from './sig'\nimport { Struct } from './struct'\nimport { Workers } from './workers'\n\nclass Bsm extends Struct {\n constructor (messageBuf, keyPair, sig, address, verified) {\n super({ messageBuf, keyPair, sig, address, verified })\n }\n\n static magicHash (messageBuf) {\n if (!Buffer.isBuffer(messageBuf)) {\n throw new Error('messageBuf must be a buffer')\n }\n const bw = new Bw()\n bw.writeVarIntNum(Bsm.magicBytes.length)\n bw.write(Bsm.magicBytes)\n bw.writeVarIntNum(messageBuf.length)\n bw.write(messageBuf)\n const buf = bw.toBuffer()\n\n const hashBuf = Hash.sha256Sha256(buf)\n\n return hashBuf\n }\n\n static async asyncMagicHash (messageBuf) {\n const args = [messageBuf]\n const workersResult = await Workers.asyncClassMethod(Bsm, 'magicHash', args)\n return workersResult.resbuf\n }\n\n static sign (messageBuf, keyPair) {\n const m = new Bsm(messageBuf, keyPair)\n m.sign()\n const sigbuf = m.sig.toCompact()\n const sigstr = sigbuf.toString('base64')\n return sigstr\n }\n\n static async asyncSign (messageBuf, keyPair) {\n const args = [messageBuf, keyPair]\n const workersResult = await Workers.asyncClassMethod(Bsm, 'sign', args)\n const sigstr = JSON.parse(workersResult.resbuf.toString())\n return sigstr\n }\n\n static verify (messageBuf, sigstr, address) {\n const sigbuf = Buffer.from(sigstr, 'base64')\n const message = new Bsm()\n message.messageBuf = messageBuf\n message.sig = new Sig().fromCompact(sigbuf)\n message.address = address\n\n return message.verify().verified\n }\n\n static async asyncVerify (messageBuf, sigstr, address) {\n const args = [messageBuf, sigstr, address]\n const workersResult = await Workers.asyncClassMethod(Bsm, 'verify', args)\n const res = JSON.parse(workersResult.resbuf.toString())\n return res\n }\n\n sign () {\n const hashBuf = Bsm.magicHash(this.messageBuf)\n const ecdsa = new Ecdsa().fromObject({\n hashBuf: hashBuf,\n keyPair: this.keyPair\n })\n ecdsa.sign()\n ecdsa.calcrecovery()\n this.sig = ecdsa.sig\n return this\n }\n\n verify () {\n const hashBuf = Bsm.magicHash(this.messageBuf)\n\n const ecdsa = new Ecdsa()\n ecdsa.hashBuf = hashBuf\n ecdsa.sig = this.sig\n ecdsa.keyPair = new KeyPair()\n ecdsa.keyPair.pubKey = ecdsa.sig2PubKey()\n\n if (!ecdsa.verify()) {\n this.verified = false\n return this\n }\n\n const address = new Address().fromPubKey(\n ecdsa.keyPair.pubKey,\n undefined,\n this.sig.compressed\n )\n // TODO: what if livenet/testnet mismatch?\n if (cmp(address.hashBuf, this.address.hashBuf)) {\n this.verified = true\n } else {\n this.verified = false\n }\n\n return this\n }\n}\n\nBsm.magicBytes = Buffer.from('Bitcoin Signed Message:\\n')\n\nexport { Bsm }\n","/**\n * Transaction Builder\n * ===================\n */\n'use strict'\n\nimport { Address } from './address'\nimport { Constants as Cst } from './constants'\nimport { Bn } from './bn'\nimport { HashCache } from './hash-cache'\nimport { Script } from './script'\nimport { SigOperations } from './sig-operations'\nimport { Sig } from './sig'\nimport { Struct } from './struct'\nimport { Tx } from './tx'\nimport { TxIn } from './tx-in'\nimport { TxOut } from './tx-out'\nimport { TxOutMap } from './tx-out-map'\nimport { VarInt } from './var-int'\n\nconst Constants = Cst.Default.TxBuilder\n\nclass TxBuilder extends Struct {\n constructor (\n tx = new Tx(),\n txIns = [],\n txOuts = [],\n uTxOutMap = new TxOutMap(),\n sigOperations = new SigOperations(),\n changeScript,\n changeAmountBn,\n feeAmountBn,\n feePerKbNum = Constants.feePerKbNum,\n nLockTime = 0,\n versionBytesNum = 1,\n sigsPerInput = 1,\n dust = Constants.dust,\n dustChangeToFees = false,\n hashCache = new HashCache()\n ) {\n super({\n tx,\n txIns,\n txOuts,\n uTxOutMap,\n sigOperations,\n changeScript,\n changeAmountBn,\n feeAmountBn,\n feePerKbNum,\n nLockTime,\n versionBytesNum,\n sigsPerInput,\n dust,\n dustChangeToFees,\n hashCache\n })\n }\n\n toJSON () {\n const json = {}\n json.tx = this.tx.toHex()\n json.txIns = this.txIns.map(txIn => txIn.toHex())\n json.txOuts = this.txOuts.map(txOut => txOut.toHex())\n json.uTxOutMap = this.uTxOutMap.toJSON()\n json.sigOperations = this.sigOperations.toJSON()\n json.changeScript = this.changeScript ? this.changeScript.toHex() : undefined\n json.changeAmountBn = this.changeAmountBn ? this.changeAmountBn.toNumber() : undefined\n json.feeAmountBn = this.feeAmountBn ? this.feeAmountBn.toNumber() : undefined\n json.feePerKbNum = this.feePerKbNum\n json.sigsPerInput = this.sigsPerInput\n json.dust = this.dust\n json.dustChangeToFees = this.dustChangeToFees\n json.hashCache = this.hashCache.toJSON()\n return json\n }\n\n fromJSON (json) {\n this.tx = new Tx().fromHex(json.tx)\n this.txIns = json.txIns.map(txIn => TxIn.fromHex(txIn))\n this.txOuts = json.txOuts.map(txOut => TxOut.fromHex(txOut))\n this.uTxOutMap = new TxOutMap().fromJSON(json.uTxOutMap)\n this.sigOperations = new SigOperations().fromJSON(json.sigOperations)\n this.changeScript = json.changeScript ? new Script().fromHex(json.changeScript) : undefined\n this.changeAmountBn = json.changeAmountBn ? new Bn(json.changeAmountBn) : undefined\n this.feeAmountBn = json.feeAmountBn ? new Bn(json.feeAmountBn) : undefined\n this.feePerKbNum = json.feePerKbNum || this.feePerKbNum\n this.sigsPerInput = json.sigsPerInput || this.sigsPerInput\n this.dust = json.dust || this.dust\n this.dustChangeToFees =\n json.dustChangeToFees || this.dustChangeToFees\n this.hashCache = HashCache.fromJSON(json.hashCache)\n return this\n }\n\n setFeePerKbNum (feePerKbNum) {\n if (typeof feePerKbNum !== 'number' || feePerKbNum <= 0) {\n throw new Error('cannot set a fee of zero or less')\n }\n this.feePerKbNum = feePerKbNum\n return this\n }\n\n setChangeAddress (changeAddress) {\n this.changeScript = changeAddress.toTxOutScript()\n return this\n }\n\n setChangeScript (changeScript) {\n this.changeScript = changeScript\n return this\n }\n\n /**\n * nLockTime is an unsigned integer.\n */\n setNLocktime (nLockTime) {\n this.nLockTime = nLockTime\n return this\n }\n\n setVersion (versionBytesNum) {\n this.versionBytesNum = versionBytesNum\n return this\n }\n\n /**\n * Sometimes one of your outputs or the change output will be less than\n * dust. Values less than dust cannot be broadcast. If you are OK with\n * sending dust amounts to fees, then set this value to true.\n */\n setDust (dust = Constants.dust) {\n this.dust = dust\n return this\n }\n\n /**\n * Sometimes one of your outputs or the change output will be less than\n * dust. Values less than dust cannot be broadcast. If you are OK with\n * sending dust amounts to fees, then set this value to true. We\n * preferentially send all dust to the change if possible. However, that\n * might not be possible if the change itself is less than dust, in which\n * case all dust goes to fees.\n */\n sendDustChangeToFees (dustChangeToFees = false) {\n this.dustChangeToFees = dustChangeToFees\n return this\n }\n\n /**\n * Import a transaction partially signed by someone else. The only thing you\n * can do after this is sign one or more inputs. Usually used for multisig\n * transactions. uTxOutMap is optional. It is not necessary so long as you\n * pass in the txOut when you sign. You need to know the output when signing\n * an input, including the script in the output, which is why this is\n * necessary when signing an input.\n */\n importPartiallySignedTx (tx, uTxOutMap = this.uTxOutMap, sigOperations = this.sigOperations) {\n this.tx = tx\n this.uTxOutMap = uTxOutMap\n this.sigOperations = sigOperations\n return this\n }\n\n /**\n * Pay \"from\" a script - in other words, add an input to the transaction.\n */\n inputFromScript (txHashBuf, txOutNum, txOut, script, nSequence) {\n if (\n !Buffer.isBuffer(txHashBuf) ||\n !(typeof txOutNum === 'number') ||\n !(txOut instanceof TxOut) ||\n !(script instanceof Script)\n ) {\n throw new Error('invalid one of: txHashBuf, txOutNum, txOut, script')\n }\n this.txIns.push(\n TxIn.fromProperties(txHashBuf, txOutNum, script, nSequence)\n )\n this.uTxOutMap.set(txHashBuf, txOutNum, txOut)\n return this\n }\n\n addSigOperation (txHashBuf, txOutNum, nScriptChunk, type, addressStr, nHashType) {\n this.sigOperations.addOne(txHashBuf, txOutNum, nScriptChunk, type, addressStr, nHashType)\n return this\n }\n\n /**\n * Pay \"from\" a pubKeyHash output - in other words, add an input to the\n * transaction.\n */\n inputFromPubKeyHash (txHashBuf, txOutNum, txOut, pubKey, nSequence, nHashType) {\n if (\n !Buffer.isBuffer(txHashBuf) ||\n typeof txOutNum !== 'number' ||\n !(txOut instanceof TxOut)\n ) {\n throw new Error('invalid one of: txHashBuf, txOutNum, txOut')\n }\n this.txIns.push(\n new TxIn()\n .fromObject({ nSequence })\n .fromPubKeyHashTxOut(txHashBuf, txOutNum, txOut, pubKey)\n )\n this.uTxOutMap.set(txHashBuf, txOutNum, txOut)\n const addressStr = Address.fromTxOutScript(txOut.script).toString()\n this.addSigOperation(txHashBuf, txOutNum, 0, 'sig', addressStr, nHashType)\n this.addSigOperation(txHashBuf, txOutNum, 1, 'pubKey', addressStr)\n return this\n }\n\n /**\n * An address to send funds to, along with the amount. The amount should be\n * denominated in satoshis, not bitcoins.\n */\n outputToAddress (valueBn, addr) {\n if (!(addr instanceof Address) || !(valueBn instanceof Bn)) {\n throw new Error('addr must be an Address, and valueBn must be a Bn')\n }\n const script = new Script().fromPubKeyHash(addr.hashBuf)\n this.outputToScript(valueBn, script)\n return this\n }\n\n /**\n * A script to send funds to, along with the amount. The amount should be\n * denominated in satoshis, not bitcoins.\n */\n outputToScript (valueBn, script) {\n if (!(script instanceof Script) || !(valueBn instanceof Bn)) {\n throw new Error('script must be a Script, and valueBn must be a Bn')\n }\n const txOut = TxOut.fromProperties(valueBn, script)\n this.txOuts.push(txOut)\n return this\n }\n\n buildOutputs () {\n let outAmountBn = new Bn(0)\n this.txOuts.forEach(txOut => {\n if (txOut.valueBn.lt(this.dust) && !txOut.script.isOpReturn() && !txOut.script.isSafeDataOut()) {\n throw new Error('cannot create output lesser than dust')\n }\n outAmountBn = outAmountBn.add(txOut.valueBn)\n this.tx.addTxOut(txOut)\n })\n return outAmountBn\n }\n\n buildInputs (outAmountBn, extraInputsNum = 0) {\n let inAmountBn = new Bn(0)\n for (const txIn of this.txIns) {\n const txOut = this.uTxOutMap.get(txIn.txHashBuf, txIn.txOutNum)\n inAmountBn = inAmountBn.add(txOut.valueBn)\n this.tx.addTxIn(txIn)\n if (inAmountBn.geq(outAmountBn)) {\n if (extraInputsNum <= 0) {\n break\n }\n extraInputsNum--\n }\n }\n if (inAmountBn.lt(outAmountBn)) {\n throw new Error(\n 'not enough funds for outputs: inAmountBn ' +\n inAmountBn.toNumber() +\n ' outAmountBn ' +\n outAmountBn.toNumber()\n )\n }\n return inAmountBn\n }\n\n // Thanks to SigOperations, if those are accurately used, then we can\n // accurately estimate what the size of the transaction is going to be once\n // all the signatures and public keys are inserted.\n estimateSize () {\n // largest possible sig size. final 1 is for pushdata at start. second to\n // final is sighash byte. the rest are DER encoding.\n const sigSize = 1 + 1 + 1 + 1 + 32 + 1 + 1 + 32 + 1 + 1\n // length of script, y odd, x value - assumes compressed public key\n const pubKeySize = 1 + 1 + 33\n\n let size = this.tx.toBuffer().length\n\n this.tx.txIns.forEach((txIn) => {\n const { txHashBuf, txOutNum } = txIn\n const sigOperations = this.sigOperations.get(txHashBuf, txOutNum)\n sigOperations.forEach((obj) => {\n const { nScriptChunk, type } = obj\n const script = new Script([txIn.script.chunks[nScriptChunk]])\n const scriptSize = script.toBuffer().length\n size -= scriptSize\n if (type === 'sig') {\n size += sigSize\n } else if (obj.type === 'pubKey') {\n size += pubKeySize\n } else {\n throw new Error('unsupported sig operations type')\n }\n })\n })\n\n // size = size + sigSize * this.tx.txIns.length\n size = size + 1 // assume txInsVi increases by 1 byte\n return Math.round(size)\n }\n\n estimateFee (extraFeeAmount = new Bn(0)) {\n // old style rounding up per kb - pays too high fees:\n // const fee = Math.ceil(this.estimateSize() / 1000) * this.feePerKbNum\n\n // new style pays lower fees - rounds up to satoshi, not per kb:\n const fee = Math.ceil(this.estimateSize() / 1000 * this.feePerKbNum)\n\n return new Bn(fee).add(extraFeeAmount)\n }\n\n /**\n * Builds the transaction and adds the appropriate fee by subtracting from\n * the change output. Note that by default the TxBuilder will use as many\n * inputs as necessary to pay the output amounts and the required fee. The\n * TxBuilder will not necessarily us all the inputs. To force the TxBuilder\n * to use all the inputs (such as if you wish to spend the entire balance\n * of a wallet), set the argument useAllInputs = true.\n */\n build (opts = { useAllInputs: false }) {\n let minFeeAmountBn\n if (this.txIns.length <= 0) {\n throw Error('tx-builder number of inputs must be greater than 0')\n }\n if (!this.changeScript) {\n throw new Error('must specify change script to use build method')\n }\n for (\n let extraInputsNum = opts.useAllInputs ? this.txIns.length - 1 : 0;\n extraInputsNum < this.txIns.length;\n extraInputsNum++\n ) {\n this.tx = new Tx()\n const outAmountBn = this.buildOutputs()\n const changeTxOut = TxOut.fromProperties(new Bn(0), this.changeScript)\n this.tx.addTxOut(changeTxOut)\n\n let inAmountBn\n try {\n inAmountBn = this.buildInputs(outAmountBn, extraInputsNum)\n } catch (err) {\n if (err.message.includes('not enough funds for outputs')) {\n throw new Error('unable to gather enough inputs for outputs and fee')\n } else {\n throw err\n }\n }\n\n // Set change amount from inAmountBn - outAmountBn\n this.changeAmountBn = inAmountBn.sub(outAmountBn)\n changeTxOut.valueBn = this.changeAmountBn\n\n minFeeAmountBn = this.estimateFee()\n if (\n this.changeAmountBn.geq(minFeeAmountBn) &&\n this.changeAmountBn.sub(minFeeAmountBn).gt(this.dust)\n ) {\n break\n }\n }\n if (this.changeAmountBn.geq(minFeeAmountBn)) {\n // Subtract fee from change\n this.feeAmountBn = minFeeAmountBn\n this.changeAmountBn = this.changeAmountBn.sub(this.feeAmountBn)\n this.tx.txOuts[this.tx.txOuts.length - 1].valueBn = this.changeAmountBn\n\n if (this.changeAmountBn.lt(this.dust)) {\n if (this.dustChangeToFees) {\n // Remove the change amount since it is less than dust and the\n // builder has requested dust be sent to fees.\n this.tx.txOuts.pop()\n this.tx.txOutsVi = VarInt.fromNumber(this.tx.txOutsVi.toNumber() - 1)\n this.feeAmountBn = this.feeAmountBn.add(this.changeAmountBn)\n this.changeAmountBn = new Bn(0)\n } else {\n throw new Error('unable to create change amount greater than dust')\n }\n }\n\n this.tx.nLockTime = this.nLockTime\n this.tx.versionBytesNum = this.versionBytesNum\n if (this.tx.txOuts.length === 0) {\n throw new Error(\n 'outputs length is zero - unable to create any outputs greater than dust'\n )\n }\n return this\n } else {\n throw new Error('unable to gather enough inputs for outputs and fee')\n }\n }\n\n // BIP 69 sorting. call after build() but before sign()\n sort () {\n this.tx.sort()\n return this\n }\n\n /**\n * Check if all signatures are present in a multisig input script.\n */\n static allSigsPresent (m, script) {\n // The first element is a Famous MultiSig Bug OP_0, and last element is the\n // redeemScript. The rest are signatures.\n let present = 0\n for (let i = 1; i < script.chunks.length - 1; i++) {\n if (script.chunks[i].buf) {\n present++\n }\n }\n return present === m\n }\n\n /**\n * Remove blank signatures in a multisig input script.\n */\n static removeBlankSigs (script) {\n // The first element is a Famous MultiSig Bug OP_0, and last element is the\n // redeemScript. The rest are signatures.\n script = new Script(script.chunks.slice()) // copy the script\n for (let i = 1; i < script.chunks.length - 1; i++) {\n if (!script.chunks[i].buf) {\n script.chunks.splice(i, 1) // remove ith element\n }\n }\n return script\n }\n\n fillSig (nIn, nScriptChunk, sig) {\n const txIn = this.tx.txIns[nIn]\n txIn.script.chunks[nScriptChunk] = new Script().writeBuffer(\n sig.toTxFormat()\n ).chunks[0]\n txIn.scriptVi = VarInt.fromNumber(txIn.script.toBuffer().length)\n return this\n }\n\n /**\n * Sign an input, but do not fill the signature into the transaction. Return\n * the signature.\n *\n * For a normal transaction, subScript is usually the scriptPubKey. If\n * you're not normal because you're using OP_CODESEPARATORs, you know what\n * to do.\n */\n getSig (keyPair, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID, nIn, subScript, flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID) {\n let valueBn\n if (\n nHashType & Sig.SIGHASH_FORKID &&\n flags & Tx.SCRIPT_ENABLE_SIGHASH_FORKID\n ) {\n const txHashBuf = this.tx.txIns[nIn].txHashBuf\n const txOutNum = this.tx.txIns[nIn].txOutNum\n const txOut = this.uTxOutMap.get(txHashBuf, txOutNum)\n if (!txOut) {\n throw new Error('for SIGHASH_FORKID must provide UTXOs')\n }\n valueBn = txOut.valueBn\n }\n return this.tx.sign(keyPair, nHashType, nIn, subScript, valueBn, flags, this.hashCache)\n }\n\n /**\n * Asynchronously sign an input in a worker, but do not fill the signature\n * into the transaction. Return the signature.\n */\n asyncGetSig (keyPair, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID, nIn, subScript, flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID) {\n let valueBn\n if (\n nHashType & Sig.SIGHASH_FORKID &&\n flags & Tx.SCRIPT_ENABLE_SIGHASH_FORKID\n ) {\n const txHashBuf = this.tx.txIns[nIn].txHashBuf\n const txOutNum = this.tx.txIns[nIn].txOutNum\n const txOut = this.uTxOutMap.get(txHashBuf, txOutNum)\n if (!txOut) {\n throw new Error('for SIGHASH_FORKID must provide UTXOs')\n }\n valueBn = txOut.valueBn\n }\n return this.tx.asyncSign(\n keyPair,\n nHashType,\n nIn,\n subScript,\n valueBn,\n flags,\n this.hashCache\n )\n }\n\n /**\n * Sign ith input with keyPair and insert the signature into the transaction.\n * This method only works for some standard transaction types. For\n * non-standard transaction types, use getSig.\n */\n signTxIn (nIn, keyPair, txOut, nScriptChunk, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID, flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID) {\n const txIn = this.tx.txIns[nIn]\n const script = txIn.script\n if (nScriptChunk === undefined && script.isPubKeyHashIn()) {\n nScriptChunk = 0\n }\n if (nScriptChunk === undefined) {\n throw new Error('cannot sign unknown script type for input ' + nIn)\n }\n const txHashBuf = txIn.txHashBuf\n const txOutNum = txIn.txOutNum\n if (!txOut) {\n txOut = this.uTxOutMap.get(txHashBuf, txOutNum)\n }\n const outScript = txOut.script\n const subScript = outScript // true for standard script types\n const sig = this.getSig(keyPair, nHashType, nIn, subScript, flags, this.hashCache)\n this.fillSig(nIn, nScriptChunk, sig)\n return this\n }\n\n /**\n * Asynchronously sign ith input with keyPair in a worker and insert the\n * signature into the transaction. This method only works for some standard\n * transaction types. For non-standard transaction types, use asyncGetSig.\n */\n async asyncSignTxIn (nIn, keyPair, txOut, nScriptChunk, nHashType = Sig.SIGHASH_ALL | Sig.SIGHASH_FORKID, flags = Tx.SCRIPT_ENABLE_SIGHASH_FORKID) {\n const txIn = this.tx.txIns[nIn]\n const script = txIn.script\n if (nScriptChunk === undefined && script.isPubKeyHashIn()) {\n nScriptChunk = 0\n }\n if (nScriptChunk === undefined) {\n throw new Error('cannot sign unknown script type for input ' + nIn)\n }\n const txHashBuf = txIn.txHashBuf\n const txOutNum = txIn.txOutNum\n if (!txOut) {\n txOut = this.uTxOutMap.get(txHashBuf, txOutNum)\n }\n const outScript = txOut.script\n const subScript = outScript // true for standard script types\n const sig = await this.asyncGetSig(keyPair, nHashType, nIn, subScript, flags, this.hashCache)\n this.fillSig(nIn, nScriptChunk, sig)\n return this\n }\n\n signWithKeyPairs (keyPairs) {\n // produce map of addresses to private keys\n const addressStrMap = {}\n for (const keyPair of keyPairs) {\n const addressStr = Address.fromPubKey(keyPair.pubKey).toString()\n addressStrMap[addressStr] = keyPair\n }\n // loop through all inputs\n for (const nIn in this.tx.txIns) {\n const txIn = this.tx.txIns[nIn]\n // for each input, use sigOperations to get list of signatures and pubkeys\n // to be produced and inserted\n const arr = this.sigOperations.get(txIn.txHashBuf, txIn.txOutNum)\n for (const obj of arr) {\n // for each pubkey, get the privkey from the privkey map and sign the input\n const { nScriptChunk, type, addressStr, nHashType } = obj\n const keyPair = addressStrMap[addressStr]\n if (!keyPair) {\n obj.log = `cannot find keyPair for addressStr ${addressStr}`\n continue\n }\n const txOut = this.uTxOutMap.get(txIn.txHashBuf, txIn.txOutNum)\n if (type === 'sig') {\n this.signTxIn(nIn, keyPair, txOut, nScriptChunk, nHashType)\n obj.log = 'successfully inserted signature'\n } else if (type === 'pubKey') {\n txIn.script.chunks[nScriptChunk] = new Script().writeBuffer(\n keyPair.pubKey.toBuffer()\n ).chunks[0]\n txIn.setScript(txIn.script)\n obj.log = 'successfully inserted public key'\n } else {\n obj.log = `cannot perform operation of type ${type}`\n continue\n }\n }\n }\n return this\n }\n}\n\nexport { TxBuilder }\n","/**\n * Ach (Aes+Cbc+Hmac) (experimental)\n * =================================\n *\n * An \"encrypt-then-MAC\" that uses Aes, Cbc and SHA256 Hmac. This is suitable\n * for general encryption of data.\n *\n * The encrypted data takes the form:\n * (256 bit hmac)(128 bit iv)(128+ bits Aes+Cbc encrypted message)\n */\n'use strict'\n\nimport { Aescbc } from './aescbc'\nimport { Hash } from './hash'\nimport { Random } from './random'\nimport { Workers } from './workers'\nimport { cmp } from './cmp'\n\nclass Ach { }\n\nAch.encrypt = function (messageBuf, cipherKeyBuf, ivBuf) {\n const encBuf = Aescbc.encrypt(messageBuf, cipherKeyBuf, ivBuf)\n const hmacbuf = Hash.sha256Hmac(encBuf, cipherKeyBuf)\n return Buffer.concat([hmacbuf, encBuf])\n}\n\nAch.asyncEncrypt = async function (messageBuf, cipherKeyBuf, ivBuf) {\n if (!ivBuf) {\n ivBuf = Random.getRandomBuffer(128 / 8)\n }\n const args = [messageBuf, cipherKeyBuf, ivBuf]\n const workersResult = await Workers.asyncClassMethod(Ach, 'encrypt', args)\n return workersResult.resbuf\n}\n\nAch.decrypt = function (encBuf, cipherKeyBuf) {\n if (encBuf.length < (256 + 128 + 128) / 8) {\n throw new Error(\n 'The encrypted data must be at least 256+128+128 bits, which is the length of the Hmac plus the iv plus the smallest encrypted data size'\n )\n }\n const hmacbuf = encBuf.slice(0, 256 / 8)\n encBuf = encBuf.slice(256 / 8, encBuf.length)\n const hmacbuf2 = Hash.sha256Hmac(encBuf, cipherKeyBuf)\n if (!cmp(hmacbuf, hmacbuf2)) {\n throw new Error(\n 'Message authentication failed - Hmacs are not equivalent'\n )\n }\n return Aescbc.decrypt(encBuf, cipherKeyBuf)\n}\n\nAch.asyncDecrypt = async function (encBuf, cipherKeyBuf) {\n const args = [encBuf, cipherKeyBuf]\n const workersResult = await Workers.asyncClassMethod(Ach, 'decrypt', args)\n return workersResult.resbuf\n}\n\nexport { Ach }\n","/**\n * Ecies\n * =====\n */\n'use strict'\n\nimport { Aescbc } from './aescbc'\nimport { cmp } from './cmp'\nimport { Hash } from './hash'\nimport { KeyPair } from './key-pair'\nimport { Point } from './point'\nimport { PubKey } from './pub-key'\nimport { Random } from './random'\nimport { Workers } from './workers'\n\nclass Ecies {}\n\nEcies.ivkEkM = function (privKey, pubKey) {\n const r = privKey.bn\n const KB = pubKey.point\n const P = KB.mul(r)\n const S = new PubKey(P)\n const Sbuf = S.toBuffer()\n const hash = Hash.sha512(Sbuf)\n return {\n iv: hash.slice(0, 16),\n kE: hash.slice(16, 32),\n kM: hash.slice(32, 64)\n }\n}\n\nEcies.electrumEncrypt = function (messageBuf, toPubKey, fromKeyPair, noKey = false) {\n if (!Buffer.isBuffer(messageBuf)) {\n throw new Error('messageBuf must be a buffer')\n }\n let Rbuf\n if (fromKeyPair === null) {\n fromKeyPair = KeyPair.fromRandom()\n }\n if (!noKey) {\n Rbuf = fromKeyPair.pubKey.toDer(true)\n }\n const { iv, kE, kM } = Ecies.ivkEkM(fromKeyPair.privKey, toPubKey)\n const ciphertext = Aescbc.encrypt(messageBuf, kE, iv, false)\n const BIE1 = Buffer.from('BIE1')\n let encBuf\n if (Rbuf) {\n encBuf = Buffer.concat([BIE1, Rbuf, ciphertext])\n } else {\n encBuf = Buffer.concat([BIE1, ciphertext])\n }\n const hmac = Hash.sha256Hmac(encBuf, kM)\n return Buffer.concat([encBuf, hmac])\n}\n\nEcies.electrumDecrypt = function (encBuf, toPrivKey, fromPubKey = null) {\n if (!Buffer.isBuffer(encBuf)) {\n throw new Error('encBuf must be a buffer')\n }\n const tagLength = 32\n\n const magic = encBuf.slice(0, 4)\n if (!magic.equals(Buffer.from('BIE1'))) {\n throw new Error('Invalid Magic')\n }\n let offset = 4\n if (fromPubKey === null) {\n // BIE1 use compressed public key, length is always 33.\n const pub = encBuf.slice(4, 37)\n fromPubKey = PubKey.fromDer(pub)\n offset = 37\n }\n const { iv, kE, kM } = Ecies.ivkEkM(toPrivKey, fromPubKey)\n const ciphertext = encBuf.slice(offset, encBuf.length - tagLength)\n const hmac = encBuf.slice(encBuf.length - tagLength, encBuf.length)\n\n const hmac2 = Hash.sha256Hmac(encBuf.slice(0, encBuf.length - tagLength), kM)\n\n if (!hmac.equals(hmac2)) {\n throw new Error('Invalid checksum')\n }\n return Aescbc.decrypt(ciphertext, kE, iv)\n}\n\nEcies.bitcoreEncrypt = function (messageBuf, toPubKey, fromKeyPair, ivBuf) {\n if (!fromKeyPair) {\n fromKeyPair = KeyPair.fromRandom()\n }\n const r = fromKeyPair.privKey.bn\n const RPubKey = fromKeyPair.pubKey\n const RBuf = RPubKey.toDer(true)\n const KB = toPubKey.point\n const P = KB.mul(r)\n const S = P.getX()\n const Sbuf = S.toBuffer({ size: 32 })\n const kEkM = Hash.sha512(Sbuf)\n const kE = kEkM.slice(0, 32)\n const kM = kEkM.slice(32, 64)\n const c = Aescbc.encrypt(messageBuf, kE, ivBuf)\n const d = Hash.sha256Hmac(c, kM)\n const encBuf = Buffer.concat([RBuf, c, d])\n return encBuf\n}\n\nEcies.asyncBitcoreEncrypt = async function (\n messageBuf,\n toPubKey,\n fromKeyPair,\n ivBuf\n) {\n if (!fromKeyPair) {\n fromKeyPair = await KeyPair.asyncFromRandom()\n }\n if (!ivBuf) {\n ivBuf = Random.getRandomBuffer(128 / 8)\n }\n const args = [messageBuf, toPubKey, fromKeyPair, ivBuf]\n const workersResult = await Workers.asyncClassMethod(Ecies, 'bitcoreEncrypt', args)\n return workersResult.resbuf\n}\n\nEcies.bitcoreDecrypt = function (encBuf, toPrivKey) {\n const kB = toPrivKey.bn\n const fromPubKey = PubKey.fromDer(encBuf.slice(0, 33))\n const R = fromPubKey.point\n const P = R.mul(kB)\n if (P.eq(new Point())) {\n throw new Error('P equals 0')\n }\n const S = P.getX()\n const Sbuf = S.toBuffer({ size: 32 })\n const kEkM = Hash.sha512(Sbuf)\n const kE = kEkM.slice(0, 32)\n const kM = kEkM.slice(32, 64)\n const c = encBuf.slice(33, encBuf.length - 32)\n const d = encBuf.slice(encBuf.length - 32, encBuf.length)\n const d2 = Hash.sha256Hmac(c, kM)\n if (!cmp(d, d2)) {\n throw new Error('Invalid checksum')\n }\n const messageBuf = Aescbc.decrypt(c, kE)\n return messageBuf\n}\n\nEcies.asyncBitcoreDecrypt = async function (encBuf, toPrivKey) {\n const args = [encBuf, toPrivKey]\n const workersResult = await Workers.asyncClassMethod(Ecies, 'bitcoreDecrypt', args)\n return workersResult.resbuf\n}\n\nexport { Ecies }\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","/**\n * Merkle\n * ======\n *\n * A node in a Merkle tree (possibly the root node, in which case it is the\n * Merkle root). A node either contains a buffer or links to two other nodes.\n */\n'use strict'\n\nimport { Hash } from './hash'\nimport { Struct } from './struct'\n\nclass Merkle extends Struct {\n constructor (hashBuf, buf, merkle1, merkle2) {\n super({ hashBuf, buf, merkle1, merkle2 })\n }\n\n hash () {\n if (this.hashBuf) {\n return this.hashBuf\n }\n if (this.buf) {\n return Hash.sha256Sha256(this.buf)\n }\n const hashBuf1 = this.merkle1.hash()\n const hashBuf2 = this.merkle2.hash()\n this.buf = Buffer.concat([hashBuf1, hashBuf2])\n return Hash.sha256Sha256(this.buf)\n }\n\n fromBuffers (bufs) {\n if (bufs.length < 1) {\n throw new Error('buffers must have a length')\n }\n bufs = bufs.slice()\n const log = Math.log2(bufs.length)\n if (!Number.isInteger(log)) {\n // If a merkle tree does not have a number of ends that is a power of 2,\n // then we have to copy the last value until it is a power of 2. Note\n // that we copy *the actual object* over and over again, which ensures\n // that when we finds its hash, the hash is cached.\n const lastval = bufs[bufs.length - 1]\n var len = Math.pow(2, Math.ceil(log))\n for (let i = bufs.length; i < len; i++) {\n bufs.push(lastval)\n }\n }\n const bufs1 = bufs.slice(0, bufs.length / 2)\n const bufs2 = bufs.slice(bufs.length / 2)\n this.fromBufferArrays(bufs1, bufs2)\n return this\n }\n\n static fromBuffers (bufs) {\n return new this().fromBuffers(bufs)\n }\n\n /**\n * Takes two arrays, both of which *must* be of a length that is a power of\n * two.\n */\n fromBufferArrays (bufs1, bufs2) {\n if (bufs1.length === 1) {\n this.merkle1 = new Merkle(undefined, bufs1[0])\n this.merkle2 = new Merkle(undefined, bufs2[0])\n return this\n }\n const bufs11 = bufs1.slice(0, bufs1.length / 2)\n const bufs12 = bufs1.slice(bufs1.length / 2)\n this.merkle1 = new Merkle().fromBufferArrays(bufs11, bufs12)\n const bufs21 = bufs2.slice(0, bufs2.length / 2)\n const bufs22 = bufs2.slice(bufs2.length / 2)\n this.merkle2 = new Merkle().fromBufferArrays(bufs21, bufs22)\n return this\n }\n\n static fromBufferArrays (bufs1, bufs2) {\n return new this().fromBufferArrays(bufs1, bufs2)\n }\n\n leavesNum () {\n if (this.merkle1) {\n return this.merkle1.leavesNum() + this.merkle2.leavesNum()\n }\n if (this.buf) {\n return 1\n }\n throw new Error('invalid number of leaves')\n }\n}\n\nexport { Merkle }\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\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 // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n 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 =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\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(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\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 parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (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\nexports.write = function (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\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16)\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 }\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul)\n }\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1)\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1)\n }\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point))\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point))\n }\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate)\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate)\n }\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (var i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (var i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n ]\n ]\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n ]\n ]\n }\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray()\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n do {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8'\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; true; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n\n if (!this.curve._maxwellTrick) {\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n }\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0 && (r[1] & 0x80)) {\n r = r.slice(1);\n }\n if (s[0] === 0 && (s[1] & 0x80)) {\n s = s.slice(1);\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","var checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n 'sha': 'SHA-1',\n 'sha-1': 'SHA-1',\n 'sha1': 'SHA-1',\n 'sha256': 'SHA-256',\n 'sha-256': 'SHA-256',\n 'sha384': 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n 'sha512': 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\n\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n process.nextTick(function () {\n callback(null, out)\n })\n }, function (e) {\n process.nextTick(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n return process.nextTick(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n }\n\n checkParameters(password, salt, iterations, keylen)\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n\n while (p = p.next) {\n ret += s + p.data;\n }\n\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","'use strict';\n\nvar _Object$setPrototypeO;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar finished = require('./end-of-stream');\n\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\n\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\n\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n } // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n\n\n var lastPromise = this[kLastPromise];\n var promise;\n\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\n\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n'use strict';\n\nvar eos;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\n\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\n\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true; // request.destroy just do .end - .abort is what we want\n\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\n\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\n\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\n\nmodule.exports = pipeline;","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","'use strict'\nconst wordList = [\n 'ใใใใใใ',\n 'ใใใใค',\n 'ใใใ ',\n 'ใใใใ',\n 'ใใใกใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใฒ',\n 'ใใใใจ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใถ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใใพใ',\n 'ใใใ',\n 'ใใคใ',\n 'ใใคใใ',\n 'ใใฃใใ
ใ',\n 'ใใคใพใ',\n 'ใใคใใ',\n 'ใใฆใช',\n 'ใใฆใฏใพใ',\n 'ใใฒใ',\n 'ใใถใ',\n 'ใใถใ',\n 'ใใตใใ',\n 'ใใพใ',\n 'ใใพใฉ',\n 'ใใพใใใ',\n 'ใใพใ',\n 'ใใฟใใฎ',\n 'ใใใใ',\n 'ใใใพใ',\n 'ใใใ',\n 'ใใใใใพ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใจใ',\n 'ใใใใ',\n 'ใใใฆใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใฆใ',\n 'ใใใชใ',\n 'ใใใพใ',\n 'ใใใ ใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใชใ',\n 'ใใใใฎ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใถใ',\n 'ใใใฐใช',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใพใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ
ใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใฟ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใณ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใใใ',\n 'ใใ ใ',\n 'ใใ ใ',\n 'ใใใใ',\n 'ใใใฟ',\n 'ใใใใ',\n 'ใใกใใ',\n 'ใใกใ',\n 'ใใกใฉ',\n 'ใใกใฐ',\n 'ใใกใถ',\n 'ใใกใใ
ใ',\n 'ใใคใ',\n 'ใใฃใใ
ใ',\n 'ใใฃใใ',\n 'ใใฃใใ',\n 'ใใฃใใ',\n 'ใใฃใก',\n 'ใใฃใฆใ',\n 'ใใฃใฝใ',\n 'ใใฆใ',\n 'ใใฆใ',\n 'ใใฉใ',\n 'ใใจใ',\n 'ใใชใ',\n 'ใใชใ',\n 'ใใญใใ',\n 'ใใฎใก',\n 'ใใฎใ',\n 'ใใฏใค',\n 'ใใฐใ',\n 'ใใฏใ',\n 'ใใณใ',\n 'ใใฒใ',\n 'ใใตใ',\n 'ใใธใ',\n 'ใใปใ',\n 'ใใฟใ',\n 'ใใใใจ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใจ',\n 'ใใใใก',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใฎ',\n 'ใใใ',\n 'ใใใใใดใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใฐ',\n 'ใใใใ',\n 'ใใใใใพใ',\n 'ใใใใค',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใถ',\n 'ใใในใ',\n 'ใใใ',\n 'ใใใใใช',\n 'ใใใใ',\n 'ใใใใพใใ',\n 'ใใใคใ',\n 'ใใใจใ',\n 'ใใใใค',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใชใ',\n 'ใใใใใฟ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใค',\n 'ใใกใใใ',\n 'ใใกใใ',\n 'ใใกใ',\n 'ใใกใ
ใ',\n 'ใใฃใใ',\n 'ใใคใใใ',\n 'ใใฃใใใ',\n 'ใใคใ',\n 'ใใฉใ',\n 'ใใชใ',\n 'ใใชใ',\n 'ใใชใใ',\n 'ใใชใ',\n 'ใใญใ',\n 'ใใฎใ',\n 'ใใถใ',\n 'ใใถใใ',\n 'ใใพใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใพใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใใก',\n 'ใใใชใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใกใ',\n 'ใใใฆใ',\n 'ใใใฉใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใถใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใฆ',\n 'ใใคใใ',\n 'ใใฎใ',\n 'ใใปใใพใ',\n 'ใใปใ',\n 'ใใพใ',\n 'ใใใ',\n 'ใใใฎ',\n 'ใใใ',\n 'ใใใถ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ
ใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใใกใใ',\n 'ใใใจใค',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใคใ',\n 'ใใใใ',\n 'ใใใใพ',\n 'ใใใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใใตใ',\n 'ใใในใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใฉใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใชใ',\n 'ใใใ',\n 'ใใใใพ',\n 'ใใใใใ',\n 'ใใใใใช',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใชใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใชใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใ ใใ',\n 'ใใกใคใ',\n 'ใใฃใจ',\n 'ใใคใ',\n 'ใใงใใ',\n 'ใใจใใใฎ',\n 'ใใจใชใใ',\n 'ใใฉใ',\n 'ใใฉใใใ',\n 'ใใฐใใ',\n 'ใใพใใ',\n 'ใใใงใจใ',\n 'ใใใใง',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใกใ',\n 'ใใใค',\n 'ใใใใณ',\n 'ใใใผใ',\n 'ใใใใ ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ ใ',\n 'ใใใกใ
ใ',\n 'ใใใฉใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใใใใใ',\n 'ใใใใ',\n 'ใใใใใฉ',\n 'ใใใคใ',\n 'ใใใฆใ',\n 'ใใใจใ',\n 'ใใใตใ',\n 'ใใใธใ',\n 'ใใใปใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใฟ',\n 'ใใใ',\n 'ใใใจใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใก',\n 'ใใกใใ',\n 'ใใฃใใ
ใ',\n 'ใใฃใใ',\n 'ใใฃใใ',\n 'ใใฃใใใ',\n 'ใใชใใใ',\n 'ใใฎใ',\n 'ใใฏใ',\n 'ใใถใ',\n 'ใใปใ',\n 'ใใปใ',\n 'ใใพใ',\n 'ใใพใผใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใใณ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใก',\n 'ใใใฐใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใก',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใฆ',\n 'ใใใฐใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใพ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใใใใ',\n 'ใใใซใฃใฆใ',\n 'ใใใ
ใคใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใกใใ',\n 'ใใคใใ',\n 'ใใฃใกใ',\n 'ใใคใคใ',\n 'ใใคใญ',\n 'ใใฆใ',\n 'ใใฉใ',\n 'ใใฉใ',\n 'ใใชใ',\n 'ใใชใ',\n 'ใใชใ',\n 'ใใฌใใ',\n 'ใใญใ',\n 'ใใฎใ',\n 'ใใฎใใ',\n 'ใใฏใ',\n 'ใใณใใ',\n 'ใใฒใ',\n 'ใใตใ',\n 'ใใถใ',\n 'ใใผใ',\n 'ใใปใ',\n 'ใใพใ',\n 'ใใฟใค',\n 'ใใใใใใ',\n 'ใใใ',\n 'ใใใ ใใ',\n 'ใใใก',\n 'ใใใฎ',\n 'ใใใ',\n 'ใใใ',\n 'ใใ
ใใซใ',\n 'ใใใ',\n 'ใใใใใ
ใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใใใณ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใตใ',\n 'ใใใผ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใฐใช',\n 'ใใใ',\n 'ใใใใฟ',\n 'ใใใใ',\n 'ใใใฎใ',\n 'ใใใใใณ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใฆใ',\n 'ใใ ใใ',\n 'ใใใณใใ',\n 'ใใกใใฟ',\n 'ใใกใใ',\n 'ใใคใใ',\n 'ใใฃใใ',\n 'ใใคใใ',\n 'ใใจใใฆใ',\n 'ใใฉใ',\n 'ใใชใ',\n 'ใใญใใญ',\n 'ใใฎใ',\n 'ใใตใ',\n 'ใใฟใใใ',\n 'ใใฟใใฆใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใในใ',\n 'ใใใพ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใฆ',\n 'ใใใช',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใค',\n 'ใใใใ
ใค',\n 'ใใใใ',\n 'ใใใฎใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใจใ',\n 'ใใใใใฎ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ ใ',\n 'ใใใกใ',\n 'ใใใจใค',\n 'ใใใฏ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใจ',\n 'ใใใฐ',\n 'ใใกใใฃใท',\n 'ใใกใใ',\n 'ใใคใใค',\n 'ใใคใ',\n 'ใใคใใ',\n 'ใใฃใใ',\n 'ใใคใใ',\n 'ใใฃใใ',\n 'ใใฃใฆใ',\n 'ใใคใพใค',\n 'ใใคใใใณ',\n 'ใใคใใ',\n 'ใใคใใ',\n 'ใใฉใ',\n 'ใใจใฐใ',\n 'ใใจใ',\n 'ใใชใ',\n 'ใใชใ',\n 'ใใชใฟ',\n 'ใใฌใ',\n 'ใใญใค',\n 'ใใญใ',\n 'ใใฏใ',\n 'ใใฒใ',\n 'ใใถใใ',\n 'ใใผใ',\n 'ใใพใ',\n 'ใใฟใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใฎ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ
ใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใกใ',\n 'ใใใฆใ',\n 'ใใใจใ',\n 'ใใใชใ',\n 'ใใใซใ',\n 'ใใใถใค',\n 'ใใใพ',\n 'ใใใฟใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใพ',\n 'ใใใฌ',\n 'ใใใณใจ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ
ใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใกใ',\n 'ใใใคใ',\n 'ใใใฆใ',\n 'ใใใฉใ',\n 'ใใใชใ',\n 'ใใใฏใ',\n 'ใใใปใ',\n 'ใใใพใ',\n 'ใใใใ',\n 'ใใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใจใ',\n 'ใใใชใ',\n 'ใใใฏใ',\n 'ใใใพ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใฎใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ ใฆ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใค',\n 'ใใกใใ',\n 'ใใฃใ',\n 'ใใคใใค',\n 'ใใคใฐใ',\n 'ใใคใถ',\n 'ใใฆใ',\n 'ใใฆใ',\n 'ใใจใใ',\n 'ใใจใ',\n 'ใใจใฐ',\n 'ใใจใ',\n 'ใใชใใช',\n 'ใใญใใญ',\n 'ใใฎใพใพ',\n 'ใใฎใฟ',\n 'ใใฎใ',\n 'ใใฏใ',\n 'ใใฒใคใ',\n 'ใใตใ',\n 'ใใตใ',\n 'ใใผใใ',\n 'ใใพใใถใ',\n 'ใใพใใ',\n 'ใใพใใ',\n 'ใใพใคใช',\n 'ใใพใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใก',\n 'ใใใฎ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใพ',\n 'ใใใ',\n 'ใใใณ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใใใ',\n 'ใใใฃใ',\n 'ใใใใฆ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ
ใ',\n 'ใใใใ',\n 'ใใใ ใฆ',\n 'ใใใจใ',\n 'ใใใชใ',\n 'ใใใณใซ',\n 'ใใใฝใ',\n 'ใใใพใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใกใ
ใ',\n 'ใใใฆใ',\n 'ใใใใใ',\n 'ใใใช',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใช',\n 'ใใใฟใก',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใฒใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใคใใ',\n 'ใใคใใ',\n 'ใใฃใ',\n 'ใใคใใ',\n 'ใใฃใใใ',\n 'ใใฃใ',\n 'ใใคใใ',\n 'ใใฃใใ',\n 'ใใคใใฐ',\n 'ใใคใพใใ',\n 'ใใฆใ',\n 'ใใจใใ',\n 'ใใจใ',\n 'ใใจใใ',\n 'ใใจใ',\n 'ใใจใ',\n 'ใใฎใ',\n 'ใใฐใ',\n 'ใใณใใ',\n 'ใในใค',\n 'ใใปใ',\n 'ใใปใฉ',\n 'ใใพใ',\n 'ใใฟใใ',\n 'ใใฟใ ใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใใฉใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ ',\n 'ใใใใฐ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใก',\n 'ใใใพ',\n 'ใใใฟ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใฃใฆ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใก',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใจ',\n 'ใใใ',\n 'ใใ ใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใฆ',\n 'ใใใฟ',\n 'ใใกใใ',\n 'ใใกใใ',\n 'ใใฃใใ',\n 'ใใคใ',\n 'ใใคใใ',\n 'ใใฆใ',\n 'ใใฆใ',\n 'ใใฆใค',\n 'ใใฆใ',\n 'ใใฉใ',\n 'ใใชใใ',\n 'ใใชใใฎ',\n 'ใใชใ',\n 'ใใญใพ',\n 'ใใญใ',\n 'ใใฎใ',\n 'ใใฎใถ',\n 'ใใฏใ',\n 'ใใฐใใ',\n 'ใใฏใค',\n 'ใใฏใใ',\n 'ใใฏใ',\n 'ใใฒใใ',\n 'ใใตใ',\n 'ใใถใ',\n 'ใใธใ',\n 'ใใปใ',\n 'ใใปใ',\n 'ใใพใ',\n 'ใใพใ',\n 'ใใฟใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใใใ',\n 'ใใใใปใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใกใใ',\n 'ใใใฃใใ',\n 'ใใใพ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใ
ใใใ',\n 'ใใ
ใใฏใ',\n 'ใใ
ใใ',\n 'ใใ
ใฃใใ',\n 'ใใ
ใฟ',\n 'ใใ
ใใฐ',\n 'ใใ
ใใฐใ',\n 'ใใใใใ',\n 'ใใใใใ',\n 'ใใใฃใใ',\n 'ใใใฉใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใในใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใกใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใช',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใจใ',\n 'ใใใถใ',\n 'ใใใใใณ',\n 'ใใใใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใใฉใ',\n 'ใใใพ',\n 'ใใใ',\n 'ใใใชใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใฃใใ',\n 'ใใฃใใ',\n 'ใใฃใจ',\n 'ใใฆใ',\n 'ใใฆใ',\n 'ใใญใ',\n 'ใใฎใ',\n 'ใใฏใ ',\n 'ใใฐใใใ',\n 'ใใฒใใ',\n 'ใใถใฌใ',\n 'ใใถใ',\n 'ใใตใ',\n 'ใในใฆ',\n 'ใในใ',\n 'ใใปใ',\n 'ใใผใ',\n 'ใใพใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใกใใ',\n 'ใใใฃใจ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใฝใ',\n 'ใใใถใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใซใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใฃใใ',\n 'ใใฃใใใ',\n 'ใใฃใ',\n 'ใใฃใใ',\n 'ใใฃใใค',\n 'ใใฃใใใใพ',\n 'ใใคใใ',\n 'ใใคใ ใ',\n 'ใใคใงใ',\n 'ใใฃใฑใ',\n 'ใใคใณ',\n 'ใใคใถใ',\n 'ใใคใใ',\n 'ใใคใใค',\n 'ใใชใ',\n 'ใใฎใณ',\n 'ใใฏใฐ',\n 'ใใณใ',\n 'ใใผใญ',\n 'ใใพใ',\n 'ใใพใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใต',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ
',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใกใใ',\n 'ใใใฆใ',\n 'ใใใจใ',\n 'ใใใฌใ',\n 'ใใใญใ',\n 'ใใใฑใ',\n 'ใใใถ',\n 'ใใใฝใ',\n 'ใใใ',\n 'ใใใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใจใใ',\n 'ใใใญ',\n 'ใใใใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ ใ',\n 'ใใใชใ',\n 'ใใใณ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใฎ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใช',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใ ใฆใ',\n 'ใใคใ',\n 'ใใคใใ',\n 'ใใฃใใ',\n 'ใใคใใใ',\n 'ใใฃใใค',\n 'ใใฃใใ',\n 'ใใฃใใ',\n 'ใใฃใจ',\n 'ใใจใใ',\n 'ใใจใฅใ',\n 'ใใชใใ',\n 'ใใชใ',\n 'ใใตใผ',\n 'ใใผใ',\n 'ใใผใ',\n 'ใใพใค',\n 'ใใพใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใพใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใใกใใ',\n 'ใใใณ',\n 'ใใใถใ',\n 'ใใใฟใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใ ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใ ใใใใใถ',\n 'ใ ใใใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใ ใใใ',\n 'ใใใกใใ',\n 'ใใใฆใ',\n 'ใ ใใฉใใ',\n 'ใใใชใ',\n 'ใใใญใค',\n 'ใใใฎใ',\n 'ใใใฏใ',\n 'ใ ใใฒใใ',\n 'ใใใตใ',\n 'ใใใธใ',\n 'ใใใป',\n 'ใใใพใคใฐใช',\n 'ใใใฟใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใญ',\n 'ใใใณ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใ ใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใ ใใ',\n 'ใใใฟ',\n 'ใใกใฐใช',\n 'ใ ใฃใใ',\n 'ใ ใฃใใใ',\n 'ใ ใฃใ',\n 'ใ ใฃใใ
ใค',\n 'ใ ใฃใใ',\n 'ใใฆใ',\n 'ใใจใใ',\n 'ใใชใฐใ',\n 'ใใซใ',\n 'ใใฌใ',\n 'ใใฎใใฟ',\n 'ใใฏใค',\n 'ใใถใ',\n 'ใในใ',\n 'ใใผใ',\n 'ใใพใ',\n 'ใใพใ',\n 'ใ ใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใปใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใจ',\n 'ใใใ',\n 'ใใใใจ',\n 'ใใใฃใจ',\n 'ใใใใใ',\n 'ใ ใใใค',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใใใณ',\n 'ใ ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใ ใใก',\n 'ใใใฆใ',\n 'ใใใจใ',\n 'ใ ใใช',\n 'ใใใซใ',\n 'ใ ใใญใค',\n 'ใใใฎใ',\n 'ใใใดใ',\n 'ใ ใใผใ',\n 'ใใใพใค',\n 'ใใใใ',\n 'ใ ใใใค',\n 'ใ ใใ',\n 'ใ ใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใ
ใ',\n 'ใกใใ',\n 'ใกใใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใใ',\n 'ใกใกใใ',\n 'ใกใคใใ',\n 'ใกใฆใ',\n 'ใกใฆใ',\n 'ใกใฌใ',\n 'ใกใฌใ',\n 'ใกใฎใ',\n 'ใกใฒใใ',\n 'ใกใธใใใ',\n 'ใกใปใ',\n 'ใกใพใ',\n 'ใกใฟใค',\n 'ใกใฟใฉใ',\n 'ใกใใใฉ',\n 'ใกใใใใชใน',\n 'ใกใ
ใใ',\n 'ใกใใใใ',\n 'ใกใใใ',\n 'ใกใใใใใ',\n 'ใกใใ',\n 'ใกใใฟ',\n 'ใกใใใฟ',\n 'ใกใใใ',\n 'ใกใใฉ',\n 'ใกใใ',\n 'ใกใใใ',\n 'ใกใใใ',\n 'ใคใใ',\n 'ใคใใใก',\n 'ใคใใ',\n 'ใคใใใใ',\n 'ใคใใฏใ',\n 'ใคใใ',\n 'ใคใใ',\n 'ใคใใใ',\n 'ใคใใญ',\n 'ใคใใ',\n 'ใคใใญ',\n 'ใคใใ',\n 'ใคใใ',\n 'ใคใใใ',\n 'ใคใฅใ',\n 'ใคใคใ',\n 'ใคใคใ',\n 'ใคใจใใ',\n 'ใคใชใใ',\n 'ใคใชใฟ',\n 'ใคใญใฅใญ',\n 'ใคใฎใ',\n 'ใคใถใ',\n 'ใคใพใใชใ',\n 'ใคใพใ',\n 'ใคใฟใ',\n 'ใคใใใ',\n 'ใคใใ',\n 'ใคใใ',\n 'ใคใใ',\n 'ใคใใผ',\n 'ใคใใฟใ',\n 'ใคใใใฎ',\n 'ใคใใ',\n 'ใฆใใ',\n 'ใฆใใฆ',\n 'ใฆใใฟ',\n 'ใฆใใใ',\n 'ใฆใใ',\n 'ใฆใใ',\n 'ใฆใใใ',\n 'ใฆใใใ',\n 'ใฆใใใค',\n 'ใฆใใ',\n 'ใฆใใใ',\n 'ใฆใใใ',\n 'ใฆใใฉ',\n 'ใฆใใญใ',\n 'ใฆใใฒใใ',\n 'ใฆใใธใ',\n 'ใฆใใผใ',\n 'ใฆใใก',\n 'ใฆใใใ',\n 'ใฆใใจใ',\n 'ใฆใใณ',\n 'ใงใใผใ',\n 'ใฆใใใใ',\n 'ใฆใใ',\n 'ใฆใใ',\n 'ใฆใใ',\n 'ใฆใกใใ',\n 'ใฆใกใใ',\n 'ใฆใคใใ',\n 'ใฆใคใฅใ',\n 'ใงใฃใฑ',\n 'ใฆใคใผใ',\n 'ใฆใคใ',\n 'ใงใฌใใ',\n 'ใฆใฌใ',\n 'ใฆใฌใใ',\n 'ใฆใฎใฒใ',\n 'ใฆใฏใ',\n 'ใฆใถใใ',\n 'ใฆใตใ ',\n 'ใฆใปใฉใ',\n 'ใฆใปใ',\n 'ใฆใพใ',\n 'ใฆใพใใใ',\n 'ใฆใฟใใ',\n 'ใฆใฟใใ',\n 'ใฆใใ',\n 'ใฆใใณ',\n 'ใฆใใ',\n 'ใฆใใใ',\n 'ใงใใใค',\n 'ใฆใใใ',\n 'ใฆใใใ',\n 'ใฆใใ',\n 'ใฆใใ',\n 'ใฆใใใ',\n 'ใฆใใใ',\n 'ใฆใใใ',\n 'ใฆใใ',\n 'ใฆใใใ',\n 'ใงใใก',\n 'ใฆใใฆใ',\n 'ใฆใใจใ',\n 'ใฆใใชใ',\n 'ใฆใใทใ',\n 'ใฆใใผใใ ใ',\n 'ใฆใใใค',\n 'ใฆใใใใใ',\n 'ใงใใใใ',\n 'ใงใใ',\n 'ใฉใใ',\n 'ใจใใ',\n 'ใฉใใใ',\n 'ใจใใใ
ใ',\n 'ใฉใใ',\n 'ใจใใ',\n 'ใจใใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใใ',\n 'ใจใใฉใ',\n 'ใจใใ',\n 'ใจใใใ
ใ',\n 'ใจใใฆใ',\n 'ใจใใซ',\n 'ใจใในใค',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใใใใ',\n 'ใจใใ',\n 'ใจใใ',\n 'ใจใกใ
ใ',\n 'ใจใฃใใ
ใ',\n 'ใจใฃใใ',\n 'ใจใคใใ',\n 'ใจใคใซใ
ใ',\n 'ใจใฉใใ',\n 'ใจใจใฎใใ',\n 'ใจใชใ',\n 'ใจใชใใ',\n 'ใจใชใ',\n 'ใจใฎใใพ',\n 'ใจใฐใ',\n 'ใฉใถใใ',\n 'ใจใปใ',\n 'ใจใพใ',\n 'ใจใใ',\n 'ใจใใ ใก',\n 'ใจใใ',\n 'ใฉใใใณ',\n 'ใจใใใ',\n 'ใจใใใค',\n 'ใฉใใถใ',\n 'ใชใใใ',\n 'ใชใใใ',\n 'ใชใใใ',\n 'ใชใใ',\n 'ใชใใใ',\n 'ใชใใใ',\n 'ใชใใ',\n 'ใชใใ',\n 'ใชใใ',\n 'ใชใใ',\n 'ใชใใใฉ',\n 'ใชใใ',\n 'ใชใใงใใ',\n 'ใชใฃใจใ',\n 'ใชใคใใใฟ',\n 'ใชใชใใ',\n 'ใชใซใใจ',\n 'ใชใซใใฎ',\n 'ใชใซใ',\n 'ใชใฎใ',\n 'ใชใตใ ',\n 'ใชใพใใ',\n 'ใชใพใ',\n 'ใชใพใฟ',\n 'ใชใฟใ ',\n 'ใชใใใ',\n 'ใชใใ',\n 'ใชใใ',\n 'ใชใใ',\n 'ใชใใณ',\n 'ใชใใถ',\n 'ใชใใ',\n 'ใชใใจใณ',\n 'ใชใใฐใ',\n 'ใซใใ',\n 'ใซใใใ',\n 'ใซใใ',\n 'ใซใใ',\n 'ใซใใ',\n 'ใซใใฆ',\n 'ใซใใณ',\n 'ใซใใใฟ',\n 'ใซใใพใ',\n 'ใซใใ',\n 'ใซใใใใใใ',\n 'ใซใใ',\n 'ใซใใใฎ',\n 'ใซใกใใใ',\n 'ใซใกใใใณ',\n 'ใซใฃใ',\n 'ใซใฃใ',\n 'ใซใฃใใ',\n 'ใซใฃใใ',\n 'ใซใฃใใ',\n 'ใซใฃใใใ',\n 'ใซใฃใใ',\n 'ใซใฃใใ',\n 'ใซใฃใฆใ',\n 'ใซใชใ',\n 'ใซใปใ',\n 'ใซใพใ',\n 'ใซใใค',\n 'ใซใใ',\n 'ใซใ
ใใใ',\n 'ใซใใใใ',\n 'ใซใใจใ',\n 'ใซใใ',\n 'ใซใใ',\n 'ใซใใ',\n 'ใซใใใ',\n 'ใซใใใ',\n 'ใซใใใ',\n 'ใซใใใ',\n 'ใซใใใ',\n 'ใซใใก',\n 'ใซใใฆใ',\n 'ใซใใซใ',\n 'ใซใใท',\n 'ใซใใพใ',\n 'ใซใใ',\n 'ใซใใใ',\n 'ใซใใใ',\n 'ใฌใใใ',\n 'ใฌใใ',\n 'ใฌใใใจใ',\n 'ใฌใใ',\n 'ใฌใใใ',\n 'ใฌใใ',\n 'ใฌใพใใณ',\n 'ใฌใใ',\n 'ใฌใใ',\n 'ใฌใใกใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใใ',\n 'ใญใในใ',\n 'ใญใ ใ',\n 'ใญใคใ',\n 'ใญใฃใใ',\n 'ใญใคใใ',\n 'ใญใฃใใใใ',\n 'ใญใถใใ',\n 'ใญใตใ ',\n 'ใญใผใ',\n 'ใญใปใใฏใปใ',\n 'ใญใพใ',\n 'ใญใพใใ',\n 'ใญใฟใฟ',\n 'ใญใใ',\n 'ใญใใใ',\n 'ใญใใจ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใใ',\n 'ใญใใใ',\n 'ใญใใใ',\n 'ใญใใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใ',\n 'ใญใใกใใ',\n 'ใญใใฉ',\n 'ใญใใด',\n 'ใญใใถใค',\n 'ใญใใพใค',\n 'ใญใใใใ',\n 'ใญใใใ',\n 'ใฎใใ',\n 'ใฎใใฅใพ',\n 'ใฎใใ',\n 'ใฎใใชใฟ',\n 'ใฎใใใ',\n 'ใฎใใ',\n 'ใฎใใ',\n 'ใฎใใ',\n 'ใฎใใ',\n 'ใฎใใ',\n 'ใฎใใพใ',\n 'ใฎใกใปใฉ',\n 'ใฎใฃใ',\n 'ใฎใฐใ',\n 'ใฎใฏใ',\n 'ใฎในใ',\n 'ใฎใผใ',\n 'ใฎใฟใใฎ',\n 'ใฎใใพ',\n 'ใฎใใใฌ',\n 'ใฎใใญใ',\n 'ใฎใใใฎ',\n 'ใฎใใใ',\n 'ใฎใใ',\n 'ใฎใใ',\n 'ใฐใใ',\n 'ใฏใใ',\n 'ใฐใใใ',\n 'ใฐใใ',\n 'ใฐใใ',\n 'ใฏใใใ',\n 'ใฏใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฏใใก',\n 'ใฐใใฐใ',\n 'ใฏใใใค',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฐใใ',\n 'ใฏใใ',\n 'ใฏใใใ
',\n 'ใฏใใ',\n 'ใฏใใถ',\n 'ใฏใใฟ',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฐใใ',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฑใใใ',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฏใกใฟใค',\n 'ใฏใคใใ',\n 'ใฏใฃใใ',\n 'ใฏใฅใ',\n 'ใฏใฃใใ',\n 'ใฏใฃใใค',\n 'ใฏใฃใใ',\n 'ใฏใฃใใ',\n 'ใฏใฃใใ',\n 'ใฏใฃใใ',\n 'ใฏใฃใใค',\n 'ใฏใฃใกใ
ใ',\n 'ใฏใฃใฆใ',\n 'ใฏใฃใดใใ',\n 'ใฏใฃใฝใ',\n 'ใฏใชใ',\n 'ใฏใชใณ',\n 'ใฏใซใใ',\n 'ใฏใถใใ',\n 'ใฏใฟใใ',\n 'ใฏใใใ',\n 'ใฏใใค',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฏใใใใ',\n 'ใฏใใ',\n 'ใฏใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฏใใใใ',\n 'ใฐใใใฟ',\n 'ใฏใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฏใใ ใ',\n 'ใฑใใก',\n 'ใฑใใค',\n 'ใฏใใฆใ',\n 'ใฏใใจใ',\n 'ใฏใใฎใ',\n 'ใฏใใฑ',\n 'ใฏใใถใ',\n 'ใฏใใบใ',\n 'ใฏใใผใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฏใใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใค',\n 'ใฒใใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใใถใ',\n 'ใฒใใ',\n 'ใณใใ
ใคใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใใ',\n 'ใฒใ ใ',\n 'ใฒใใ',\n 'ใฒใคใ',\n 'ใฒใฃใใ',\n 'ใฒใฃใ',\n 'ใฒใคใใ
ใฒใ',\n 'ใฒใฃใ',\n 'ใฒใคใใ',\n 'ใดใฃใใ',\n 'ใดใฃใกใ',\n 'ใฒใคใใ',\n 'ใฒใฆใ',\n 'ใฒใจใใฟ',\n 'ใฒใชใพใคใ',\n 'ใฒใชใ',\n 'ใฒใญใ',\n 'ใฒใฏใ',\n 'ใฒใณใ',\n 'ใฒใฒใใ',\n 'ใฒใปใ',\n 'ใฒใพใใ',\n 'ใฒใพใ',\n 'ใฒใฟใค',\n 'ใฒใใ',\n 'ใฒใใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใณใใใ',\n 'ใฒใใใช',\n 'ใฒใใ',\n 'ใฒใใค',\n 'ใฒใใใ',\n 'ใฒใใพ',\n 'ใฒใใใใฟ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใ',\n 'ใฒใใใ',\n 'ใฒใใใ',\n 'ใฒใใใค',\n 'ใฒใใใ',\n 'ใฒใใใ
',\n 'ใฒใใใ',\n 'ใดใใก',\n 'ใฒใใฑใ',\n 'ใณใใผใ',\n 'ใตใใ',\n 'ใตใใใก',\n 'ใตใใใ',\n 'ใตใใใ',\n 'ใทใใใใ',\n 'ใตใใจใ',\n 'ใตใใต',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใใค',\n 'ใตใใถใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใฟ',\n 'ใตใใพ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใถใใซใ',\n 'ใตใใ',\n 'ใตใกใใ',\n 'ใตใคใ',\n 'ใตใคใ',\n 'ใตใฃใใค',\n 'ใตใฃใ',\n 'ใตใฃใใ',\n 'ใถใฉใ',\n 'ใตใจใ',\n 'ใตใจใ',\n 'ใตใฎใ',\n 'ใตใฏใ',\n 'ใตใฒใใ',\n 'ใตใธใ',\n 'ใตใพใ',\n 'ใตใฟใ',\n 'ใตใใค',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใ',\n 'ใตใใใ',\n 'ใถใใใ',\n 'ใถใใ',\n 'ใตใใใค',\n 'ใถใใใ',\n 'ใตใใใ',\n 'ใถใใฝใ',\n 'ใธใใใ',\n 'ใธใใใ',\n 'ใธใใใ',\n 'ใธใใ',\n 'ใธใใใ',\n 'ใธใใใ',\n 'ใธใใ',\n 'ใธใใใ',\n 'ใธใใใค',\n 'ใธใใ',\n 'ใธใใใ',\n 'ใธใใฆใ',\n 'ใธใใญใค',\n 'ใธใใ',\n 'ใธใใ',\n 'ใธใใ',\n 'ในใซใใ',\n 'ในใซใใใใ',\n 'ใธใใ',\n 'ใธใใใ',\n 'ในใใใใ',\n 'ในใใใ',\n 'ใธใใใ',\n 'ใธใใใ',\n 'ในใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใผใใใ',\n 'ใปใใใ',\n 'ใปใใใ',\n 'ใปใใปใ',\n 'ใปใใใ',\n 'ใปใใใค',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใใ',\n 'ใผใใ',\n 'ใปใใ',\n 'ใปใใค',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใค',\n 'ใปใใ
',\n 'ใปใใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใฆ',\n 'ใปใใ',\n 'ใฝใกใถใใ',\n 'ใปใฃใใใ',\n 'ใปใฃใ',\n 'ใปใฃใใ',\n 'ใปใจใใฉ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใ',\n 'ใปใใใค',\n 'ใปใใใ',\n 'ใพใใซใก',\n 'ใพใใ',\n 'ใพใใใ',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใใจ',\n 'ใพใใค',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใคใ',\n 'ใพใจใ',\n 'ใพใชใถ',\n 'ใพใฌใ',\n 'ใพใญใ',\n 'ใพใปใ',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใใใ',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใใ',\n 'ใพใใใค',\n 'ใพใใใ',\n 'ใพใใชใ',\n 'ใฟใใ',\n 'ใฟใใก',\n 'ใฟใใ',\n 'ใฟใใ',\n 'ใฟใใ',\n 'ใฟใใ',\n 'ใฟใใ',\n 'ใฟใใ',\n 'ใฟใใใ',\n 'ใฟใใ',\n 'ใฟใใใ',\n 'ใฟใใ',\n 'ใฟใฃใ',\n 'ใฟใคใใ',\n 'ใฟใคใใ',\n 'ใฟใฆใ',\n 'ใฟใจใใ',\n 'ใฟใชใจ',\n 'ใฟใชใฟใใใ',\n 'ใฟใญใใ',\n 'ใฟใฎใ',\n 'ใฟใฎใใ',\n 'ใฟใปใ',\n 'ใฟใใจ',\n 'ใฟใใ',\n 'ใฟใใ',\n 'ใฟใใใ',\n 'ใฟใใ',\n 'ใฟใใ',\n 'ใฟใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใกใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใผใ',\n 'ใใใใคใ',\n 'ใใใฐ',\n 'ใใใ
ใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใถ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใกใ
ใ',\n 'ใใชใใ',\n 'ใใฎใ',\n 'ใใใฟ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใถใค',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใพใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใ ใค',\n 'ใใพใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใฉใ',\n 'ใใใใใใ',\n 'ใใใฉใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใฆใ',\n 'ใใใใใณ',\n 'ใใกใใ',\n 'ใใฉใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ ใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใฟ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใกใ',\n 'ใใฃใจ',\n 'ใใฃใฑใ',\n 'ใใถใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใใใ',\n 'ใใใ',\n 'ใใใณใใใใ',\n 'ใใใน',\n 'ใใใใ',\n 'ใใใค',\n 'ใใใ
ใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใกใใ',\n 'ใใงใ',\n 'ใใซใ
ใ',\n 'ใใณใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ
ใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใกใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใผใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ
ใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใฃใ',\n 'ใใฆใ',\n 'ใใฉใใใ',\n 'ใใญใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใถ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใค',\n 'ใใใ ',\n 'ใใใใฐใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใฃใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใค',\n 'ใใใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใฆใ',\n 'ใใญใ',\n 'ใใใ',\n 'ใใ
ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใกใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใฐใ',\n 'ใใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใใ',\n 'ใใใจใ',\n 'ใใใผใ',\n 'ใใใ',\n 'ใใใ ใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใใ
ใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใ',\n 'ใใใใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใใ',\n 'ใใใ
ใค',\n 'ใใใ',\n 'ใใฆใ',\n 'ใใใ',\n 'ใใใค',\n 'ใใใ',\n 'ใใใฑ',\n 'ใใใถใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใ',\n 'ใใใใพ',\n 'ใใใใ',\n 'ใใใค',\n 'ใใใพใ',\n 'ใใใใใฎ',\n 'ใใใ',\n 'ใใใ'\n]\nwordList.space = 'ใ'\nexport { wordList }\n","/**\n * Transaction Verifier\n * ====================\n */\n'use strict'\n\nimport { Bn } from './bn'\nimport { Block } from './block'\nimport { Interp } from './interp'\nimport { Struct } from './struct'\nimport { Tx } from './tx'\nimport { Workers } from './workers'\n\nclass TxVerifier extends Struct {\n constructor (tx, txOutMap, errStr, interp) {\n super({ tx, txOutMap, errStr, interp })\n }\n\n /**\n * Verifies that the transaction is valid both by performing basic checks, such\n * as ensuring that no two inputs are the same, as well as by verifying every\n * script. The two checks are checkStr, which is analagous to bitcoind's\n * CheckTransaction, and verifyStr, which runs the script interpreter.\n *\n * This does NOT check that any possible claimed fees are accurate; checking\n * that the fees are accurate requires checking that the input transactions are\n * valid, which is not performed by this test. That check is done with the\n * normal verify function.\n */\n verify (flags = Interp.SCRIPT_ENABLE_SIGHASH_FORKID) {\n return !this.checkStr() && !this.verifyStr(flags)\n }\n\n /*\n * Returns true if the transaction was verified successfully (that is no\n * error was found), and false otherwise. In case an error was found the\n * error message can be accessed by calling this.getDebugString().\n */\n async asyncVerify (flags) {\n const verifyStr = await this.asyncVerifyStr(flags)\n return !this.checkStr() && !verifyStr\n }\n\n /**\n * Convenience method to verify a transaction.\n */\n static verify (tx, txOutMap, flags) {\n return new TxVerifier(tx, txOutMap).verify(flags)\n }\n\n static asyncVerify (tx, txOutMap, flags) {\n return new TxVerifier(tx, txOutMap).asyncVerify(flags)\n }\n\n /**\n * Check that a transaction passes basic sanity tests. If not, return a string\n * describing the error. This function contains the same logic as\n * CheckTransaction in bitcoin core.\n */\n checkStr () {\n // Basic checks that don't depend on any context\n if (this.tx.txIns.length === 0 || this.tx.txInsVi.toNumber() === 0) {\n this.errStr = 'transaction txIns empty'\n return this.errStr\n }\n if (this.tx.txOuts.length === 0 || this.tx.txOutsVi.toNumber() === 0) {\n this.errStr = 'transaction txOuts empty'\n return this.errStr\n }\n\n // Size limits\n if (this.tx.toBuffer().length > Block.MAX_BLOCK_SIZE) {\n this.errStr = 'transaction over the maximum block size'\n return this.errStr\n }\n\n // Check for negative or overflow output values\n let valueoutbn = new Bn(0)\n for (let i = 0; i < this.tx.txOuts.length; i++) {\n const txOut = this.tx.txOuts[i]\n if (txOut.valueBn.lt(0)) {\n this.errStr = 'transaction txOut ' + i + ' negative'\n return this.errStr\n }\n if (txOut.valueBn.gt(Tx.MAX_MONEY)) {\n this.errStr = 'transaction txOut ' + i + ' greater than MAX_MONEY'\n return this.errStr\n }\n valueoutbn = valueoutbn.add(txOut.valueBn)\n if (valueoutbn.gt(Tx.MAX_MONEY)) {\n this.errStr =\n 'transaction txOut ' + i + ' total output greater than MAX_MONEY'\n return this.errStr\n }\n }\n\n // Check for duplicate inputs\n const txInmap = {}\n for (let i = 0; i < this.tx.txIns.length; i++) {\n const txIn = this.tx.txIns[i]\n const inputid = txIn.txHashBuf.toString('hex') + ':' + txIn.txOutNum\n if (txInmap[inputid] !== undefined) {\n this.errStr = 'transaction input ' + i + ' duplicate input'\n return this.errStr\n }\n txInmap[inputid] = true\n }\n\n if (this.tx.isCoinbase()) {\n const buf = this.tx.txIns[0].script.toBuffer()\n if (buf.length < 2 || buf.length > 100) {\n this.errStr = 'coinbase trasaction script size invalid'\n return this.errStr\n }\n } else {\n for (let i = 0; i < this.tx.txIns.length; i++) {\n if (this.tx.txIns[i].hasNullInput()) {\n this.errStr = 'transaction input ' + i + ' has null input'\n return this.errStr\n }\n }\n }\n return false\n }\n\n /**\n * verify the transaction inputs by running the script interpreter. Returns a\n * string of the script interpreter is invalid, otherwise returns false.\n */\n verifyStr (flags) {\n for (let i = 0; i < this.tx.txIns.length; i++) {\n if (!this.verifyNIn(i, flags)) {\n this.errStr = 'input ' + i + ' failed script verify'\n return this.errStr\n }\n }\n return false\n }\n\n async asyncVerifyStr (flags) {\n for (let i = 0; i < this.tx.txIns.length; i++) {\n const verifyNIn = await this.asyncVerifyNIn(i, flags)\n if (!verifyNIn) {\n this.errStr = 'input ' + i + ' failed script verify'\n return this.errStr\n }\n }\n return false\n }\n\n /**\n * Verify a particular input by running the script interpreter. Returns true if\n * the input is valid, false otherwise.\n */\n verifyNIn (nIn, flags) {\n const txIn = this.tx.txIns[nIn]\n const scriptSig = txIn.script\n const txOut = this.txOutMap.get(txIn.txHashBuf, txIn.txOutNum)\n if (!txOut) {\n console.log('output ' + txIn.txOutNum + ' not found')\n return false\n }\n const scriptPubKey = txOut.script\n const valueBn = txOut.valueBn\n this.interp = new Interp()\n const verified = this.interp.verify(\n scriptSig,\n scriptPubKey,\n this.tx,\n nIn,\n flags,\n valueBn\n )\n return verified\n }\n\n async asyncVerifyNIn (nIn, flags) {\n const txIn = this.tx.txIns[nIn]\n const scriptSig = txIn.script\n const txOut = this.txOutMap.get(txIn.txHashBuf, txIn.txOutNum)\n if (!txOut) {\n console.log('output ' + txIn.txOutNum + ' not found')\n return false\n }\n const scriptPubKey = txOut.script\n const valueBn = txOut.valueBn\n this.interp = new Interp()\n const workersResult = await Workers.asyncObjectMethod(\n this.interp,\n 'verify',\n [scriptSig, scriptPubKey, this.tx, nIn, flags, valueBn]\n )\n const verified = JSON.parse(workersResult.resbuf.toString())\n return verified\n }\n\n getDebugObject () {\n return {\n errStr: this.errStr,\n interpFailure: this.interp ? this.interp.getDebugObject() : undefined\n }\n }\n\n getDebugString () {\n return JSON.stringify(this.getDebugObject(), null, 2)\n }\n}\n\nexport { TxVerifier }\n","/**\n * bsv\n * ===\n *\n * entry.js is the entry point for a the js bundlers.\n * Webpack and microbundlers, both start use this file as\n * the entry point to bundle the entire library.\n */\nimport aes from 'aes'\nimport bnjs from 'bn.js'\nimport bs58 from 'bs58'\n\nimport elliptic from 'bitcoin-elliptic'\nimport hashjs from 'hash.js'\nimport pbkdf2 from 'pbkdf2'\n\n// Dependencies, subject to change.\nconst deps = {\n aes,\n bnjs,\n bs58,\n elliptic,\n hashjs,\n pbkdf2\n}\n\nexport { deps }\n\n// version string.\nexport { version } from './package.json'\n\n// Main bitcoin library - bitcoin protocols, standards, cryptography, and\n// utilities.\nexport * from './lib/address'\nexport * from './lib/bip-32'\nexport * from './lib/bip-39'\nexport * from './lib/bip-39-words'\nexport * from './lib/bn'\nexport * from './lib/br'\nexport * from './lib/bsm'\nexport * from './lib/bw'\nexport * from './lib/base-58'\nexport * from './lib/base-58-check'\nexport * from './lib/block'\nexport * from './lib/block-header'\nexport * from './lib/constants'\nexport * from './lib/ecdsa'\nexport * from './lib/hash'\nexport * from './lib/interp'\nexport * from './lib/key-pair'\nexport * from './lib/op-code'\nexport * from './lib/point'\nexport * from './lib/priv-key'\nexport * from './lib/pub-key'\nexport * from './lib/random'\nexport * from './lib/script'\nexport * from './lib/sig'\nexport * from './lib/struct'\nexport * from './lib/tx'\nexport * from './lib/tx-builder'\nexport * from './lib/tx-in'\nexport * from './lib/tx-out'\nexport * from './lib/tx-out-map'\nexport * from './lib/tx-verifier'\nexport * from './lib/var-int'\nexport * from './lib/workers'\nexport * from './lib/workers-result'\nexport * from './lib/cmp'\n\n// Encryption tools. Some bitcoin standards use Aes encryption, so that's why\n// these are available.\nexport * from './lib/ach'\nexport * from './lib/aes'\nexport * from './lib/aescbc'\nexport * from './lib/cbc'\nexport * from './lib/ecies'\n"],"sourceRoot":""} |