{"version":3,"sources":["webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/lodash.isboolean/index.js","webpack:///./node_modules/core-js/modules/_advance-string-index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/hash-base/node_modules/safe-buffer/index.js","webpack:///./node_modules/vm-browserify/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/jws/lib/tostring.js","webpack:///./node_modules/jsonwebtoken/verify.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/ms/index.js","webpack:///./node_modules/jsonwebtoken/index.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/jws/lib/verify-stream.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/jsonwebtoken/sign.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/jsonwebtoken/lib/JsonWebTokenError.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/ecdsa-sig-formatter/src/param-bytes-for-alg.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/jws/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/jsonwebtoken/decode.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./src/views/Login.vue?fe08","webpack:///./node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/lodash.isinteger/index.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/core-js/modules/_regexp-exec.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/lodash.isnumber/index.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/jws/lib/sign-stream.js","webpack:///./node_modules/jsonwebtoken/lib/TokenExpiredError.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/jwa/index.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/elliptic/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/ecdsa-sig-formatter/src/ecdsa-sig-formatter.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/semver/semver.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/lodash.isstring/index.js","webpack:///./node_modules/lodash.includes/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/jws/lib/data-stream.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./src/views/Login.vue?77ba","webpack:///src/views/Login.vue","webpack:///./src/views/Login.vue?66fe","webpack:///./src/views/Login.vue","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/core-js/modules/es6.regexp.exec.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/buffer-equal-constant-time/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/state.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/asn1.js/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/lodash.isplainobject/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/errors-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/lodash.once/index.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack:///./node_modules/jsonwebtoken/lib/psSupported.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/jsonwebtoken/lib/NotBeforeError.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/jsonwebtoken/lib/timespan.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/browserify-sign/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/hash-base/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/brorand/index.js"],"names":["primes","DH","getDiffieHellman","mod","prime","Buffer","gen","ENCODINGS","createDiffieHellman","enc","generator","genc","isBuffer","undefined","generatePrime","exports","DiffieHellmanGroup","createDiffieHellmanGroup","DiffieHellman","assert","val","msg","Error","inherits","ctor","superCtor","super_","TempCtor","prototype","constructor","BN","number","base","endian","isBN","this","negative","words","length","red","_init","module","wordSize","e","parseHex","str","start","end","r","len","Math","min","i","c","charCodeAt","parseBase","mul","num","Array","isArray","max","left","right","cmp","_initNumber","_initArray","toString","replace","_parseHex","_parseBase","strip","toArray","ceil","j","w","off","limbLen","limbPow","total","word","imuln","_iaddn","pow","copy","dest","clone","_expand","size","_normSign","inspect","zeros","groupSizes","groupBases","toBitArray","bitLength","bit","wbit","smallMulTo","self","out","a","b","lo","carry","k","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","toNumber","ret","toJSON","toBuffer","toArrayLike","ArrayType","byteLength","reqLength","littleEndian","res","q","andln","iushrn","clz32","_countBits","t","_zeroBits","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","iadd","isub","add","sub","comb10MulTo","mid","o","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","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","imul","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","bigMulTo","hncarry","jumboMulTo","fftm","FFTM","mulp","x","y","mulTo","makeRBT","N","l","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","s","rtwdf","cos","PI","itwdf","sin","p","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","round","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","shift","_wordDiv","mode","bhi","bhiBits","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","D","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","k256","p224","p192","p25519","MPrime","name","tmp","_tmp","K256","call","P224","P192","P25519","_prime","Mont","imod","rinv","minv","ireduce","rlen","split","imulK","input","output","outLen","prev","next","mod3","one","nOne","lpow","z","inv","windowSize","wnd","current","currentLen","mont","u","encrypt","block","_cipher","encryptBlock","decrypt","decryptBlock","Cipher","options","type","blockSize","buffer","bufferOff","update","data","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","_update","inputOff","outputOff","count","final","first","last","_finalEncrypt","_finalDecrypt","concat","_pad","_unpad","equal","constants","_reverse","map","Object","keys","forEach","key","value","der","toInteger","defined","TO_STRING","that","pos","String","charAt","slice","boolTag","objectProto","objectToString","isBoolean","isObjectLike","at","S","index","unicode","ERR_INVALID_OPT_VALUE","codes","highWaterMarkFrom","isDuplex","duplexKey","highWaterMark","getHighWaterMark","state","hwm","isFinite","floor","objectMode","copyProps","src","dst","SafeBuffer","arg","encodingOrOffset","from","alloc","allocUnsafe","allocUnsafeSlow","create","TypeError","fill","encoding","buf","SlowBuffer","indexOf","xs","item","Object_keys","obj","push","fn","defineProp","defineProperty","writable","enumerable","configurable","globals","Context","Script","code","runInContext","context","iframe","document","createElement","style","display","body","appendChild","win","contentWindow","wEval","eval","wExecScript","execScript","winKeys","removeChild","runInThisContext","runInNewContext","createContext","apply","arguments","isContext","createScript","utils","SHA256","SHA224","outSize","hmacStrength","padLength","_digest","toHex32","split32","Hash","K","W","Sha","init","_w","rotl5","rotl30","ft","d","_a","_b","_c","_d","_e","M","readInt32BE","_hash","H","writeInt32BE","Transform","_require$codes","ERR_METHOD_NOT_IMPLEMENTED","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","Duplex","afterTransform","er","ts","_transformState","transforming","cb","writecb","emit","writechunk","rs","_readableState","reading","needReadable","_read","bind","needTransform","writeencoding","sync","_transform","flush","_flush","on","prefinish","_this","destroyed","done","stream","_writableState","chunk","_write","_destroy","err","err2","aes","StreamCipher","iv","AES","_prev","_cache","_secCache","_decrypt","_mode","_final","scrub","PassThrough","des","des3","anObject","result","global","ignoreCase","multiline","sticky","pre","curves","hash","curve","PresetCurve","short","edwards","validate","isInfinity","defineCurve","get","sha256","gRed","sha384","sha512","beta","lambda","basis","proto","CBCState","instantiate","Base","CBC","_cbcInit","_cbcState","inp","inOff","outOff","superProto","JSON","stringify","JsonWebTokenError","NotBeforeError","TokenExpiredError","decode","timespan","PS_SUPPORTED","jws","PUB_KEY_ALGS","RSA_KEY_ALGS","HS_ALGS","splice","jwtString","secretOrPublicKey","callback","assign","clockTimestamp","nonce","trim","Date","now","decodedToken","parts","complete","getSecret","header","secretCallback","message","valid","hasSignature","algorithms","alg","verify","payload","nbf","ignoreNotBefore","clockTolerance","exp","ignoreExpiration","audience","audiences","target","aud","match","some","targetAudience","RegExp","test","join","issuer","invalid_issuer","iss","subject","jwtid","jti","maxAge","iat","maxAgeTimestamp","signature","parseKeys","mgf","crt","createHash","withPublic","oaep","modulus","iHash","digest","hLen","maskedSeed","maskedDb","seed","db","compare","pkcs1","reverse","p1","status","ps","dif","privateKey","zBuffer","MAX_BYTES","MAX_UINT32","oldBrowser","crypto","msCrypto","randomBytes","RangeError","bytes","generated","getRandomValues","process","nextTick","common","shaCommon","rotl32","sum32","sum32_5","ft_1","BlockHash","sha1_K","SHA1","parse","exec","parseFloat","toLowerCase","fmtShort","ms","msAbs","fmtLong","plural","isPlural","long","sign","DES","EDE","DataStream","jwa","Stream","util","JWS_REGEX","isObject","thing","safeJsonParse","headerFromJWS","jwsSig","encodedHeader","securedInputFromJWS","signatureFromJWS","payloadFromJWS","isValidJws","string","jwsVerify","algorithm","secretOrKey","securedInput","algo","jwsDecode","opts","typ","json","VerifyStream","secret","publicKey","secretStream","readable","once","isValid","CorkedRequest","entry","finish","onCorkedFinish","Writable","WritableState","internalUtil","deprecate","OurUint8Array","Uint8Array","_uint8ArrayToBuffer","_isUint8Array","realHasInstance","destroyImpl","_require","ERR_INVALID_ARG_TYPE","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","errorOrDestroy","nop","writableObjectMode","finalCalled","needDrain","ending","ended","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","bufferProcessing","onwrite","writelen","bufferedRequest","lastBufferedRequest","pendingcb","prefinished","errorEmitted","emitClose","autoDestroy","bufferedRequestCount","corkedRequestsFree","write","writev","_writev","destroy","writeAfterEnd","validChunk","decodeChunk","writeOrBuffer","isBuf","newChunk","doWrite","onwriteError","finishMaybe","onwriteStateUpdate","needFinish","clearBuffer","afterWrite","onwriteDrain","holder","allBuffers","callFinal","need","rState","endEmitted","endWritable","corkReq","getBuffer","Symbol","hasInstance","Function","object","pipe","cork","uncork","setDefaultEncoding","set","_undestroy","undestroy","Legacy","md5","RIPEMD160","sha","ZEROS","Hmac","blocksize","_alg","_key","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","createHmac","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers","dh","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","CipherBase","modes","modeName","_des","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","arr","curByte","tripletToBase64","encodeChunk","uint8","extraBytes","maxChunkLength","len2","EDEState","k1","k2","k3","ciphers","_edeState","ZERO_BUF","subtle","toBrowser","checks","checkNative","browser","Promise","resolve","importKey","deriveBits","prom","browserPbkdf2","then","catch","password","salt","iterations","resolvePromise","promise","keylen","checkParameters","resp","decoders","pem","inner","outer","redefine","hide","fails","wks","regexpExec","SPECIES","REPLACE_SUPPORTS_NAMED_GROUPS","groups","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","KEY","SYMBOL","DELEGATES_TO_SYMBOL","O","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","fns","nativeMethod","regexp","arg2","forceStringMethod","strfn","rxfn","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","_require2","custom","copyBuffer","offset","BufferList","head","tail","v","hasStrings","_getString","_getBuffer","nb","depth","customInspect","includes","isInteger","isNumber","isPlainObject","isString","SUPPORTED_ALGS","sign_options_schema","expiresIn","notBefore","noTimestamp","keyid","mutatePayload","registered_claims_schema","schema","allowUnknown","parameterName","validator","validateOptions","validatePayload","options_to_payload","options_for_objects","secretOrPrivateKey","isObjectPayload","kid","failure","error","invalid_options","opt","timestamp","claim","_this2","captureStackTrace","asn1","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tag","certificate","tbsCertificate","subjectPublicKeyInfo","PublicKey","RSAPublicKey","subjectPublicKey","subjectPrivateKey","params","pub_key","DSAparam","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","kde","kdeparams","iters","parseInt","cipher","cipherText","getParamSize","keySize","paramBytesForAlg","ES256","ES384","ES512","getParamBytesForAlg","paramBytes","descriptors","formatRegExp","format","f","objects","args","Number","isNull","noDeprecation","warned","deprecated","throwDeprecation","traceDeprecation","console","trace","debugEnviron","debugs","seen","stylize","stylizeNoColor","colors","showHidden","_extend","isUndefined","stylizeWithColor","formatValue","styleType","styles","arrayToHash","array","idx","recurseTimes","isFunction","primitive","formatPrimitive","visibleKeys","getOwnPropertyNames","isError","formatError","isRegExp","isDate","braces","toUTCString","formatArray","formatProperty","pop","reduceToSingleString","simple","hasOwnProperty","desc","line","substr","reduce","cur","numLinesEst","ar","isNullOrUndefined","isSymbol","isPrimitive","pad","debuglog","NODE_DEBUG","toUpperCase","pid","months","time","getHours","getMinutes","getSeconds","getDate","getMonth","prop","log","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","newReason","callbackify","original","callbackified","maybeCb","rej","setPrototypeOf","getPrototypeOf","promisify","promiseResolve","promiseReject","reject","ShortCurve","conf","tinv","two","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","BasePoint","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","l1","l2","prevR","aprxSqrt","y1","y2","len1","_endoSplit","v1","v2","c1","c2","p2","q1","q2","pointFromX","zero","point","ax","rhs","_endoWnafMulAdd","points","coeffs","jacobianResult","npoints","ncoeffs","_getBeta","_wnafMulAdd","pointFromJSON","fromJSON","precomputed","endoMul","naf","doubles","step","obj2point","dbl","nx","ny","ys1","dyinv","getX","getY","_hasDoubles","_fixedNafMul","_wnafMul","mulAdd","jmulAdd","_precompute","negate","toJ","jpoint","toP","zinv","zinv2","ay","pz2","z2","u1","u2","s1","s2","h2","h3","nz","mixedAdd","dblp","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","t1","t2","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","xc","redN","elliptic","version","rand","ec","eddsa","Readable","pipeline","SignStream","ALGORITHMS","encoders","encryptStart","DEREncoder","entity","tree","DERNode","parent","Node","encodeTag","cls","reporter","tagByName","tagClassByName","encode","_encode","_encodeComposite","content","encodedTag","_createEncoderBuffer","lenOctets","_encodeStr","unused","writeUInt16BE","_isNumstr","_isPrintstr","_encodeObjid","id","values","relative","ident","objid","_encodeTime","date","getFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","_encodeNull","_encodeInt","numArray","unshift","_encodeBool","_use","_getEncoder","_skipDefault","dataBuffer","_baseState","defaultBuffer","_encodeValue","parseBytes","cachedProperty","KeyPair","_secret","isPoint","pub","_pub","_pubBytes","fromPublic","fromSecret","encodePoint","decodePoint","priv","lastIx","encodingLength","decodeInt","privBytes","sig","getPublic","pubBytes","jwt","decoded","move","_strip","_move","for","modrn","allocate","postfix","_toArrayLikeLE","position","_toArrayLikeBE","isNegNum","asUInt32Array","readUInt32BE","scrubVec","cryptBlock","keySchedule","SUB_MIX","SBOX","nRounds","t0","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","_reset","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","writeUInt32BE","m1","EdwardsCurve","twisted","mOneA","dd","oneC","_mulA","_mulC","lhs","pointFromY","normalize","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","other","ZEROES","fromArray","GHASH","cache","ghash","_multiply","lsbVi","Vi","Zi","abl","bl","define","seq","int","use","AlgorithmIdentifier","bitstr","null_","optional","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","explicit","ECParameters","choice","namedCurve","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","read","onReadable","wrapForNext","lastPromise","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","asyncIterator","createReadableStreamAsyncIterator","_Object$create","iterator","Reporter","DecoderBuffer","EncoderBuffer","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","unpad","padded","suite","config","setAutoPadding","setTo","autoPadding","ReadableState","EventEmitter","EElistenerCount","emitter","listeners","debug","debugUtil","StringDecoder","ERR_STREAM_PUSH_AFTER_EOF","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","kProxyEvents","prependListener","event","_events","readableObjectMode","pipes","pipesCount","flowing","emittedReadable","readableListening","resumeScheduled","paused","awaitDrain","readingMore","decoder","readableAddChunk","addToFront","skipChunkCheck","onEofChunk","chunkInvalid","addChunk","maybeReadMore","emitReadable","isPaused","setEncoding","clear","MAX_HWM","computeNewHighWaterMark","howMuchToRead","emitReadable_","flow","maybeReadMore_","pipeOnDrain","updateReadableListening","listenerCount","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","nOrig","doRead","pipeOpts","doEnd","stdout","stderr","endFn","onend","unpipe","onunpipe","unpipeInfo","hasUnpiped","cleanup","ondrain","cleanedUp","removeListener","onclose","onfinish","onerror","ondata","pause","dests","ev","addListener","removeAllListeners","wrap","method","_fromList","iterable","ERR_STREAM_PREMATURE_CLOSE","called","_len","noop","isRequest","setHeader","abort","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","req","Signature","R","_R","_S","_Rencoded","Rencoded","_Sencoded","Sencoded","encodeInt","toBytes","toHex","pna","readableDestroyed","writableDestroyed","emitErrorNT","emitCloseNT","emitErrorAndCloseNT","INFINITY","MAX_INTEGER","NAN","symbolTag","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toFinite","remainder","valueOf","isBinary","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","ip","_encrypt","lStart","rStart","keyL","keyR","expand","substitute","rip","Sha512","Ch","maj","sigma0","xl","sigma1","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","ah","bh","ch","eh","fh","gh","hh","al","cl","dl","el","fl","gl","hl","xh","gamma0","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","getBlock","regexpFlags","nativeExec","nativeReplace","patchedExec","LAST_INDEX","UPDATES_LAST_INDEX_WRONG","re1","re2","NPCG_INCLUDED","PATCH","lastIndex","reCopy","encryptByte","byteParam","shiftIn","paddedMsg","publicExponent","MillerRabin","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","setPublicKey","setPrivateKey","_priv","primeCache","checkPrime","hex","rem","simpleSieve","fermatTest","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","bn","__gen","generateKeys","_gen","getPublicKey","computeSecret","getPrime","front","getPrivateKey","getGenerator","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","any","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","bool","def","TBSCertificate","implicit","X509Certificate","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","limit","n2","sha1","sha224","MD5","objectKeys","allowHalfOpen","onEndNT","inL","inR","outL","outR","pc2table","sTable","sb","permuteTable","padSplit","group","classof","builtinExec","save","restore","isEmpty","readUInt8","fail","skip","_reporterState","raw","hashMode","_finalOrDigest","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_toString","getAuthTag","setAuthTag","setAAD","fin","MontCurve","i4","a24","precompute","aa","bb","diffAdd","da","jumlAdd","numberTag","Algorithm","HmacDRBG","predResist","minEntropy","_reseed","reseedInterval","V","entropy","entropyEnc","nonceEnc","pers","persEnc","_hmac","hmac","kmac","reseed","addEnc","generate","temp","incr32","chunkNum","base64url","jwsSecuredInput","encodedPayload","jwsSign","expiredAt","sum32_4","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","EC","hashType","signType","ecSign","dsaSign","curveId","keyFromPrivate","toDER","bits2int","kv","getKey","makeKey","makeR","hlen","hbits","bits2octets","obits","Sha256","Sha224","_f","_g","_h","safeBuffer","randombytes","kBufferMaxLength","kMaxLength","kMaxUint32","assertOffset","assertSize","actualFill","ourBuf","uint","zero2","bufferEqual","formatEcdsa","MSG_INVALID_ALGORITHM","MSG_INVALID_SECRET","MSG_INVALID_VERIFIER_KEY","MSG_INVALID_SIGNER_KEY","supportsKeyObjects","createPublicKey","checkIsPublicKey","typeError","asymmetricKeyType","export","checkIsPrivateKey","checkIsSecretKey","fromBase64","base64","toBase64","template","errMsg","bufferOrString","normalizeInput","createHmacSigner","createHmacVerifier","computedSig","createKeySigner","signer","createKeyVerifier","verifier","createPSSKeySigner","RSA_PKCS1_PSS_PADDING","saltLength","RSA_PSS_SALTLEN_DIGEST","createPSSKeyVerifier","createECDSASigner","derToJose","createECDSAVerifer","joseToDer","createNoneSigner","createNoneVerifier","signerFactories","hs","es","none","verifierFactories","brorand","Rand","_randbelow","min_bytes","_randrange","stop","rone","n1","rn1","getDivisor","checkBuffer","MAX_ALLOC","isEncoding","_normalizeEncoding","retried","normalizeEncoding","nenc","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckIncomplete","utf8CheckExtraBytes","utf8Text","utf8End","ripemd","ripemd160","Sha1","rotl1","bignum","xorTest","calcIv","ck","_finID","toPad","ivBits","writeUIntBE","_ghash","_alen","_authTag","_called","rump","tags","methods","overrided","children","reverseArgs","useDecoder","contains","_wrap","stateProps","cstate","child","_useArgs","newKey","_decode","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","node","_encodeChoice","_encodePrimitive","PEMEncoder","label","PADDING","equals","padBuff","writeUInt8","MAX_OCTET","CLASS_UNIVERSAL","PRIMITIVE_BIT","TAG_SEQ","TAG_INT","ENCODED_TAG_SEQ","ENCODED_TAG_INT","base64Url","signatureAsBuffer","maxEncodedParamLength","inputLength","seqLength","rLength","rOffset","sLength","sOffset","rPadding","sPadding","countPadding","needsSign","signatureBytes","rsBytes","shortLength","tagClass","0","1","2","3","SHA512","SHA384","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","MAINVERSION","MAINVERSIONLOOSE","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","PRERELEASE","PRERELEASELOOSE","BUILDIDENTIFIER","BUILD","FULL","FULLPLAIN","LOOSEPLAIN","LOOSE","GTLT","XRANGEIDENTIFIERLOOSE","XRANGEIDENTIFIER","XRANGEPLAIN","XRANGEPLAINLOOSE","XRANGE","XRANGELOOSE","COERCE","LONETILDE","TILDETRIM","tildeTrimReplace","TILDE","TILDELOOSE","LONECARET","CARETTRIM","caretTrimReplace","CARET","CARETLOOSE","COMPARATORLOOSE","COMPARATOR","COMPARATORTRIM","comparatorTrimReplace","HYPHENRANGE","HYPHENRANGELOOSE","STAR","loose","includePrerelease","SemVer","clean","major","minor","patch","prerelease","build","inc","release","identifier","version1","version2","prefix","defaultResult","compareMain","comparePre","compareIdentifiers","isNaN","numeric","anum","bnum","rcompareIdentifiers","compareLoose","rcompare","sort","list","rsort","neq","op","Comparator","comp","semver","ANY","operator","Range","range","parseRange","toComparators","parseComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","pr","replaceCaret","replaceXRange","gtlt","xM","xm","anyX","hyphenReplace","$0","fM","fm","fp","fpr","fb","to","tM","tm","tp","tpr","tb","testSet","allowed","satisfies","maxSatisfying","versions","maxSV","rangeObj","minSatisfying","minSV","minVersion","minver","comparators","comparator","compver","validRange","ltr","outside","gtr","hilo","gtfn","ltefn","ltfn","ecomp","high","low","parsed","intersects","r1","coerce","rangeTmp","sameDirectionIncreasing","sameDirectionDecreasing","sameSemVer","differentDirectionsInclusive","oppositeDirectionsLessThan","oppositeDirectionsGreaterThan","comps","hr","compRe","thisComparators","every","thisComparator","rangeComparators","rangeComparator","DERDecoder","PEMDecoder","lines","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","rt","LN2","throwIfNotStringOrBuffer","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","EDDSA","pointClass","keyFromSecret","hashInt","messagePrefix","s_","makeSignature","keyFromPublic","SG","RplusAh","intFromLE","normed","xIsOdd","aesModes","desModes","keyLen","ivLen","arg1","arg3","ecVerify","dsaVerify","padNum","pubkey","unpacked","checkValue","montp","stringTag","argsTag","funcTag","genTag","reIsUint","arrayMap","iteratee","baseFindIndex","predicate","fromIndex","fromRight","baseIndexOf","baseIsNaN","baseTimes","baseValues","overArg","func","propertyIsEnumerable","nativeKeys","nativeMax","arrayLikeKeys","inherited","isArguments","skipIndexes","isIndex","baseKeys","isPrototype","Ctor","collection","guard","isArrayLike","isArrayLikeObject","isLength","_inheritsLoose","subClass","superClass","__proto__","createErrorType","getMessage","NodeError","_Base","oneOf","expected","startsWith","search","endsWith","this_len","substring","actual","determiner","pVersionMajor","toObject","toLength","advanceStringIndex","regExpExec","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","maybeToString","it","REPLACE","$replace","maybeCallNative","searchValue","replaceValue","functionalReplace","fullUnicode","results","matchStr","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","replacement","getSubstitution","tailPos","capture","render","_vm","$createElement","_self","staticClass","back","_v","_m","attrs","directives","rawName","expression","domProps","$event","composing","email","preventDefault","loginWithPassword","verificationCodeEmailSent","stopPropagation","sendLoginVerificationCode","_s","ref","verificationCode","limitToSixDigits","staticRenderFns","component","blind","getr","blinder","unblinder","blinds","blinded","prime1","prime2","qinv","coefficient","exponent1","m2","exponent2","rotr32","p32","ERR_MISSING_ARGS","destroyer","closed","popCallback","streams","destroys","hLen2","dblen","nonZero","readableHwm","readableHighWaterMark","defaultHwm","needMoreData","fromListPartial","copyFromBufferString","copyFromBuffer","increasedAwaitDrain","EVP_BytesToKey","keyBits","used","keyStart","ivStart","forced","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","c0_hi","c1_hi","c2_hi","s0_512_lo","c0_lo","c1_lo","c2_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","ARRAY16","zr","sl","sr","rotl","fn1","fn2","fn3","fn4","fn5","readInt32LE","br","cr","dr","tl","tr","writeUInt32LE","writeInt32LE","bufferEq","install","origBufEqual","origSlowBufEqual","ieee754","typedArraySupport","foo","subarray","TYPED_ARRAY_SUPPORT","createBuffer","ArrayBuffer","fromArrayBuffer","fromString","fromObject","checked","fromArrayLike","byteOffset","isnan","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","decodeCodePointsArray","INSPECT_MAX_BYTES","poolSize","_augment","species","_isBuffer","swap16","swap32","swap64","thisStart","thisEnd","thisCopy","targetCopy","_arr","MAX_ARGUMENTS_LENGTH","codePoints","fromCharCode","checkOffset","ext","checkInt","objectWriteUInt16","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","maxBytes","writeUInt16LE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","base64clean","stringtrim","units","leadSurrogate","byteArray","finalSize","_finalSize","accum","assigned","lowBits","highBits","_hashType","_tag","_signType","_importDER","recoveryParam","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","slen","backHalf","warn","localStorage","Sha384","nh","keyPair","fromPrivate","genKeyPair","drbg","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kp","kpX","canonical","sinv","_maxwellTrick","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","modeModules","ECB","CFB","CFB8","CFB1","OFB","CTR","GCM","_importPrivate","privEnc","_importPublic","pubEnc","compact","derive","sum32_3","Kh","E","Ah","Bh","Dh","Eh","T","rh","sh","isSurrogatePair","htonl","zero8","join32","objectTag","isHostObject","funcProto","funcToString","objectCtorString","getPrototype","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","possibleEnd","numstr","printstr","identifiers","subident","second","year","mon","day","hour","sec","UTC","_getDecoder","errors","ReporterError","rethrow","pathLen","elem","stack","partial","EE","_isStdio","didOnEnd","asyncWrite","setImmediate","writableHwm","writableHighWaterMark","sizes","rmd160","saltLen","getDigest","ipad1","ipad2","shaFunc","rmd160Func","DK","block1","destPos","run","U","ECDH","aliases","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","inenc","otherPub","getNAF","getJSF","BaseCurve","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","_getDoubles","I","nafW","repr","nafPoints","_getNAFPoints","defW","wndWidth","comb","jsf","ja","jb","encodeCompressed","power","FUNC_ERROR_TEXT","before","pending","pendingTotal","_delta8","_delta32","api","Entity","_createNamed","named","_initNamed","minAssert","minUtils","m8","d1","d2","m14","m24","computer","i2ops","milliseconds","fnF","fnG","fnH","fnI","ReflectOwnKeys","Reflect","ReflectApply","receiver","ProcessEmitWarning","warning","NumberIsNaN","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","_addListener","prepend","events","existing","newListener","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","spliceOne","setMaxListeners","getMaxListeners","doError","handler","prependOnceListener","originalListener","rawListeners","eventNames","deciphers","_rand","getBytes","getByte","window"],"mappings":"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AkBS,EAAMC,GACvC,GAAIA,EAAW,CACbD,EAAKE,OAASD,EACd,IAAIE,EAAW,aACfA,EAASC,UAAYH,EAAUG,UAC/BJ,EAAKI,UAAY,IAAID,EACrBH,EAAKI,UAAUC,YAAcL,K,uCCvBnCiB,EAAO1B,QAAU,CACf2vC,QAAS,CACPC,KAAM,EACNb,OAAQ,CACN,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,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,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,sEAINW,IAAK,CACHz1B,IAAK,EACL80B,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,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,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,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,wE,kCCnwBR,IAAI5K,EAAO,EAAQ,QAEnBnkC,EAAQ4kC,YAAc,EAAQ,QAE9B,IAAIY,EAAgBrB,EAAKga,OAAO,iBAAiB,WAC/C/8C,KAA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","file":"js/login.ba98ea42.js","sourcesContent":["var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\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 for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\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 len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n 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 return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","var constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n var res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n var value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\nfunction isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && objectToString.call(value) == boolTag);\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isBoolean;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\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};","/* 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","var indexOf = function (xs, item) {\n if (xs.indexOf) return xs.indexOf(item);\n else for (var i = 0; i < xs.length; i++) {\n if (xs[i] === item) return i;\n }\n return -1;\n};\nvar Object_keys = function (obj) {\n if (Object.keys) return Object.keys(obj)\n else {\n var res = [];\n for (var key in obj) res.push(key)\n return res;\n }\n};\n\nvar forEach = function (xs, fn) {\n if (xs.forEach) return xs.forEach(fn)\n else for (var i = 0; i < xs.length; i++) {\n fn(xs[i], i, xs);\n }\n};\n\nvar defineProp = (function() {\n try {\n Object.defineProperty({}, '_', {});\n return function(obj, name, value) {\n Object.defineProperty(obj, name, {\n writable: true,\n enumerable: false,\n configurable: true,\n value: value\n })\n };\n } catch(e) {\n return function(obj, name, value) {\n obj[name] = value;\n };\n }\n}());\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',\n'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',\n'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',\n'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',\n'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript (code) {\n if (!(this instanceof Script)) return new Script(code);\n this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n if (!(context instanceof Context)) {\n throw new TypeError(\"needs a 'context' argument.\");\n }\n \n var iframe = document.createElement('iframe');\n if (!iframe.style) iframe.style = {};\n iframe.style.display = 'none';\n \n document.body.appendChild(iframe);\n \n var win = iframe.contentWindow;\n var wEval = win.eval, wExecScript = win.execScript;\n\n if (!wEval && wExecScript) {\n // win.eval() magically appears when this is called in IE:\n wExecScript.call(win, 'null');\n wEval = win.eval;\n }\n \n forEach(Object_keys(context), function (key) {\n win[key] = context[key];\n });\n forEach(globals, function (key) {\n if (context[key]) {\n win[key] = context[key];\n }\n });\n \n var winKeys = Object_keys(win);\n\n var res = wEval.call(win, this.code);\n \n forEach(Object_keys(win), function (key) {\n // Avoid copying circular objects like `top` and `window` by only\n // updating existing context properties or new properties in the `win`\n // that was only introduced after the eval.\n if (key in context || indexOf(winKeys, key) === -1) {\n context[key] = win[key];\n }\n });\n\n forEach(globals, function (key) {\n if (!(key in context)) {\n defineProp(context, key, win[key]);\n }\n });\n \n document.body.removeChild(iframe);\n \n return res;\n};\n\nScript.prototype.runInThisContext = function () {\n return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n var ctx = Script.createContext(context);\n var res = this.runInContext(ctx);\n\n if (context) {\n forEach(Object_keys(ctx), function (key) {\n context[key] = ctx[key];\n });\n }\n\n return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n exports[name] = Script[name] = function (code) {\n var s = Script(code);\n return s[name].apply(s, [].slice.call(arguments, 1));\n };\n});\n\nexports.isContext = function (context) {\n return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n var copy = new Context();\n if(typeof context === 'object') {\n forEach(Object_keys(context), function (key) {\n copy[key] = context[key];\n });\n }\n return copy;\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","/*\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","module.exports = require('./lib/_stream_duplex.js');\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}","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\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};","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","/*global module*/\nvar Buffer = require('buffer').Buffer;\n\nmodule.exports = function toString(obj) {\n if (typeof obj === 'string')\n return obj;\n if (typeof obj === 'number' || Buffer.isBuffer(obj))\n return obj.toString();\n return JSON.stringify(obj);\n};\n","var JsonWebTokenError = require('./lib/JsonWebTokenError');\nvar NotBeforeError = require('./lib/NotBeforeError');\nvar TokenExpiredError = require('./lib/TokenExpiredError');\nvar decode = require('./decode');\nvar timespan = require('./lib/timespan');\nvar PS_SUPPORTED = require('./lib/psSupported');\nvar jws = require('jws');\n\nvar PUB_KEY_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512'];\nvar RSA_KEY_ALGS = ['RS256', 'RS384', 'RS512'];\nvar HS_ALGS = ['HS256', 'HS384', 'HS512'];\n\nif (PS_SUPPORTED) {\n PUB_KEY_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n RSA_KEY_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nmodule.exports = function (jwtString, secretOrPublicKey, options, callback) {\n if ((typeof options === 'function') && !callback) {\n callback = options;\n options = {};\n }\n\n if (!options) {\n options = {};\n }\n\n //clone this object since we are going to mutate it.\n options = Object.assign({}, options);\n\n var done;\n\n if (callback) {\n done = callback;\n } else {\n done = function(err, data) {\n if (err) throw err;\n return data;\n };\n }\n\n if (options.clockTimestamp && typeof options.clockTimestamp !== 'number') {\n return done(new JsonWebTokenError('clockTimestamp must be a number'));\n }\n\n if (options.nonce !== undefined && (typeof options.nonce !== 'string' || options.nonce.trim() === '')) {\n return done(new JsonWebTokenError('nonce must be a non-empty string'));\n }\n\n var clockTimestamp = options.clockTimestamp || Math.floor(Date.now() / 1000);\n\n if (!jwtString){\n return done(new JsonWebTokenError('jwt must be provided'));\n }\n\n if (typeof jwtString !== 'string') {\n return done(new JsonWebTokenError('jwt must be a string'));\n }\n\n var parts = jwtString.split('.');\n\n if (parts.length !== 3){\n return done(new JsonWebTokenError('jwt malformed'));\n }\n\n var decodedToken;\n\n try {\n decodedToken = decode(jwtString, { complete: true });\n } catch(err) {\n return done(err);\n }\n\n if (!decodedToken) {\n return done(new JsonWebTokenError('invalid token'));\n }\n\n var header = decodedToken.header;\n var getSecret;\n\n if(typeof secretOrPublicKey === 'function') {\n if(!callback) {\n return done(new JsonWebTokenError('verify must be called asynchronous if secret or public key is provided as a callback'));\n }\n\n getSecret = secretOrPublicKey;\n }\n else {\n getSecret = function(header, secretCallback) {\n return secretCallback(null, secretOrPublicKey);\n };\n }\n\n return getSecret(header, function(err, secretOrPublicKey) {\n if(err) {\n return done(new JsonWebTokenError('error in secret or public key callback: ' + err.message));\n }\n\n var hasSignature = parts[2].trim() !== '';\n\n if (!hasSignature && secretOrPublicKey){\n return done(new JsonWebTokenError('jwt signature is required'));\n }\n\n if (hasSignature && !secretOrPublicKey) {\n return done(new JsonWebTokenError('secret or public key must be provided'));\n }\n\n if (!hasSignature && !options.algorithms) {\n options.algorithms = ['none'];\n }\n\n if (!options.algorithms) {\n options.algorithms = ~secretOrPublicKey.toString().indexOf('BEGIN CERTIFICATE') ||\n ~secretOrPublicKey.toString().indexOf('BEGIN PUBLIC KEY') ? PUB_KEY_ALGS :\n ~secretOrPublicKey.toString().indexOf('BEGIN RSA PUBLIC KEY') ? RSA_KEY_ALGS : HS_ALGS;\n\n }\n\n if (!~options.algorithms.indexOf(decodedToken.header.alg)) {\n return done(new JsonWebTokenError('invalid algorithm'));\n }\n\n var valid;\n\n try {\n valid = jws.verify(jwtString, decodedToken.header.alg, secretOrPublicKey);\n } catch (e) {\n return done(e);\n }\n\n if (!valid) {\n return done(new JsonWebTokenError('invalid signature'));\n }\n\n var payload = decodedToken.payload;\n\n if (typeof payload.nbf !== 'undefined' && !options.ignoreNotBefore) {\n if (typeof payload.nbf !== 'number') {\n return done(new JsonWebTokenError('invalid nbf value'));\n }\n if (payload.nbf > clockTimestamp + (options.clockTolerance || 0)) {\n return done(new NotBeforeError('jwt not active', new Date(payload.nbf * 1000)));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && !options.ignoreExpiration) {\n if (typeof payload.exp !== 'number') {\n return done(new JsonWebTokenError('invalid exp value'));\n }\n if (clockTimestamp >= payload.exp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('jwt expired', new Date(payload.exp * 1000)));\n }\n }\n\n if (options.audience) {\n var audiences = Array.isArray(options.audience) ? options.audience : [options.audience];\n var target = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n var match = target.some(function (targetAudience) {\n return audiences.some(function (audience) {\n return audience instanceof RegExp ? audience.test(targetAudience) : audience === targetAudience;\n });\n });\n\n if (!match) {\n return done(new JsonWebTokenError('jwt audience invalid. expected: ' + audiences.join(' or ')));\n }\n }\n\n if (options.issuer) {\n var invalid_issuer =\n (typeof options.issuer === 'string' && payload.iss !== options.issuer) ||\n (Array.isArray(options.issuer) && options.issuer.indexOf(payload.iss) === -1);\n\n if (invalid_issuer) {\n return done(new JsonWebTokenError('jwt issuer invalid. expected: ' + options.issuer));\n }\n }\n\n if (options.subject) {\n if (payload.sub !== options.subject) {\n return done(new JsonWebTokenError('jwt subject invalid. expected: ' + options.subject));\n }\n }\n\n if (options.jwtid) {\n if (payload.jti !== options.jwtid) {\n return done(new JsonWebTokenError('jwt jwtid invalid. expected: ' + options.jwtid));\n }\n }\n\n if (options.nonce) {\n if (payload.nonce !== options.nonce) {\n return done(new JsonWebTokenError('jwt nonce invalid. expected: ' + options.nonce));\n }\n }\n\n if (options.maxAge) {\n if (typeof payload.iat !== 'number') {\n return done(new JsonWebTokenError('iat required when maxAge is specified'));\n }\n\n var maxAgeTimestamp = timespan(options.maxAge, payload.iat);\n if (typeof maxAgeTimestamp === 'undefined') {\n return done(new JsonWebTokenError('\"maxAge\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n if (clockTimestamp >= maxAgeTimestamp + (options.clockTolerance || 0)) {\n return done(new TokenExpiredError('maxAge exceeded', new Date(maxAgeTimestamp * 1000)));\n }\n }\n\n if (options.complete === true) {\n var signature = decodedToken.signature;\n\n return done(null, {\n header: header,\n payload: payload,\n signature: signature\n });\n }\n\n return done(null, payload);\n });\n};\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","module.exports = require('./browser/algorithms.json')\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","'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","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","module.exports = {\n decode: require('./decode'),\n verify: require('./verify'),\n sign: require('./sign'),\n JsonWebTokenError: require('./lib/JsonWebTokenError'),\n NotBeforeError: require('./lib/NotBeforeError'),\n TokenExpiredError: require('./lib/TokenExpiredError'),\n};\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\nvar JWS_REGEX = /^[a-zA-Z0-9\\-_]+?\\.[a-zA-Z0-9\\-_]+?\\.([a-zA-Z0-9\\-_]+)?$/;\n\nfunction isObject(thing) {\n return Object.prototype.toString.call(thing) === '[object Object]';\n}\n\nfunction safeJsonParse(thing) {\n if (isObject(thing))\n return thing;\n try { return JSON.parse(thing); }\n catch (e) { return undefined; }\n}\n\nfunction headerFromJWS(jwsSig) {\n var encodedHeader = jwsSig.split('.', 1)[0];\n return safeJsonParse(Buffer.from(encodedHeader, 'base64').toString('binary'));\n}\n\nfunction securedInputFromJWS(jwsSig) {\n return jwsSig.split('.', 2).join('.');\n}\n\nfunction signatureFromJWS(jwsSig) {\n return jwsSig.split('.')[2];\n}\n\nfunction payloadFromJWS(jwsSig, encoding) {\n encoding = encoding || 'utf8';\n var payload = jwsSig.split('.')[1];\n return Buffer.from(payload, 'base64').toString(encoding);\n}\n\nfunction isValidJws(string) {\n return JWS_REGEX.test(string) && !!headerFromJWS(string);\n}\n\nfunction jwsVerify(jwsSig, algorithm, secretOrKey) {\n if (!algorithm) {\n var err = new Error(\"Missing algorithm parameter for jws.verify\");\n err.code = \"MISSING_ALGORITHM\";\n throw err;\n }\n jwsSig = toString(jwsSig);\n var signature = signatureFromJWS(jwsSig);\n var securedInput = securedInputFromJWS(jwsSig);\n var algo = jwa(algorithm);\n return algo.verify(securedInput, signature, secretOrKey);\n}\n\nfunction jwsDecode(jwsSig, opts) {\n opts = opts || {};\n jwsSig = toString(jwsSig);\n\n if (!isValidJws(jwsSig))\n return null;\n\n var header = headerFromJWS(jwsSig);\n\n if (!header)\n return null;\n\n var payload = payloadFromJWS(jwsSig);\n if (header.typ === 'JWT' || opts.json)\n payload = JSON.parse(payload, opts.encoding);\n\n return {\n header: header,\n payload: payload,\n signature: signatureFromJWS(jwsSig)\n };\n}\n\nfunction VerifyStream(opts) {\n opts = opts || {};\n var secretOrKey = opts.secret||opts.publicKey||opts.key;\n var secretStream = new DataStream(secretOrKey);\n this.readable = true;\n this.algorithm = opts.algorithm;\n this.encoding = opts.encoding;\n this.secret = this.publicKey = this.key = secretStream;\n this.signature = new DataStream(opts.signature);\n this.secret.once('close', function () {\n if (!this.signature.writable && this.readable)\n this.verify();\n }.bind(this));\n\n this.signature.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.verify();\n }.bind(this));\n}\nutil.inherits(VerifyStream, Stream);\nVerifyStream.prototype.verify = function verify() {\n try {\n var valid = jwsVerify(this.signature.buffer, this.algorithm, this.key.buffer);\n var obj = jwsDecode(this.signature.buffer, this.encoding);\n this.emit('done', valid, obj);\n this.emit('data', valid);\n this.emit('end');\n this.readable = false;\n return valid;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nVerifyStream.decode = jwsDecode;\nVerifyStream.isValid = isValidJws;\nVerifyStream.verify = jwsVerify;\n\nmodule.exports = VerifyStream;\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/* */\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/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\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};","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\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","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\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 decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\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","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\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}();","var timespan = require('./lib/timespan');\nvar PS_SUPPORTED = require('./lib/psSupported');\nvar jws = require('jws');\nvar includes = require('lodash.includes');\nvar isBoolean = require('lodash.isboolean');\nvar isInteger = require('lodash.isinteger');\nvar isNumber = require('lodash.isnumber');\nvar isPlainObject = require('lodash.isplainobject');\nvar isString = require('lodash.isstring');\nvar once = require('lodash.once');\n\nvar SUPPORTED_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'none']\nif (PS_SUPPORTED) {\n SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nvar sign_options_schema = {\n expiresIn: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"expiresIn\" should be a number of seconds or string representing a timespan' },\n notBefore: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"notBefore\" should be a number of seconds or string representing a timespan' },\n audience: { isValid: function(value) { return isString(value) || Array.isArray(value); }, message: '\"audience\" must be a string or array' },\n algorithm: { isValid: includes.bind(null, SUPPORTED_ALGS), message: '\"algorithm\" must be a valid string enum value' },\n header: { isValid: isPlainObject, message: '\"header\" must be an object' },\n encoding: { isValid: isString, message: '\"encoding\" must be a string' },\n issuer: { isValid: isString, message: '\"issuer\" must be a string' },\n subject: { isValid: isString, message: '\"subject\" must be a string' },\n jwtid: { isValid: isString, message: '\"jwtid\" must be a string' },\n noTimestamp: { isValid: isBoolean, message: '\"noTimestamp\" must be a boolean' },\n keyid: { isValid: isString, message: '\"keyid\" must be a string' },\n mutatePayload: { isValid: isBoolean, message: '\"mutatePayload\" must be a boolean' }\n};\n\nvar registered_claims_schema = {\n iat: { isValid: isNumber, message: '\"iat\" should be a number of seconds' },\n exp: { isValid: isNumber, message: '\"exp\" should be a number of seconds' },\n nbf: { isValid: isNumber, message: '\"nbf\" should be a number of seconds' }\n};\n\nfunction validate(schema, allowUnknown, object, parameterName) {\n if (!isPlainObject(object)) {\n throw new Error('Expected \"' + parameterName + '\" to be a plain object.');\n }\n Object.keys(object)\n .forEach(function(key) {\n var validator = schema[key];\n if (!validator) {\n if (!allowUnknown) {\n throw new Error('\"' + key + '\" is not allowed in \"' + parameterName + '\"');\n }\n return;\n }\n if (!validator.isValid(object[key])) {\n throw new Error(validator.message);\n }\n });\n}\n\nfunction validateOptions(options) {\n return validate(sign_options_schema, false, options, 'options');\n}\n\nfunction validatePayload(payload) {\n return validate(registered_claims_schema, true, payload, 'payload');\n}\n\nvar options_to_payload = {\n 'audience': 'aud',\n 'issuer': 'iss',\n 'subject': 'sub',\n 'jwtid': 'jti'\n};\n\nvar options_for_objects = [\n 'expiresIn',\n 'notBefore',\n 'noTimestamp',\n 'audience',\n 'issuer',\n 'subject',\n 'jwtid',\n];\n\nmodule.exports = function (payload, secretOrPrivateKey, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n } else {\n options = options || {};\n }\n\n var isObjectPayload = typeof payload === 'object' &&\n !Buffer.isBuffer(payload);\n\n var header = Object.assign({\n alg: options.algorithm || 'HS256',\n typ: isObjectPayload ? 'JWT' : undefined,\n kid: options.keyid\n }, options.header);\n\n function failure(err) {\n if (callback) {\n return callback(err);\n }\n throw err;\n }\n\n if (!secretOrPrivateKey && options.algorithm !== 'none') {\n return failure(new Error('secretOrPrivateKey must have a value'));\n }\n\n if (typeof payload === 'undefined') {\n return failure(new Error('payload is required'));\n } else if (isObjectPayload) {\n try {\n validatePayload(payload);\n }\n catch (error) {\n return failure(error);\n }\n if (!options.mutatePayload) {\n payload = Object.assign({},payload);\n }\n } else {\n var invalid_options = options_for_objects.filter(function (opt) {\n return typeof options[opt] !== 'undefined';\n });\n\n if (invalid_options.length > 0) {\n return failure(new Error('invalid ' + invalid_options.join(',') + ' option for ' + (typeof payload ) + ' payload'));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && typeof options.expiresIn !== 'undefined') {\n return failure(new Error('Bad \"options.expiresIn\" option the payload already has an \"exp\" property.'));\n }\n\n if (typeof payload.nbf !== 'undefined' && typeof options.notBefore !== 'undefined') {\n return failure(new Error('Bad \"options.notBefore\" option the payload already has an \"nbf\" property.'));\n }\n\n try {\n validateOptions(options);\n }\n catch (error) {\n return failure(error);\n }\n\n var timestamp = payload.iat || Math.floor(Date.now() / 1000);\n\n if (options.noTimestamp) {\n delete payload.iat;\n } else if (isObjectPayload) {\n payload.iat = timestamp;\n }\n\n if (typeof options.notBefore !== 'undefined') {\n try {\n payload.nbf = timespan(options.notBefore, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.nbf === 'undefined') {\n return failure(new Error('\"notBefore\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n if (typeof options.expiresIn !== 'undefined' && typeof payload === 'object') {\n try {\n payload.exp = timespan(options.expiresIn, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.exp === 'undefined') {\n return failure(new Error('\"expiresIn\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n Object.keys(options_to_payload).forEach(function (key) {\n var claim = options_to_payload[key];\n if (typeof options[key] !== 'undefined') {\n if (typeof payload[claim] !== 'undefined') {\n return failure(new Error('Bad \"options.' + key + '\" option. The payload already has an \"' + claim + '\" property.'));\n }\n payload[claim] = options[key];\n }\n });\n\n var encoding = options.encoding || 'utf8';\n\n if (typeof callback === 'function') {\n callback = callback && once(callback);\n\n jws.createSign({\n header: header,\n privateKey: secretOrPrivateKey,\n payload: payload,\n encoding: encoding\n }).once('error', callback)\n .once('done', function (signature) {\n callback(null, signature);\n });\n } else {\n return jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding});\n }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// 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\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\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\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // 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 this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\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};\n\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.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\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 if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\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.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\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 var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, 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} else {\n // old school shim for old browsers\n module.exports = 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","var JsonWebTokenError = function (message, error) {\n Error.call(this, message);\n if(Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n this.name = 'JsonWebTokenError';\n this.message = message;\n if (error) this.inner = error;\n};\n\nJsonWebTokenError.prototype = Object.create(Error.prototype);\nJsonWebTokenError.prototype.constructor = JsonWebTokenError;\n\nmodule.exports = JsonWebTokenError;\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","module.exports = require('./lib/_stream_writable.js');\n","'use strict';\n\nfunction getParamSize(keySize) {\n\tvar result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);\n\treturn result;\n}\n\nvar paramBytesForAlg = {\n\tES256: getParamSize(256),\n\tES384: getParamSize(384),\n\tES512: getParamSize(521)\n};\n\nfunction getParamBytesForAlg(alg) {\n\tvar paramBytes = paramBytesForAlg[alg];\n\tif (paramBytes) {\n\t\treturn paramBytes;\n\t}\n\n\tthrow new Error('Unknown algorithm \"' + alg + '\"');\n}\n\nmodule.exports = getParamBytesForAlg;\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\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\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 '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","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","/*global exports*/\nvar SignStream = require('./lib/sign-stream');\nvar VerifyStream = require('./lib/verify-stream');\n\nvar ALGORITHMS = [\n 'HS256', 'HS384', 'HS512',\n 'RS256', 'RS384', 'RS512',\n 'PS256', 'PS384', 'PS512',\n 'ES256', 'ES384', 'ES512'\n];\n\nexports.ALGORITHMS = ALGORITHMS;\nexports.sign = SignStream.sign;\nexports.verify = VerifyStream.verify;\nexports.decode = VerifyStream.decode;\nexports.isValid = VerifyStream.isValid;\nexports.createSign = function createSign(opts) {\n return new SignStream(opts);\n};\nexports.createVerify = function createVerify(opts) {\n return new VerifyStream(opts);\n};\n","var encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\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","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n var encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n var header = new Buffer(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n var lenOctets = 1;\n for (var i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n var header = new Buffer(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n var buf = new Buffer(str.length * 2);\n for (var i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s\\.]+/g);\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (var i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n var size = 0;\n for (var i = 0; i < id.length; i++) {\n var ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n var objid = new Buffer(size);\n var offset = objid.length - 1;\n for (var i = id.length - 1; i >= 0; i--) {\n var ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n var str;\n var date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n var numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = new Buffer(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n var size = num.length;\n if (num.length === 0)\n size++;\n\n var out = new Buffer(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n var size = 1;\n for (var i = num; i >= 0x100; i >>= 8)\n size++;\n\n var out = new Array(size);\n for (var i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n var state = this._baseState;\n var i;\n if (state['default'] === null)\n return false;\n\n var data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n var res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\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 for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\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 len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n 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 return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","var jws = require('jws');\n\nmodule.exports = function (jwt, options) {\n options = options || {};\n var decoded = jws.decode(jwt, options);\n if (!decoded) { return null; }\n var payload = decoded.payload;\n\n //try parse the payload\n if(typeof payload === 'string') {\n try {\n var obj = JSON.parse(payload);\n if(obj !== null && typeof obj === 'object') {\n payload = obj;\n }\n } catch (e) { }\n }\n\n //return header if `complete` option is enabled. header includes claims\n //such as `kid` and `alg` used to select the key within a JWKS needed to\n //verify the signature\n if (options.complete === true) {\n return {\n header: decoded.header,\n payload: payload,\n signature: decoded.signature\n };\n }\n return payload;\n};\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 ? '';\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","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\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// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\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","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","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar _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;","var base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\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/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\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/**/\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/**/\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}","module.exports = require('events').EventEmitter;\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;","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array|Object} sig -\n* @param {Array|Point} [sig.R] - R point as Point or bytes\n* @param {Array|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array} [sig.Rencoded] - R point encoded\n* @param {Array} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n// undocumented cb() API, needed for core, not for public API\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 && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\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 if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\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.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=08dc85d6&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=style&index=0&id=08dc85d6&lang=scss&scoped=true&\"","(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 for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\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 len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n 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 return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'; // 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};","// 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/* */\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/* */\n\n/**/\n\n\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n/**/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\n\nvar Stream = require('./internal/streams/stream');\n/**/\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};","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\nfunction isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = isInteger;\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\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","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\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;","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\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","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","module.exports = require('events').EventEmitter;\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = 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 BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\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 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/**/\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/**/\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});","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","var inherits = require('inherits');\nvar Reporter = require('../base').Reporter;\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n var res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n}\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n var res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n}\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n}\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!(item instanceof EncoderBuffer))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = new Buffer(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '';\n return '';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","/**\n * lodash 3.0.3 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar numberTag = '[object Number]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified\n * as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\nfunction isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && objectToString.call(value) == numberTag);\n}\n\nmodule.exports = isNumber;\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","'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","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","/*global module*/\nvar Buffer = require('safe-buffer').Buffer;\nvar DataStream = require('./data-stream');\nvar jwa = require('jwa');\nvar Stream = require('stream');\nvar toString = require('./tostring');\nvar util = require('util');\n\nfunction base64url(string, encoding) {\n return Buffer\n .from(string, encoding)\n .toString('base64')\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction jwsSecuredInput(header, payload, encoding) {\n encoding = encoding || 'utf8';\n var encodedHeader = base64url(toString(header), 'binary');\n var encodedPayload = base64url(toString(payload), encoding);\n return util.format('%s.%s', encodedHeader, encodedPayload);\n}\n\nfunction jwsSign(opts) {\n var header = opts.header;\n var payload = opts.payload;\n var secretOrKey = opts.secret || opts.privateKey;\n var encoding = opts.encoding;\n var algo = jwa(header.alg);\n var securedInput = jwsSecuredInput(header, payload, encoding);\n var signature = algo.sign(securedInput, secretOrKey);\n return util.format('%s.%s', securedInput, signature);\n}\n\nfunction SignStream(opts) {\n var secret = opts.secret||opts.privateKey||opts.key;\n var secretStream = new DataStream(secret);\n this.readable = true;\n this.header = opts.header;\n this.encoding = opts.encoding;\n this.secret = this.privateKey = this.key = secretStream;\n this.payload = new DataStream(opts.payload);\n this.secret.once('close', function () {\n if (!this.payload.writable && this.readable)\n this.sign();\n }.bind(this));\n\n this.payload.once('close', function () {\n if (!this.secret.writable && this.readable)\n this.sign();\n }.bind(this));\n}\nutil.inherits(SignStream, Stream);\n\nSignStream.prototype.sign = function sign() {\n try {\n var signature = jwsSign({\n header: this.header,\n payload: this.payload.buffer,\n secret: this.secret.buffer,\n encoding: this.encoding\n });\n this.emit('done', signature);\n this.emit('data', signature);\n this.emit('end');\n this.readable = false;\n return signature;\n } catch (e) {\n this.readable = false;\n this.emit('error', e);\n this.emit('close');\n }\n};\n\nSignStream.sign = jwsSign;\n\nmodule.exports = SignStream;\n","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar TokenExpiredError = function (message, expiredAt) {\n JsonWebTokenError.call(this, message);\n this.name = 'TokenExpiredError';\n this.expiredAt = expiredAt;\n};\n\nTokenExpiredError.prototype = Object.create(JsonWebTokenError.prototype);\n\nTokenExpiredError.prototype.constructor = TokenExpiredError;\n\nmodule.exports = TokenExpiredError;","'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","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\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","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\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","// 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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","var bufferEqual = require('buffer-equal-constant-time');\nvar Buffer = require('safe-buffer').Buffer;\nvar crypto = require('crypto');\nvar formatEcdsa = require('ecdsa-sig-formatter');\nvar util = require('util');\n\nvar MSG_INVALID_ALGORITHM = '\"%s\" is not a valid algorithm.\\n Supported algorithms are:\\n \"HS256\", \"HS384\", \"HS512\", \"RS256\", \"RS384\", \"RS512\", \"PS256\", \"PS384\", \"PS512\", \"ES256\", \"ES384\", \"ES512\" and \"none\".'\nvar MSG_INVALID_SECRET = 'secret must be a string or buffer';\nvar MSG_INVALID_VERIFIER_KEY = 'key must be a string or a buffer';\nvar MSG_INVALID_SIGNER_KEY = 'key must be a string, a buffer or an object';\n\nvar supportsKeyObjects = typeof crypto.createPublicKey === 'function';\nif (supportsKeyObjects) {\n MSG_INVALID_VERIFIER_KEY += ' or a KeyObject';\n MSG_INVALID_SECRET += 'or a KeyObject';\n}\n\nfunction checkIsPublicKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.type !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.asymmetricKeyType !== 'string') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_VERIFIER_KEY);\n }\n};\n\nfunction checkIsPrivateKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return;\n }\n\n if (typeof key === 'object') {\n return;\n }\n\n throw typeError(MSG_INVALID_SIGNER_KEY);\n};\n\nfunction checkIsSecretKey(key) {\n if (Buffer.isBuffer(key)) {\n return;\n }\n\n if (typeof key === 'string') {\n return key;\n }\n\n if (!supportsKeyObjects) {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key !== 'object') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (key.type !== 'secret') {\n throw typeError(MSG_INVALID_SECRET);\n }\n\n if (typeof key.export !== 'function') {\n throw typeError(MSG_INVALID_SECRET);\n }\n}\n\nfunction fromBase64(base64) {\n return base64\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\nfunction toBase64(base64url) {\n base64url = base64url.toString();\n\n var padding = 4 - base64url.length % 4;\n if (padding !== 4) {\n for (var i = 0; i < padding; ++i) {\n base64url += '=';\n }\n }\n\n return base64url\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n}\n\nfunction typeError(template) {\n var args = [].slice.call(arguments, 1);\n var errMsg = util.format.bind(util, template).apply(null, args);\n return new TypeError(errMsg);\n}\n\nfunction bufferOrString(obj) {\n return Buffer.isBuffer(obj) || typeof obj === 'string';\n}\n\nfunction normalizeInput(thing) {\n if (!bufferOrString(thing))\n thing = JSON.stringify(thing);\n return thing;\n}\n\nfunction createHmacSigner(bits) {\n return function sign(thing, secret) {\n checkIsSecretKey(secret);\n thing = normalizeInput(thing);\n var hmac = crypto.createHmac('sha' + bits, secret);\n var sig = (hmac.update(thing), hmac.digest('base64'))\n return fromBase64(sig);\n }\n}\n\nfunction createHmacVerifier(bits) {\n return function verify(thing, signature, secret) {\n var computedSig = createHmacSigner(bits)(thing, secret);\n return bufferEqual(Buffer.from(signature), Buffer.from(computedSig));\n }\n}\n\nfunction createKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n // Even though we are specifying \"RSA\" here, this works with ECDSA\n // keys as well.\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign(privateKey, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify(publicKey, signature, 'base64');\n }\n}\n\nfunction createPSSKeySigner(bits) {\n return function sign(thing, privateKey) {\n checkIsPrivateKey(privateKey);\n thing = normalizeInput(thing);\n var signer = crypto.createSign('RSA-SHA' + bits);\n var sig = (signer.update(thing), signer.sign({\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, 'base64'));\n return fromBase64(sig);\n }\n}\n\nfunction createPSSKeyVerifier(bits) {\n return function verify(thing, signature, publicKey) {\n checkIsPublicKey(publicKey);\n thing = normalizeInput(thing);\n signature = toBase64(signature);\n var verifier = crypto.createVerify('RSA-SHA' + bits);\n verifier.update(thing);\n return verifier.verify({\n key: publicKey,\n padding: crypto.constants.RSA_PKCS1_PSS_PADDING,\n saltLength: crypto.constants.RSA_PSS_SALTLEN_DIGEST\n }, signature, 'base64');\n }\n}\n\nfunction createECDSASigner(bits) {\n var inner = createKeySigner(bits);\n return function sign() {\n var signature = inner.apply(null, arguments);\n signature = formatEcdsa.derToJose(signature, 'ES' + bits);\n return signature;\n };\n}\n\nfunction createECDSAVerifer(bits) {\n var inner = createKeyVerifier(bits);\n return function verify(thing, signature, publicKey) {\n signature = formatEcdsa.joseToDer(signature, 'ES' + bits).toString('base64');\n var result = inner(thing, signature, publicKey);\n return result;\n };\n}\n\nfunction createNoneSigner() {\n return function sign() {\n return '';\n }\n}\n\nfunction createNoneVerifier() {\n return function verify(thing, signature) {\n return signature === '';\n }\n}\n\nmodule.exports = function jwa(algorithm) {\n var signerFactories = {\n hs: createHmacSigner,\n rs: createKeySigner,\n ps: createPSSKeySigner,\n es: createECDSASigner,\n none: createNoneSigner,\n }\n var verifierFactories = {\n hs: createHmacVerifier,\n rs: createKeyVerifier,\n ps: createPSSKeyVerifier,\n es: createECDSAVerifer,\n none: createNoneVerifier,\n }\n var match = algorithm.match(/^(RS|PS|ES|HS)(256|384|512)$|^(none)$/i);\n if (!match)\n throw typeError(MSG_INVALID_ALGORITHM, algorithm);\n var algo = (match[1] || match[3]).toLowerCase();\n var bits = match[2];\n\n return {\n sign: signerFactories[algo](bits),\n verify: verifierFactories[algo](bits),\n }\n};\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\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","// 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/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\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}","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 * 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","var asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\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 for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\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 len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var Reporter = require('../base').Reporter;\nvar EncoderBuffer = require('../base').EncoderBuffer;\nvar DecoderBuffer = require('../base').DecoderBuffer;\nvar assert = require('minimalistic-assert');\n\n// Supported tags\nvar tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nvar methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nvar overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent) {\n var state = {};\n this._baseState = state;\n\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nvar stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n var state = this._baseState;\n var cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n var res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n var state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n var clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n var state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n var state = this._baseState;\n\n // Filter children and args\n var children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n var res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n var value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n var state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n var state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n var state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n var state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n var state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n var state = this._baseState;\n var args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n var state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n var state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n var state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n var state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n var result = state['default'];\n var present = true;\n\n var prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n var tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n var save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n var prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n var explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n var start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n if (state.any)\n var save = input.save();\n var body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any)\n result = result;\n else if (state.choice === null)\n result = this._decodeGeneric(state.tag, input, options);\n else\n result = this._decodeChoice(input, options);\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n var data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n var state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n var state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n var state = this._baseState;\n var result = null;\n var match = false;\n\n Object.keys(state.choice).some(function(key) {\n var save = input.save();\n var node = state.choice[key];\n try {\n var value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n var state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n var result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n var state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n var result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default']\n else\n return;\n }\n\n // Encode children first\n var content = null;\n var primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n var prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n var res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n var child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n var state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n var result;\n if (!state.any && state.choice === null) {\n var tag = state.implicit !== null ? state.implicit : state.tag;\n var cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n var state = this._baseState;\n\n var node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n var state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n var buf = DEREncoder.prototype.encode.call(this, data);\n\n var p = buf.toString('base64');\n var out = [ '-----BEGIN ' + options.label + '-----' ];\n for (var i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar getParamBytesForAlg = require('./param-bytes-for-alg');\n\nvar MAX_OCTET = 0x80,\n\tCLASS_UNIVERSAL = 0,\n\tPRIMITIVE_BIT = 0x20,\n\tTAG_SEQ = 0x10,\n\tTAG_INT = 0x02,\n\tENCODED_TAG_SEQ = (TAG_SEQ | PRIMITIVE_BIT) | (CLASS_UNIVERSAL << 6),\n\tENCODED_TAG_INT = TAG_INT | (CLASS_UNIVERSAL << 6);\n\nfunction base64Url(base64) {\n\treturn base64\n\t\t.replace(/=/g, '')\n\t\t.replace(/\\+/g, '-')\n\t\t.replace(/\\//g, '_');\n}\n\nfunction signatureAsBuffer(signature) {\n\tif (Buffer.isBuffer(signature)) {\n\t\treturn signature;\n\t} else if ('string' === typeof signature) {\n\t\treturn Buffer.from(signature, 'base64');\n\t}\n\n\tthrow new TypeError('ECDSA signature must be a Base64 string or a Buffer');\n}\n\nfunction derToJose(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\t// the DER encoded param should at most be the param size, plus a padding\n\t// zero, since due to being a signed integer\n\tvar maxEncodedParamLength = paramBytes + 1;\n\n\tvar inputLength = signature.length;\n\n\tvar offset = 0;\n\tif (signature[offset++] !== ENCODED_TAG_SEQ) {\n\t\tthrow new Error('Could not find expected \"seq\"');\n\t}\n\n\tvar seqLength = signature[offset++];\n\tif (seqLength === (MAX_OCTET | 1)) {\n\t\tseqLength = signature[offset++];\n\t}\n\n\tif (inputLength - offset < seqLength) {\n\t\tthrow new Error('\"seq\" specified length of \"' + seqLength + '\", only \"' + (inputLength - offset) + '\" remaining');\n\t}\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"r\"');\n\t}\n\n\tvar rLength = signature[offset++];\n\n\tif (inputLength - offset - 2 < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", only \"' + (inputLength - offset - 2) + '\" available');\n\t}\n\n\tif (maxEncodedParamLength < rLength) {\n\t\tthrow new Error('\"r\" specified length of \"' + rLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar rOffset = offset;\n\toffset += rLength;\n\n\tif (signature[offset++] !== ENCODED_TAG_INT) {\n\t\tthrow new Error('Could not find expected \"int\" for \"s\"');\n\t}\n\n\tvar sLength = signature[offset++];\n\n\tif (inputLength - offset !== sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", expected \"' + (inputLength - offset) + '\"');\n\t}\n\n\tif (maxEncodedParamLength < sLength) {\n\t\tthrow new Error('\"s\" specified length of \"' + sLength + '\", max of \"' + maxEncodedParamLength + '\" is acceptable');\n\t}\n\n\tvar sOffset = offset;\n\toffset += sLength;\n\n\tif (offset !== inputLength) {\n\t\tthrow new Error('Expected to consume entire buffer, but \"' + (inputLength - offset) + '\" bytes remain');\n\t}\n\n\tvar rPadding = paramBytes - rLength,\n\t\tsPadding = paramBytes - sLength;\n\n\tvar dst = Buffer.allocUnsafe(rPadding + rLength + sPadding + sLength);\n\n\tfor (offset = 0; offset < rPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, rOffset + Math.max(-rPadding, 0), rOffset + rLength);\n\n\toffset = paramBytes;\n\n\tfor (var o = offset; offset < o + sPadding; ++offset) {\n\t\tdst[offset] = 0;\n\t}\n\tsignature.copy(dst, offset, sOffset + Math.max(-sPadding, 0), sOffset + sLength);\n\n\tdst = dst.toString('base64');\n\tdst = base64Url(dst);\n\n\treturn dst;\n}\n\nfunction countPadding(buf, start, stop) {\n\tvar padding = 0;\n\twhile (start + padding < stop && buf[start + padding] === 0) {\n\t\t++padding;\n\t}\n\n\tvar needsSign = buf[start + padding] >= MAX_OCTET;\n\tif (needsSign) {\n\t\t--padding;\n\t}\n\n\treturn padding;\n}\n\nfunction joseToDer(signature, alg) {\n\tsignature = signatureAsBuffer(signature);\n\tvar paramBytes = getParamBytesForAlg(alg);\n\n\tvar signatureBytes = signature.length;\n\tif (signatureBytes !== paramBytes * 2) {\n\t\tthrow new TypeError('\"' + alg + '\" signatures must be \"' + paramBytes * 2 + '\" bytes, saw \"' + signatureBytes + '\"');\n\t}\n\n\tvar rPadding = countPadding(signature, 0, paramBytes);\n\tvar sPadding = countPadding(signature, paramBytes, signature.length);\n\tvar rLength = paramBytes - rPadding;\n\tvar sLength = paramBytes - sPadding;\n\n\tvar rsBytes = 1 + 1 + rLength + 1 + 1 + sLength;\n\n\tvar shortLength = rsBytes < MAX_OCTET;\n\n\tvar dst = Buffer.allocUnsafe((shortLength ? 2 : 3) + rsBytes);\n\n\tvar offset = 0;\n\tdst[offset++] = ENCODED_TAG_SEQ;\n\tif (shortLength) {\n\t\t// Bit 8 has value \"0\"\n\t\t// bits 7-1 give the length.\n\t\tdst[offset++] = rsBytes;\n\t} else {\n\t\t// Bit 8 of first octet has value \"1\"\n\t\t// bits 7-1 give the number of additional length octets.\n\t\tdst[offset++] = MAX_OCTET\t| 1;\n\t\t// length, base 256\n\t\tdst[offset++] = rsBytes & 0xff;\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = rLength;\n\tif (rPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\toffset += signature.copy(dst, offset, 0, paramBytes);\n\t} else {\n\t\toffset += signature.copy(dst, offset, rPadding, paramBytes);\n\t}\n\tdst[offset++] = ENCODED_TAG_INT;\n\tdst[offset++] = sLength;\n\tif (sPadding < 0) {\n\t\tdst[offset++] = 0;\n\t\tsignature.copy(dst, offset, paramBytes);\n\t} else {\n\t\tsignature.copy(dst, offset, paramBytes + sPadding);\n\t}\n\n\treturn dst;\n}\n\nmodule.exports = {\n\tderToJose: derToJose,\n\tjoseToDer: joseToDer\n};\n","var constants = require('../constants');\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);\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","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","exports = module.exports = SemVer\n\nvar debug\n/* istanbul ignore next */\nif (typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)) {\n debug = function () {\n var args = Array.prototype.slice.call(arguments, 0)\n args.unshift('SEMVER')\n console.log.apply(console, args)\n }\n} else {\n debug = function () {}\n}\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nexports.SEMVER_SPEC_VERSION = '2.0.0'\n\nvar MAX_LENGTH = 256\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n /* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nvar MAX_SAFE_COMPONENT_LENGTH = 16\n\n// The actual regexps go on exports.re\nvar re = exports.re = []\nvar src = exports.src = []\nvar R = 0\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\nvar NUMERICIDENTIFIER = R++\nsrc[NUMERICIDENTIFIER] = '0|[1-9]\\\\d*'\nvar NUMERICIDENTIFIERLOOSE = R++\nsrc[NUMERICIDENTIFIERLOOSE] = '[0-9]+'\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\nvar NONNUMERICIDENTIFIER = R++\nsrc[NONNUMERICIDENTIFIER] = '\\\\d*[a-zA-Z-][a-zA-Z0-9-]*'\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\nvar MAINVERSION = R++\nsrc[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIER] + ')'\n\nvar MAINVERSIONLOOSE = R++\nsrc[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\\\.' +\n '(' + src[NUMERICIDENTIFIERLOOSE] + ')'\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n\nvar PRERELEASEIDENTIFIER = R++\nsrc[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\nvar PRERELEASEIDENTIFIERLOOSE = R++\nsrc[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +\n '|' + src[NONNUMERICIDENTIFIER] + ')'\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\nvar PRERELEASE = R++\nsrc[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIER] + ')*))'\n\nvar PRERELEASELOOSE = R++\nsrc[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +\n '(?:\\\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\nvar BUILDIDENTIFIER = R++\nsrc[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\nvar BUILD = R++\nsrc[BUILD] = '(?:\\\\+(' + src[BUILDIDENTIFIER] +\n '(?:\\\\.' + src[BUILDIDENTIFIER] + ')*))'\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\nvar FULL = R++\nvar FULLPLAIN = 'v?' + src[MAINVERSION] +\n src[PRERELEASE] + '?' +\n src[BUILD] + '?'\n\nsrc[FULL] = '^' + FULLPLAIN + '$'\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\nvar LOOSEPLAIN = '[v=\\\\s]*' + src[MAINVERSIONLOOSE] +\n src[PRERELEASELOOSE] + '?' +\n src[BUILD] + '?'\n\nvar LOOSE = R++\nsrc[LOOSE] = '^' + LOOSEPLAIN + '$'\n\nvar GTLT = R++\nsrc[GTLT] = '((?:<|>)?=?)'\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\nvar XRANGEIDENTIFIERLOOSE = R++\nsrc[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\\\*'\nvar XRANGEIDENTIFIER = R++\nsrc[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\\\*'\n\nvar XRANGEPLAIN = R++\nsrc[XRANGEPLAIN] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIER] + ')' +\n '(?:' + src[PRERELEASE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGEPLAINLOOSE = R++\nsrc[XRANGEPLAINLOOSE] = '[v=\\\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:\\\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +\n '(?:' + src[PRERELEASELOOSE] + ')?' +\n src[BUILD] + '?' +\n ')?)?'\n\nvar XRANGE = R++\nsrc[XRANGE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAIN] + '$'\nvar XRANGELOOSE = R++\nsrc[XRANGELOOSE] = '^' + src[GTLT] + '\\\\s*' + src[XRANGEPLAINLOOSE] + '$'\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\nvar COERCE = R++\nsrc[COERCE] = '(?:^|[^\\\\d])' +\n '(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:\\\\.(\\\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +\n '(?:$|[^\\\\d])'\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\nvar LONETILDE = R++\nsrc[LONETILDE] = '(?:~>?)'\n\nvar TILDETRIM = R++\nsrc[TILDETRIM] = '(\\\\s*)' + src[LONETILDE] + '\\\\s+'\nre[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')\nvar tildeTrimReplace = '$1~'\n\nvar TILDE = R++\nsrc[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'\nvar TILDELOOSE = R++\nsrc[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\nvar LONECARET = R++\nsrc[LONECARET] = '(?:\\\\^)'\n\nvar CARETTRIM = R++\nsrc[CARETTRIM] = '(\\\\s*)' + src[LONECARET] + '\\\\s+'\nre[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')\nvar caretTrimReplace = '$1^'\n\nvar CARET = R++\nsrc[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'\nvar CARETLOOSE = R++\nsrc[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\nvar COMPARATORLOOSE = R++\nsrc[COMPARATORLOOSE] = '^' + src[GTLT] + '\\\\s*(' + LOOSEPLAIN + ')$|^$'\nvar COMPARATOR = R++\nsrc[COMPARATOR] = '^' + src[GTLT] + '\\\\s*(' + FULLPLAIN + ')$|^$'\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\nvar COMPARATORTRIM = R++\nsrc[COMPARATORTRIM] = '(\\\\s*)' + src[GTLT] +\n '\\\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'\n\n// this one has to use the /g flag\nre[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')\nvar comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\nvar HYPHENRANGE = R++\nsrc[HYPHENRANGE] = '^\\\\s*(' + src[XRANGEPLAIN] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAIN] + ')' +\n '\\\\s*$'\n\nvar HYPHENRANGELOOSE = R++\nsrc[HYPHENRANGELOOSE] = '^\\\\s*(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s+-\\\\s+' +\n '(' + src[XRANGEPLAINLOOSE] + ')' +\n '\\\\s*$'\n\n// Star ranges basically just allow anything at all.\nvar STAR = R++\nsrc[STAR] = '(<|>)?=?\\\\s*\\\\*'\n\n// Compile to actual regexp objects.\n// All are flag-free, unless they were created above with a flag.\nfor (var i = 0; i < R; i++) {\n debug(i, src[i])\n if (!re[i]) {\n re[i] = new RegExp(src[i])\n }\n}\n\nexports.parse = parse\nfunction parse (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n if (version.length > MAX_LENGTH) {\n return null\n }\n\n var r = options.loose ? re[LOOSE] : re[FULL]\n if (!r.test(version)) {\n return null\n }\n\n try {\n return new SemVer(version, options)\n } catch (er) {\n return null\n }\n}\n\nexports.valid = valid\nfunction valid (version, options) {\n var v = parse(version, options)\n return v ? v.version : null\n}\n\nexports.clean = clean\nfunction clean (version, options) {\n var s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\n\nexports.SemVer = SemVer\n\nfunction SemVer (version, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n if (version instanceof SemVer) {\n if (version.loose === options.loose) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')\n }\n\n if (!(this instanceof SemVer)) {\n return new SemVer(version, options)\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n\n var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])\n\n if (!m) {\n throw new TypeError('Invalid Version: ' + version)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map(function (id) {\n if (/^[0-9]+$/.test(id)) {\n var num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n}\n\nSemVer.prototype.format = function () {\n this.version = this.major + '.' + this.minor + '.' + this.patch\n if (this.prerelease.length) {\n this.version += '-' + this.prerelease.join('.')\n }\n return this.version\n}\n\nSemVer.prototype.toString = function () {\n return this.version\n}\n\nSemVer.prototype.compare = function (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return this.compareMain(other) || this.comparePre(other)\n}\n\nSemVer.prototype.compareMain = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n}\n\nSemVer.prototype.comparePre = function (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n var i = 0\n do {\n var a = this.prerelease[i]\n var b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n}\n\n// preminor will bump the version up to the next minor release, and immediately\n// down to pre-release. premajor and prepatch work the same way.\nSemVer.prototype.inc = function (release, identifier) {\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier)\n this.inc('pre', identifier)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier)\n }\n this.inc('pre', identifier)\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 \"pre\" would become 1.0.0-0 which is the wrong direction.\n case 'pre':\n if (this.prerelease.length === 0) {\n this.prerelease = [0]\n } else {\n var i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n this.prerelease.push(0)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n if (this.prerelease[0] === identifier) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = [identifier, 0]\n }\n } else {\n this.prerelease = [identifier, 0]\n }\n }\n break\n\n default:\n throw new Error('invalid increment argument: ' + release)\n }\n this.format()\n this.raw = this.version\n return this\n}\n\nexports.inc = inc\nfunction inc (version, release, loose, identifier) {\n if (typeof (loose) === 'string') {\n identifier = loose\n loose = undefined\n }\n\n try {\n return new SemVer(version, loose).inc(release, identifier).version\n } catch (er) {\n return null\n }\n}\n\nexports.diff = diff\nfunction diff (version1, version2) {\n if (eq(version1, version2)) {\n return null\n } else {\n var v1 = parse(version1)\n var v2 = parse(version2)\n var prefix = ''\n if (v1.prerelease.length || v2.prerelease.length) {\n prefix = 'pre'\n var defaultResult = 'prerelease'\n }\n for (var key in v1) {\n if (key === 'major' || key === 'minor' || key === 'patch') {\n if (v1[key] !== v2[key]) {\n return prefix + key\n }\n }\n }\n return defaultResult // may be undefined\n }\n}\n\nexports.compareIdentifiers = compareIdentifiers\n\nvar numeric = /^[0-9]+$/\nfunction compareIdentifiers (a, b) {\n var anum = numeric.test(a)\n var bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nexports.rcompareIdentifiers = rcompareIdentifiers\nfunction rcompareIdentifiers (a, b) {\n return compareIdentifiers(b, a)\n}\n\nexports.major = major\nfunction major (a, loose) {\n return new SemVer(a, loose).major\n}\n\nexports.minor = minor\nfunction minor (a, loose) {\n return new SemVer(a, loose).minor\n}\n\nexports.patch = patch\nfunction patch (a, loose) {\n return new SemVer(a, loose).patch\n}\n\nexports.compare = compare\nfunction compare (a, b, loose) {\n return new SemVer(a, loose).compare(new SemVer(b, loose))\n}\n\nexports.compareLoose = compareLoose\nfunction compareLoose (a, b) {\n return compare(a, b, true)\n}\n\nexports.rcompare = rcompare\nfunction rcompare (a, b, loose) {\n return compare(b, a, loose)\n}\n\nexports.sort = sort\nfunction sort (list, loose) {\n return list.sort(function (a, b) {\n return exports.compare(a, b, loose)\n })\n}\n\nexports.rsort = rsort\nfunction rsort (list, loose) {\n return list.sort(function (a, b) {\n return exports.rcompare(a, b, loose)\n })\n}\n\nexports.gt = gt\nfunction gt (a, b, loose) {\n return compare(a, b, loose) > 0\n}\n\nexports.lt = lt\nfunction lt (a, b, loose) {\n return compare(a, b, loose) < 0\n}\n\nexports.eq = eq\nfunction eq (a, b, loose) {\n return compare(a, b, loose) === 0\n}\n\nexports.neq = neq\nfunction neq (a, b, loose) {\n return compare(a, b, loose) !== 0\n}\n\nexports.gte = gte\nfunction gte (a, b, loose) {\n return compare(a, b, loose) >= 0\n}\n\nexports.lte = lte\nfunction lte (a, b, loose) {\n return compare(a, b, loose) <= 0\n}\n\nexports.cmp = cmp\nfunction cmp (a, op, b, loose) {\n switch (op) {\n case '===':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a === b\n\n case '!==':\n if (typeof a === 'object')\n a = a.version\n if (typeof b === 'object')\n b = b.version\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError('Invalid operator: ' + op)\n }\n}\n\nexports.Comparator = Comparator\nfunction Comparator (comp, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n if (!(this instanceof Comparator)) {\n return new Comparator(comp, options)\n }\n\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n}\n\nvar ANY = {}\nComparator.prototype.parse = function (comp) {\n var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var m = comp.match(r)\n\n if (!m) {\n throw new TypeError('Invalid comparator: ' + comp)\n }\n\n this.operator = m[1]\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n}\n\nComparator.prototype.toString = function () {\n return this.value\n}\n\nComparator.prototype.test = function (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n}\n\nComparator.prototype.intersects = function (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n var rangeTmp\n\n if (this.operator === '') {\n rangeTmp = new Range(comp.value, options)\n return satisfies(this.value, rangeTmp, options)\n } else if (comp.operator === '') {\n rangeTmp = new Range(this.value, options)\n return satisfies(comp.semver, rangeTmp, options)\n }\n\n var sameDirectionIncreasing =\n (this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '>=' || comp.operator === '>')\n var sameDirectionDecreasing =\n (this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '<=' || comp.operator === '<')\n var sameSemVer = this.semver.version === comp.semver.version\n var differentDirectionsInclusive =\n (this.operator === '>=' || this.operator === '<=') &&\n (comp.operator === '>=' || comp.operator === '<=')\n var oppositeDirectionsLessThan =\n cmp(this.semver, '<', comp.semver, options) &&\n ((this.operator === '>=' || this.operator === '>') &&\n (comp.operator === '<=' || comp.operator === '<'))\n var oppositeDirectionsGreaterThan =\n cmp(this.semver, '>', comp.semver, options) &&\n ((this.operator === '<=' || this.operator === '<') &&\n (comp.operator === '>=' || comp.operator === '>'))\n\n return sameDirectionIncreasing || sameDirectionDecreasing ||\n (sameSemVer && differentDirectionsInclusive) ||\n oppositeDirectionsLessThan || oppositeDirectionsGreaterThan\n}\n\nexports.Range = Range\nfunction Range (range, options) {\n if (!options || typeof options !== 'object') {\n options = {\n loose: !!options,\n includePrerelease: false\n }\n }\n\n if (range instanceof Range) {\n if (range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n return new Range(range.value, options)\n }\n\n if (!(this instanceof Range)) {\n return new Range(range, options)\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First, split based on boolean or ||\n this.raw = range\n this.set = range.split(/\\s*\\|\\|\\s*/).map(function (range) {\n return this.parseRange(range.trim())\n }, this).filter(function (c) {\n // throw out any that are not relevant for whatever reason\n return c.length\n })\n\n if (!this.set.length) {\n throw new TypeError('Invalid SemVer Range: ' + range)\n }\n\n this.format()\n}\n\nRange.prototype.format = function () {\n this.range = this.set.map(function (comps) {\n return comps.join(' ').trim()\n }).join('||').trim()\n return this.range\n}\n\nRange.prototype.toString = function () {\n return this.range\n}\n\nRange.prototype.parseRange = function (range) {\n var loose = this.options.loose\n range = range.trim()\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]\n range = range.replace(hr, hyphenReplace)\n debug('hyphen replace', range)\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range, re[COMPARATORTRIM])\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[TILDETRIM], tildeTrimReplace)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[CARETTRIM], caretTrimReplace)\n\n // normalize spaces\n range = range.split(/\\s+/).join(' ')\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]\n var set = range.split(' ').map(function (comp) {\n return parseComparator(comp, this.options)\n }, this).join(' ').split(/\\s+/)\n if (this.options.loose) {\n // in loose mode, throw out any that are not valid comparators\n set = set.filter(function (comp) {\n return !!comp.match(compRe)\n })\n }\n set = set.map(function (comp) {\n return new Comparator(comp, this.options)\n }, this)\n\n return set\n}\n\nRange.prototype.intersects = function (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some(function (thisComparators) {\n return thisComparators.every(function (thisComparator) {\n return range.set.some(function (rangeComparators) {\n return rangeComparators.every(function (rangeComparator) {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n })\n })\n}\n\n// Mostly just for testing and legacy API reasons\nexports.toComparators = toComparators\nfunction toComparators (range, options) {\n return new Range(range, options).set.map(function (comp) {\n return comp.map(function (c) {\n return c.value\n }).join(' ').trim().split(' ')\n })\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nfunction parseComparator (comp, options) {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nfunction isX (id) {\n return !id || id.toLowerCase() === 'x' || id === '*'\n}\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0\nfunction replaceTildes (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceTilde(comp, options)\n }).join(' ')\n}\n\nfunction replaceTilde (comp, options) {\n var r = options.loose ? re[TILDELOOSE] : re[TILDE]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('tilde', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0\n// ^1.2.3 --> >=1.2.3 <2.0.0\n// ^1.2.0 --> >=1.2.0 <2.0.0\nfunction replaceCarets (comp, options) {\n return comp.trim().split(/\\s+/).map(function (comp) {\n return replaceCaret(comp, options)\n }).join(' ')\n}\n\nfunction replaceCaret (comp, options) {\n debug('caret', comp, options)\n var r = options.loose ? re[CARETLOOSE] : re[CARET]\n return comp.replace(r, function (_, M, m, p, pr) {\n debug('caret', comp, _, M, m, p, pr)\n var ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (isX(p)) {\n if (M === '0') {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n } else {\n ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p + '-' + pr +\n ' <' + (+M + 1) + '.0.0'\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + m + '.' + (+p + 1)\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + M + '.' + (+m + 1) + '.0'\n }\n } else {\n ret = '>=' + M + '.' + m + '.' + p +\n ' <' + (+M + 1) + '.0.0'\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nfunction replaceXRanges (comp, options) {\n debug('replaceXRanges', comp, options)\n return comp.split(/\\s+/).map(function (comp) {\n return replaceXRange(comp, options)\n }).join(' ')\n}\n\nfunction replaceXRange (comp, options) {\n comp = comp.trim()\n var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]\n return comp.replace(r, function (ret, gtlt, M, m, p, pr) {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n var xM = isX(M)\n var xm = xM || isX(m)\n var xp = xm || isX(p)\n var anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n // >1.2.3 => >= 1.2.4\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n ret = gtlt + M + '.' + m + '.' + p\n } else if (xm) {\n ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'\n } else if (xp) {\n ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nfunction replaceStars (comp, options) {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp.trim().replace(re[STAR], '')\n}\n\n// This function is passed to string.replace(re[HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0\nfunction hyphenReplace ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr, tb) {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = '>=' + fM + '.0.0'\n } else if (isX(fp)) {\n from = '>=' + fM + '.' + fm + '.0'\n } else {\n from = '>=' + from\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = '<' + (+tM + 1) + '.0.0'\n } else if (isX(tp)) {\n to = '<' + tM + '.' + (+tm + 1) + '.0'\n } else if (tpr) {\n to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr\n } else {\n to = '<=' + to\n }\n\n return (from + ' ' + to).trim()\n}\n\n// if ANY of the sets match ALL of its comparators, then pass\nRange.prototype.test = function (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n version = new SemVer(version, this.options)\n }\n\n for (var i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n}\n\nfunction testSet (set, version, options) {\n for (var i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n var allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n\nexports.satisfies = satisfies\nfunction satisfies (version, range, options) {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\n\nexports.maxSatisfying = maxSatisfying\nfunction maxSatisfying (versions, range, options) {\n var max = null\n var maxSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\n\nexports.minSatisfying = minSatisfying\nfunction minSatisfying (versions, range, options) {\n var min = null\n var minSV = null\n try {\n var rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach(function (v) {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\n\nexports.minVersion = minVersion\nfunction minVersion (range, loose) {\n range = new Range(range, loose)\n\n var minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n comparators.forEach(function (comparator) {\n // Clone to avoid manipulating the comparator's semver object.\n var compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!minver || gt(minver, compver)) {\n minver = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error('Unexpected operation: ' + comparator.operator)\n }\n })\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\n\nexports.validRange = validRange\nfunction validRange (range, options) {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\n\n// Determine if version is less than all the versions possible in the range\nexports.ltr = ltr\nfunction ltr (version, range, options) {\n return outside(version, range, '<', options)\n}\n\n// Determine if version is greater than all the versions possible in the range.\nexports.gtr = gtr\nfunction gtr (version, range, options) {\n return outside(version, range, '>', options)\n}\n\nexports.outside = outside\nfunction outside (version, range, hilo, options) {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n var gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisifes the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (var i = 0; i < range.set.length; ++i) {\n var comparators = range.set[i]\n\n var high = null\n var low = null\n\n comparators.forEach(function (comparator) {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nexports.prerelease = prerelease\nfunction prerelease (version, options) {\n var parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\n\nexports.intersects = intersects\nfunction intersects (r1, r2, options) {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2)\n}\n\nexports.coerce = coerce\nfunction coerce (version) {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n var match = version.match(re[COERCE])\n\n if (match == null) {\n return null\n }\n\n return parse(match[1] +\n '.' + (match[2] || '0') +\n '.' + (match[3] || '0'))\n}\n","var inherits = require('inherits');\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n};\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n var lines = data.toString().split(/[\\r\\n]+/g);\n\n var label = options.label.toUpperCase();\n\n var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n var start = -1;\n var end = -1;\n for (var i = 0; i < lines.length; i++) {\n var match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n var base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n\n var input = new Buffer(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\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};","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","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\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","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\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}();","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","/**\n * lodash 4.0.1 (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright 2012-2016 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @type Function\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array ? array.length : 0,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n if (value !== value) {\n return baseFindIndex(array, baseIsNaN, fromIndex);\n }\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n // Safari 9 makes `arguments.length` enumerable in strict mode.\n var result = (isArray(value) || isArguments(value))\n ? baseTimes(value.length, String)\n : [];\n\n var length = result.length,\n skipIndexes = !!length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\nfunction includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag);\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\nfunction values(object) {\n return object ? baseValues(object, keys(object)) : [];\n}\n\nmodule.exports = includes;\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};","'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","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","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","/*global module, process*/\nvar Buffer = require('safe-buffer').Buffer;\nvar Stream = require('stream');\nvar util = require('util');\n\nfunction DataStream(data) {\n this.buffer = null;\n this.writable = true;\n this.readable = true;\n\n // No input\n if (!data) {\n this.buffer = Buffer.alloc(0);\n return this;\n }\n\n // Stream\n if (typeof data.pipe === 'function') {\n this.buffer = Buffer.alloc(0);\n data.pipe(this);\n return this;\n }\n\n // Buffer or String\n // or Object (assumedly a passworded key)\n if (data.length || typeof data === 'object') {\n this.buffer = data;\n this.writable = false;\n process.nextTick(function () {\n this.emit('end', data);\n this.readable = false;\n this.emit('close');\n }.bind(this));\n return this;\n }\n\n throw new TypeError('Unexpected data type ('+ typeof data + ')');\n}\nutil.inherits(DataStream, Stream);\n\nDataStream.prototype.write = function write(data) {\n this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]);\n this.emit('data', data);\n};\n\nDataStream.prototype.end = function end(data) {\n if (data)\n this.write(data);\n this.emit('end', data);\n this.emit('close');\n this.writable = false;\n this.readable = false;\n};\n\nmodule.exports = DataStream;\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","(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 for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\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 len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n 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 return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"px-3\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-12 px-3\"},[_c('button',{staticClass:\"btn btn-common btn-back\",on:{\"click\":_vm.back}},[_vm._v(\" Home \")])])]),_vm._m(0),_c('div',{staticClass:\"row justify-content-md-center\"},[_c('div',{staticClass:\"col-md-6\"},[_c('b-tabs',{attrs:{\"content-class\":\"mt-3\"}},[_c('b-tab',{attrs:{\"title\":\"With password\",\"active\":\"\"}},[_c('form',[_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"email\"}},[_vm._v(\"Email\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.email),expression:\"email\"}],staticClass:\"form-control\",attrs:{\"type\":\"email\",\"name\":\"email\",\"required\":\"\"},domProps:{\"value\":(_vm.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.email=$event.target.value}}})]),_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"password\"}},[_vm._v(\"Password\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.password),expression:\"password\"}],staticClass:\"form-control\",attrs:{\"type\":\"password\",\"id\":\"password\",\"name\":\"password\",\"required\":\"\"},domProps:{\"value\":(_vm.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.password=$event.target.value}}})]),_c('button',{staticClass:\"btn btn-common btn-green my-2\",attrs:{\"disabled\":!(_vm.email && _vm.password)},on:{\"click\":function($event){$event.preventDefault();return _vm.loginWithPassword($event)}}},[_vm._v(\" Login \")])])]),_c('b-tab',{attrs:{\"title\":\"With verification code\"}},[_c('form',[_c('div',{staticClass:\"form-group\"},[_c('label',{attrs:{\"for\":\"email\"}},[_vm._v(\"Email \"),_c('span',{staticClass:\"email-subtitle\"},[_vm._v(\"The PayPal email you've ever paid with\")])]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.email),expression:\"email\"}],staticClass:\"form-control\",attrs:{\"type\":\"email\",\"name\":\"email\",\"required\":\"\"},domProps:{\"value\":(_vm.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.email=$event.target.value}}})]),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.verificationCodeEmailSent),expression:\"!verificationCodeEmailSent\"}],staticClass:\"btn btn-common btn-green my-2\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.sendLoginVerificationCode($event)}}},[_vm._v(\" Send verification code \")]),(_vm.verificationCodeEmailSent)?_c('div',[_c('div',{staticClass:\"email-sent-tip\"},[_vm._v(\" Verification code has been sent to \"),_c('span',[_vm._v(_vm._s(_vm.email))])]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.verificationCode),expression:\"verificationCode\"}],ref:\"verificationCodeInput\",staticClass:\"form-control verification-code\",attrs:{\"type\":\"text\",\"inputmode\":\"numeric\",\"pattern\":\"[0-9]*\",\"maxlength\":\"6\"},domProps:{\"value\":(_vm.verificationCode)},on:{\"input\":[function($event){if($event.target.composing){ return; }_vm.verificationCode=$event.target.value},_vm.limitToSixDigits]}})]):_vm._e()])])],1)],1)])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row justify-content-md-center py-3\"},[_c('div',{staticClass:\"col-md-6\"},[_c('h3',{staticClass:\"h3\"},[_vm._v(\"Login\")])])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Login.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Login.vue?vue&type=template&id=08dc85d6&scoped=true&\"\nimport script from \"./Login.vue?vue&type=script&lang=js&\"\nexport * from \"./Login.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Login.vue?vue&type=style&index=0&id=08dc85d6&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"08dc85d6\",\n null\n \n)\n\nexport default component.exports","var bn = require('bn.js');\nvar randomBytes = require('randombytes');\nmodule.exports = crt;\nfunction blind(priv) {\n var r = getr(priv);\n var blinder = r.toRed(bn.mont(priv.modulus))\n .redPow(new bn(priv.publicExponent)).fromRed();\n return {\n blinder: blinder,\n unblinder:r.invm(priv.modulus)\n };\n}\nfunction crt(msg, priv) {\n var blinds = blind(priv);\n var len = priv.modulus.byteLength();\n var mod = bn.mont(priv.modulus);\n var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n var c1 = blinded.toRed(bn.mont(priv.prime1));\n var c2 = blinded.toRed(bn.mont(priv.prime2));\n var qinv = priv.coefficient;\n var p = priv.prime1;\n var q = priv.prime2;\n var m1 = c1.redPow(priv.exponent1);\n var m2 = c2.redPow(priv.exponent2);\n m1 = m1.fromRed();\n m2 = m2.fromRed();\n var h = m1.isub(m2).imul(qinv).umod(p);\n h.imul(q);\n m2.iadd(h);\n return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\ncrt.getr = getr;\nfunction getr(priv) {\n var len = priv.modulus.byteLength();\n var r = new bn(randomBytes(len));\n while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n r = new bn(randomBytes(len));\n }\n return r;\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","// 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;","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Readable;\n\n/**/\nvar isArray = require('isarray');\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\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);\n\n // 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 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // 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 var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // 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 var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // 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 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;\n\n // 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 this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // 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 this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\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\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\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.\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 if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\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 if (er) {\n stream.emit('error', 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) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\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 }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\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\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\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 return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\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 }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // 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 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || 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);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\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\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\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;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // 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 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 = true;\n n = 0;\n } else {\n state.length -= n;\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;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\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.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\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.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\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.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\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 case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\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 }\n\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 var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\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\n cleanedUp = true;\n\n // 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 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\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', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\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 = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\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\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\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, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\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 if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\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.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\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\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\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 if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\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 () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\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.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\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.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\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 if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\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 if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\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 return -1;\n}","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// 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\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/**/\n\nmodule.exports = Duplex;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\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\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\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 () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (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 }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict'\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","/*jshint node:true */\n'use strict';\nvar Buffer = require('buffer').Buffer; // browserify\nvar SlowBuffer = require('buffer').SlowBuffer;\n\nmodule.exports = bufferEq;\n\nfunction bufferEq(a, b) {\n\n // shortcutting on type is necessary for correctness\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n return false;\n }\n\n // buffer sizes should be well-known information, so despite this\n // shortcutting, it doesn't leak any information about the *contents* of the\n // buffers.\n if (a.length !== b.length) {\n return false;\n }\n\n var c = 0;\n for (var i = 0; i < a.length; i++) {\n /*jshint bitwise:false */\n c |= a[i] ^ b[i]; // XOR\n }\n return c === 0;\n}\n\nbufferEq.install = function() {\n Buffer.prototype.equal = SlowBuffer.prototype.equal = function equal(that) {\n return bufferEq(this, that);\n };\n};\n\nvar origBufEqual = Buffer.prototype.equal;\nvar origSlowBufEqual = SlowBuffer.prototype.equal;\nbufferEq.restore = function() {\n Buffer.prototype.equal = origBufEqual;\n SlowBuffer.prototype.equal = origSlowBufEqual;\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'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 ''\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","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","var Buffer = require('buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","\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","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';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar 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};","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '';\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","(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 for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\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 len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n 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 return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","module.exports = require('./readable').PassThrough\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","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n if (!isObjectLike(value) ||\n objectToString.call(value) != objectTag || isHostObject(value)) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return (typeof Ctor == 'function' &&\n Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString);\n}\n\nmodule.exports = isPlainObject;\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/**/\n\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n/**/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\n\n\nvar Stream = require('./internal/streams/stream');\n/**/\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/**/\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/**/\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}","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\nvar base = asn1.base;\nvar bignum = asn1.bignum;\n\n// Import DER constants\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n};\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!(data instanceof base.DecoderBuffer))\n data = new base.DecoderBuffer(data, options);\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n base.Node.call(this, 'der', parent);\n}\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n var state = buffer.save();\n var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n var decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n var len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n var state = buffer.save();\n var res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n while (true) {\n var tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n var len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n var res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len)\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n var result = [];\n while (!buffer.isEmpty()) {\n var possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n var res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n var unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n var raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n var str = '';\n for (var i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n var numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n var printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n var result;\n var identifiers = [];\n var ident = 0;\n while (!buffer.isEmpty()) {\n var subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n var first = (identifiers[0] / 40) | 0;\n var second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n var tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n var str = buffer.raw().toString();\n if (tag === 'gentime') {\n var year = str.slice(0, 4) | 0;\n var mon = str.slice(4, 6) | 0;\n var day = str.slice(6, 8) | 0;\n var hour = str.slice(8, 10) | 0;\n var min = str.slice(10, 12) | 0;\n var sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n var year = str.slice(0, 2) | 0;\n var mon = str.slice(2, 4) | 0;\n var day = str.slice(4, 6) | 0;\n var hour = str.slice(6, 8) | 0;\n var min = str.slice(8, 10) | 0;\n var sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n var res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n var raw = buffer.raw();\n var res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n var tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n var cls = der.tagClass[tag >> 6];\n var primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n var oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n var tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n var len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n var num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (var i = 0; i < num; i++) {\n len <<= 8;\n var j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\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 for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r <<= 4;\n\n // 'a' - 'f'\n if (c >= 49 && c <= 54) {\n r |= c - 49 + 0xa;\n\n // 'A' - 'F'\n } else if (c >= 17 && c <= 22) {\n r |= c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r |= c & 0xf;\n }\n }\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 len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n 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 return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\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","module.exports = require('./readable').Transform\n","var inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n var state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n var state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n var state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n var state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n var state = this._reporterState;\n\n var prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n var state = this._reporterState;\n\n var now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n var err;\n var state = this._reporterState;\n\n var inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n var state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n};\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\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\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\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","// 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// 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\n'use strict';\n\n/**/\n\nvar pna = require('process-nextick-args');\n/**/\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/**/\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/**/\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // 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 var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // 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 var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // 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 var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // 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 this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // 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 this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // 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 this.sync = true;\n\n // 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 this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\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 (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // 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\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 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\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.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\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\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) 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\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !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 TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\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 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 () {\n return this._writableState.highWaterMark;\n }\n});\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.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\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 if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\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 (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 pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', 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 stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\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\n onwriteStateUpdate(state);\n\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);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /**/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /**/\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}\n\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.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\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\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\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\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // 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 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 Error('_write() is not implemented'));\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);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.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 if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\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 while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\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","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\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');\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\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 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/**/\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/**/\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});","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = once;\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","// 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;","var semver = require('semver');\n\nmodule.exports = semver.satisfies(process.version, '^6.12.0 || >=8.0.0');\n","var asn1 = require('../asn1');\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n};\n\nEntity.prototype._createNamed = function createNamed(base) {\n var named;\n try {\n named = require('vm').runInThisContext(\n '(function ' + this.name + '(entity) {\\n' +\n ' this._initNamed(entity);\\n' +\n '})'\n );\n } catch (e) {\n named = function (entity) {\n this._initNamed(entity);\n };\n }\n inherits(named, base);\n named.prototype._initNamed = function initnamed(entity) {\n base.call(this, entity);\n };\n\n return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","module.exports = require('events').EventEmitter;\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}","var JsonWebTokenError = require('./JsonWebTokenError');\n\nvar NotBeforeError = function (message, date) {\n JsonWebTokenError.call(this, message);\n this.name = 'NotBeforeError';\n this.date = date;\n};\n\nNotBeforeError.prototype = Object.create(JsonWebTokenError.prototype);\n\nNotBeforeError.prototype.constructor = NotBeforeError;\n\nmodule.exports = NotBeforeError;","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","var ms = require('ms');\n\nmodule.exports = function (time, iat) {\n var timestamp = iat || Math.floor(Date.now() / 1000);\n\n if (typeof time === 'string') {\n var milliseconds = ms(time);\n if (typeof milliseconds === 'undefined') {\n return;\n }\n return Math.floor(timestamp + milliseconds / 1000);\n } else if (typeof time === 'number') {\n return timestamp + time;\n } else {\n return;\n }\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","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\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","// 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;","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\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"],"sourceRoot":""}