{"version":3,"file":"/js/desosignup.js","mappings":"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ACA,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,sEAINP,IAAK,CACH3nB,IAAK,EACLkoB,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,mE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","sources":["webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/api.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/base/index.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/base/node.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/constants/der.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/constants/index.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack://getting-started-using-a-configuration/./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack://getting-started-using-a-configuration/./node_modules/assert/assert.js","webpack://getting-started-using-a-configuration/./node_modules/assert/node_modules/inherits/inherits_browser.js","webpack://getting-started-using-a-configuration/./node_modules/assert/node_modules/util/support/isBufferBrowser.js","webpack://getting-started-using-a-configuration/./node_modules/assert/node_modules/util/util.js","webpack://getting-started-using-a-configuration/./node_modules/base-x/src/index.js","webpack://getting-started-using-a-configuration/./node_modules/base64-js/index.js","webpack://getting-started-using-a-configuration/./node_modules/bip39/src/_wordlists.js","webpack://getting-started-using-a-configuration/./node_modules/bip39/src/index.js","webpack://getting-started-using-a-configuration/./node_modules/bn.js/lib/bn.js","webpack://getting-started-using-a-configuration/./node_modules/brorand/index.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/aes.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/authCipher.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/browser.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/decrypter.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/encrypter.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/ghash.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/incr32.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/cbc.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/cfb.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/cfb1.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/cfb8.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/ctr.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/ecb.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/index.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/modes/ofb.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-aes/streamCipher.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-cipher/browser.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-des/index.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-des/modes.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-rsa/index.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-rsa/node_modules/bn.js/lib/bn.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-sign/algos.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-sign/browser/index.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-sign/browser/sign.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-sign/browser/verify.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-sign/node_modules/bn.js/lib/bn.js","webpack://getting-started-using-a-configuration/./node_modules/browserify-sign/node_modules/safe-buffer/index.js","webpack://getting-started-using-a-configuration/./node_modules/bs58/index.js","webpack://getting-started-using-a-configuration/./node_modules/bs58check/base.js","webpack://getting-started-using-a-configuration/./node_modules/bs58check/index.js","webpack://getting-started-using-a-configuration/./node_modules/buffer-xor/index.js","webpack://getting-started-using-a-configuration/./node_modules/buffer/index.js","webpack://getting-started-using-a-configuration/./node_modules/cipher-base/index.js","webpack://getting-started-using-a-configuration/./node_modules/convert-hex/convert-hex.js","webpack://getting-started-using-a-configuration/./node_modules/convert-string/convert-string.js","webpack://getting-started-using-a-configuration/./node_modules/core-util-is/lib/util.js","webpack://getting-started-using-a-configuration/./node_modules/create-ecdh/browser.js","webpack://getting-started-using-a-configuration/./node_modules/create-hash/browser.js","webpack://getting-started-using-a-configuration/./node_modules/create-hash/md5.js","webpack://getting-started-using-a-configuration/./node_modules/create-hmac/browser.js","webpack://getting-started-using-a-configuration/./node_modules/create-hmac/legacy.js","webpack://getting-started-using-a-configuration/./node_modules/crypto-browserify/index.js","webpack://getting-started-using-a-configuration/./node_modules/des.js/lib/des.js","webpack://getting-started-using-a-configuration/./node_modules/des.js/lib/des/cbc.js","webpack://getting-started-using-a-configuration/./node_modules/des.js/lib/des/cipher.js","webpack://getting-started-using-a-configuration/./node_modules/des.js/lib/des/des.js","webpack://getting-started-using-a-configuration/./node_modules/des.js/lib/des/ede.js","webpack://getting-started-using-a-configuration/./node_modules/des.js/lib/des/utils.js","webpack://getting-started-using-a-configuration/./node_modules/diffie-hellman/browser.js","webpack://getting-started-using-a-configuration/./node_modules/diffie-hellman/lib/dh.js","webpack://getting-started-using-a-configuration/./node_modules/diffie-hellman/lib/generatePrime.js","webpack://getting-started-using-a-configuration/./node_modules/dijkstrajs/dijkstra.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/curve/base.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/curve/index.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/curve/short.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/curves.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/ec/index.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/ec/key.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack://getting-started-using-a-configuration/./node_modules/elliptic/lib/elliptic/utils.js","webpack://getting-started-using-a-configuration/./node_modules/encode-utf8/index.js","webpack://getting-started-using-a-configuration/./node_modules/events/events.js","webpack://getting-started-using-a-configuration/./node_modules/evp_bytestokey/index.js","webpack://getting-started-using-a-configuration/./node_modules/hash-base/index.js","webpack://getting-started-using-a-configuration/./node_modules/hash-base/node_modules/safe-buffer/index.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/common.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/hmac.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/ripemd.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/sha.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/sha/1.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/sha/224.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/sha/256.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/sha/384.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/sha/512.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/sha/common.js","webpack://getting-started-using-a-configuration/./node_modules/hash.js/lib/hash/utils.js","webpack://getting-started-using-a-configuration/./node_modules/hdkey/lib/hdkey.js","webpack://getting-started-using-a-configuration/./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack://getting-started-using-a-configuration/./node_modules/ieee754/index.js","webpack://getting-started-using-a-configuration/./node_modules/inherits/inherits_browser.js","webpack://getting-started-using-a-configuration/./node_modules/isarray/index.js","webpack://getting-started-using-a-configuration/./node_modules/lodash/lodash.js","webpack://getting-started-using-a-configuration/./node_modules/md5.js/index.js","webpack://getting-started-using-a-configuration/./node_modules/miller-rabin/lib/mr.js","webpack://getting-started-using-a-configuration/./node_modules/minimalistic-assert/index.js","webpack://getting-started-using-a-configuration/./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack://getting-started-using-a-configuration/./node_modules/object-assign/index.js","webpack://getting-started-using-a-configuration/./node_modules/parse-asn1/asn1.js","webpack://getting-started-using-a-configuration/./node_modules/parse-asn1/certificate.js","webpack://getting-started-using-a-configuration/./node_modules/parse-asn1/fixProc.js","webpack://getting-started-using-a-configuration/./node_modules/parse-asn1/index.js","webpack://getting-started-using-a-configuration/./node_modules/pbkdf2/browser.js","webpack://getting-started-using-a-configuration/./node_modules/pbkdf2/lib/async.js","webpack://getting-started-using-a-configuration/./node_modules/pbkdf2/lib/default-encoding.js","webpack://getting-started-using-a-configuration/./node_modules/pbkdf2/lib/precondition.js","webpack://getting-started-using-a-configuration/./node_modules/pbkdf2/lib/sync-browser.js","webpack://getting-started-using-a-configuration/./node_modules/pbkdf2/lib/to-buffer.js","webpack://getting-started-using-a-configuration/./node_modules/process-nextick-args/index.js","webpack://getting-started-using-a-configuration/./node_modules/process/browser.js","webpack://getting-started-using-a-configuration/./node_modules/public-encrypt/browser.js","webpack://getting-started-using-a-configuration/./node_modules/public-encrypt/mgf.js","webpack://getting-started-using-a-configuration/./node_modules/public-encrypt/privateDecrypt.js","webpack://getting-started-using-a-configuration/./node_modules/public-encrypt/publicEncrypt.js","webpack://getting-started-using-a-configuration/./node_modules/public-encrypt/withPublic.js","webpack://getting-started-using-a-configuration/./node_modules/public-encrypt/xor.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/browser.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/can-promise.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/alignment-pattern.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/alphanumeric-data.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/bit-buffer.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/bit-matrix.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/byte-data.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/error-correction-code.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/error-correction-level.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/finder-pattern.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/format-info.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/galois-field.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/kanji-data.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/mask-pattern.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/mode.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/numeric-data.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/polynomial.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/qrcode.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/reed-solomon-encoder.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/regex.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/segments.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/utils.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/version-check.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/core/version.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/renderer/canvas.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/renderer/svg-tag.js","webpack://getting-started-using-a-configuration/./node_modules/qrcode/lib/renderer/utils.js","webpack://getting-started-using-a-configuration/./node_modules/randombytes/browser.js","webpack://getting-started-using-a-configuration/./node_modules/randomfill/browser.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/errors-browser.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/_stream_duplex.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/_stream_passthrough.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/_stream_readable.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/_stream_transform.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/_stream_writable.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/state.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://getting-started-using-a-configuration/./node_modules/readable-stream/readable-browser.js","webpack://getting-started-using-a-configuration/./node_modules/ripemd160/index.js","webpack://getting-started-using-a-configuration/./node_modules/safe-buffer/index.js","webpack://getting-started-using-a-configuration/./node_modules/safer-buffer/safer.js","webpack://getting-started-using-a-configuration/./node_modules/secp256k1/elliptic.js","webpack://getting-started-using-a-configuration/./node_modules/secp256k1/lib/elliptic.js","webpack://getting-started-using-a-configuration/./node_modules/secp256k1/lib/index.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/hash.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/index.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/sha.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/sha1.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/sha224.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/sha256.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/sha384.js","webpack://getting-started-using-a-configuration/./node_modules/sha.js/sha512.js","webpack://getting-started-using-a-configuration/./node_modules/sha256/lib/sha256.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/index.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/duplex-browser.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/passthrough.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/readable-browser.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/transform.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/readable-stream/writable-browser.js","webpack://getting-started-using-a-configuration/./node_modules/stream-browserify/node_modules/string_decoder/lib/string_decoder.js","webpack://getting-started-using-a-configuration/./node_modules/string_decoder/lib/string_decoder.js","webpack://getting-started-using-a-configuration/./node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://getting-started-using-a-configuration/./node_modules/util-deprecate/browser.js","webpack://getting-started-using-a-configuration/webpack/bootstrap","webpack://getting-started-using-a-configuration/webpack/runtime/compat get default export","webpack://getting-started-using-a-configuration/webpack/runtime/define property getters","webpack://getting-started-using-a-configuration/webpack/runtime/global","webpack://getting-started-using-a-configuration/webpack/runtime/hasOwnProperty shorthand","webpack://getting-started-using-a-configuration/webpack/runtime/node module decorator","webpack://getting-started-using-a-configuration/./res/seeds.js","webpack://getting-started-using-a-configuration/./res/deso.js","webpack://getting-started-using-a-configuration/./res/encryption.js","webpack://getting-started-using-a-configuration/./res/desosignup.js","webpack://getting-started-using-a-configuration/./res/index.js"],"sourcesContent":["'use strict';\n\nconst 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","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst 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 const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(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(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(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","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-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.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\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 const 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 const 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 (!EncoderBuffer.isEncoderBuffer(item))\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.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(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","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst 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\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst 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, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\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\nconst 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 const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const 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 const 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 const state = this._baseState;\n\n // Filter children and args\n const 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 const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const 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 const 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 const 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 const state = this._baseState;\n const 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 const 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 const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const 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 const 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 const 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 let result = state['default'];\n let present = true;\n\n let 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 let 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 const 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 let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const 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 // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\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 const 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 const 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 const 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 const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const 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 const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const 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 const 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 let 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 let content = null;\n let 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 const 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 const 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 const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const 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 if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const 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 const state = this._baseState;\n\n const 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 const 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","'use strict';\n\nconst 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 const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const 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 const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const 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 const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const 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 const 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';\n\n// Helper\nfunction reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = 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 = reverse(exports.tag);\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const 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 const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const 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 const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let 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 const state = buffer.save();\n const 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 for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let 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 const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const 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 const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let 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 const 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 const 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 let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n 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 const first = (identifiers[0] / 40) | 0;\n const 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 let 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 const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n 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() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const 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 const raw = buffer.raw();\n let 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 let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let 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 const 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 let 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 const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst 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 const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const 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 const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../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 Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(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 let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let 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 const buf = Buffer.alloc(str.length * 2);\n for (let 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 (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let 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 let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let 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 let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\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.getUTCFullYear() % 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 const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(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 let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let 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(Buffer.from(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 const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const 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 let 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","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst 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 const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let 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","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","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","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}","// 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 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 // Allow for deprecating things in the process of starting up.\n if (isUndefined(global.process)) {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n if (process.noDeprecation === true) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\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","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n 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\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// browserify by default only pulls in files that are hard coded in requires\n// In order of last to first in this file, the default wordlist will be chosen\n// based on what is present. (Bundles may remove wordlists they don't need)\nconst wordlists = {};\nexports.wordlists = wordlists;\nlet _default;\nexports._default = _default;\ntry {\n exports._default = _default = require('./wordlists/czech.json');\n wordlists.czech = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/chinese_simplified.json');\n wordlists.chinese_simplified = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/chinese_traditional.json');\n wordlists.chinese_traditional = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/korean.json');\n wordlists.korean = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/french.json');\n wordlists.french = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/italian.json');\n wordlists.italian = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/spanish.json');\n wordlists.spanish = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/japanese.json');\n wordlists.japanese = _default;\n wordlists.JA = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/portuguese.json');\n wordlists.portuguese = _default;\n}\ncatch (err) { }\ntry {\n exports._default = _default = require('./wordlists/english.json');\n wordlists.english = _default;\n wordlists.EN = _default;\n}\ncatch (err) { }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst createHash = require(\"create-hash\");\nconst pbkdf2_1 = require(\"pbkdf2\");\nconst randomBytes = require(\"randombytes\");\nconst _wordlists_1 = require(\"./_wordlists\");\nlet DEFAULT_WORDLIST = _wordlists_1._default;\nconst INVALID_MNEMONIC = 'Invalid mnemonic';\nconst INVALID_ENTROPY = 'Invalid entropy';\nconst INVALID_CHECKSUM = 'Invalid mnemonic checksum';\nconst WORDLIST_REQUIRED = 'A wordlist is required but a default could not be found.\\n' +\n 'Please pass a 2048 word array explicitly.';\nfunction pbkdf2Promise(password, saltMixin, iterations, keylen, digest) {\n return Promise.resolve().then(() => new Promise((resolve, reject) => {\n const callback = (err, derivedKey) => {\n if (err) {\n return reject(err);\n }\n else {\n return resolve(derivedKey);\n }\n };\n pbkdf2_1.pbkdf2(password, saltMixin, iterations, keylen, digest, callback);\n }));\n}\nfunction normalize(str) {\n return (str || '').normalize('NFKD');\n}\nfunction lpad(str, padString, length) {\n while (str.length < length) {\n str = padString + str;\n }\n return str;\n}\nfunction binaryToByte(bin) {\n return parseInt(bin, 2);\n}\nfunction bytesToBinary(bytes) {\n return bytes.map((x) => lpad(x.toString(2), '0', 8)).join('');\n}\nfunction deriveChecksumBits(entropyBuffer) {\n const ENT = entropyBuffer.length * 8;\n const CS = ENT / 32;\n const hash = createHash('sha256')\n .update(entropyBuffer)\n .digest();\n return bytesToBinary(Array.from(hash)).slice(0, CS);\n}\nfunction salt(password) {\n return 'mnemonic' + (password || '');\n}\nfunction mnemonicToSeedSync(mnemonic, password) {\n const mnemonicBuffer = Buffer.from(normalize(mnemonic), 'utf8');\n const saltBuffer = Buffer.from(salt(normalize(password)), 'utf8');\n return pbkdf2_1.pbkdf2Sync(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512');\n}\nexports.mnemonicToSeedSync = mnemonicToSeedSync;\nfunction mnemonicToSeed(mnemonic, password) {\n return Promise.resolve().then(() => {\n const mnemonicBuffer = Buffer.from(normalize(mnemonic), 'utf8');\n const saltBuffer = Buffer.from(salt(normalize(password)), 'utf8');\n return pbkdf2Promise(mnemonicBuffer, saltBuffer, 2048, 64, 'sha512');\n });\n}\nexports.mnemonicToSeed = mnemonicToSeed;\nfunction mnemonicToEntropy(mnemonic, wordlist) {\n wordlist = wordlist || DEFAULT_WORDLIST;\n if (!wordlist) {\n throw new Error(WORDLIST_REQUIRED);\n }\n const words = normalize(mnemonic).split(' ');\n if (words.length % 3 !== 0) {\n throw new Error(INVALID_MNEMONIC);\n }\n // convert word indices to 11 bit binary strings\n const bits = words\n .map((word) => {\n const index = wordlist.indexOf(word);\n if (index === -1) {\n throw new Error(INVALID_MNEMONIC);\n }\n return lpad(index.toString(2), '0', 11);\n })\n .join('');\n // split the binary string into ENT/CS\n const dividerIndex = Math.floor(bits.length / 33) * 32;\n const entropyBits = bits.slice(0, dividerIndex);\n const checksumBits = bits.slice(dividerIndex);\n // calculate the checksum and compare\n const entropyBytes = entropyBits.match(/(.{1,8})/g).map(binaryToByte);\n if (entropyBytes.length < 16) {\n throw new Error(INVALID_ENTROPY);\n }\n if (entropyBytes.length > 32) {\n throw new Error(INVALID_ENTROPY);\n }\n if (entropyBytes.length % 4 !== 0) {\n throw new Error(INVALID_ENTROPY);\n }\n const entropy = Buffer.from(entropyBytes);\n const newChecksum = deriveChecksumBits(entropy);\n if (newChecksum !== checksumBits) {\n throw new Error(INVALID_CHECKSUM);\n }\n return entropy.toString('hex');\n}\nexports.mnemonicToEntropy = mnemonicToEntropy;\nfunction entropyToMnemonic(entropy, wordlist) {\n if (!Buffer.isBuffer(entropy)) {\n entropy = Buffer.from(entropy, 'hex');\n }\n wordlist = wordlist || DEFAULT_WORDLIST;\n if (!wordlist) {\n throw new Error(WORDLIST_REQUIRED);\n }\n // 128 <= ENT <= 256\n if (entropy.length < 16) {\n throw new TypeError(INVALID_ENTROPY);\n }\n if (entropy.length > 32) {\n throw new TypeError(INVALID_ENTROPY);\n }\n if (entropy.length % 4 !== 0) {\n throw new TypeError(INVALID_ENTROPY);\n }\n const entropyBits = bytesToBinary(Array.from(entropy));\n const checksumBits = deriveChecksumBits(entropy);\n const bits = entropyBits + checksumBits;\n const chunks = bits.match(/(.{1,11})/g);\n const words = chunks.map((binary) => {\n const index = binaryToByte(binary);\n return wordlist[index];\n });\n return wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093' // Japanese wordlist\n ? words.join('\\u3000')\n : words.join(' ');\n}\nexports.entropyToMnemonic = entropyToMnemonic;\nfunction generateMnemonic(strength, rng, wordlist) {\n strength = strength || 128;\n if (strength % 32 !== 0) {\n throw new TypeError(INVALID_ENTROPY);\n }\n rng = rng || randomBytes;\n return entropyToMnemonic(rng(strength / 8), wordlist);\n}\nexports.generateMnemonic = generateMnemonic;\nfunction validateMnemonic(mnemonic, wordlist) {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n }\n catch (e) {\n return false;\n }\n return true;\n}\nexports.validateMnemonic = validateMnemonic;\nfunction setDefaultWordlist(language) {\n const result = _wordlists_1.wordlists[language];\n if (result) {\n DEFAULT_WORDLIST = result;\n }\n else {\n throw new Error('Could not find wordlist for language \"' + language + '\"');\n }\n}\nexports.setDefaultWordlist = setDefaultWordlist;\nfunction getDefaultWordlist() {\n if (!DEFAULT_WORDLIST) {\n throw new Error('No Default Wordlist set');\n }\n return Object.keys(_wordlists_1.wordlists).filter((lang) => {\n if (lang === 'JA' || lang === 'EN') {\n return false;\n }\n return _wordlists_1.wordlists[lang].every((word, index) => word === DEFAULT_WORDLIST[index]);\n })[0];\n}\nexports.getDefaultWordlist = getDefaultWordlist;\nvar _wordlists_2 = require(\"./_wordlists\");\nexports.wordlists = _wordlists_2.wordlists;\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '';\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 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","// 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","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 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 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","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","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","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","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 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 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 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","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","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","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","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","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","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","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","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\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).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = require('./browser/algorithms.json')\n","var Buffer = require('safe-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","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-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","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, superCtor) {\n ctor.super_ = superCtor;\n var TempCtor = function () {};\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n }\n\n // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\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 basex = require('base-x')\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","'use strict'\n\nvar base58 = require('bs58')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (checksumFn) {\n // Encode a buffer as a base58-check encoded string\n function encode (payload) {\n var checksum = checksumFn(payload)\n\n return base58.encode(Buffer.concat([\n payload,\n checksum\n ], payload.length + 4))\n }\n\n function decodeRaw (buffer) {\n var payload = buffer.slice(0, -4)\n var checksum = buffer.slice(-4)\n var newChecksum = checksumFn(payload)\n\n if (checksum[0] ^ newChecksum[0] |\n checksum[1] ^ newChecksum[1] |\n checksum[2] ^ newChecksum[2] |\n checksum[3] ^ newChecksum[3]) return\n\n return payload\n }\n\n // Decode a base58-check encoded string to a buffer, no result if checksum is wrong\n function decodeUnsafe (string) {\n var buffer = base58.decodeUnsafe(string)\n if (!buffer) return\n\n return decodeRaw(buffer)\n }\n\n function decode (string) {\n var buffer = base58.decode(string)\n var payload = decodeRaw(buffer, checksumFn)\n if (!payload) throw new Error('Invalid checksum')\n return payload\n }\n\n return {\n encode: encode,\n decode: decode,\n decodeUnsafe: decodeUnsafe\n }\n}\n","'use strict'\n\nvar createHash = require('create-hash')\nvar bs58checkBase = require('./base')\n\n// SHA256(SHA256(buffer))\nfunction sha256x2 (buffer) {\n var tmp = createHash('sha256').update(buffer).digest()\n return createHash('sha256').update(tmp).digest()\n}\n\nmodule.exports = bs58checkBase(sha256x2)\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","/*!\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\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","!function(globals) {\n'use strict'\n\nvar convertHex = {\n bytesToHex: function(bytes) {\n /*if (typeof bytes.byteLength != 'undefined') {\n var newBytes = []\n\n if (typeof bytes.buffer != 'undefined')\n bytes = new DataView(bytes.buffer)\n else\n bytes = new DataView(bytes)\n\n for (var i = 0; i < bytes.byteLength; ++i) {\n newBytes.push(bytes.getUint8(i))\n }\n bytes = newBytes\n }*/\n return arrBytesToHex(bytes)\n },\n hexToBytes: function(hex) {\n if (hex.length % 2 === 1) throw new Error(\"hexToBytes can't have a string with an odd number of characters.\")\n if (hex.indexOf('0x') === 0) hex = hex.slice(2)\n return hex.match(/../g).map(function(x) { return parseInt(x,16) })\n }\n}\n\n\n// PRIVATE\n\nfunction arrBytesToHex(bytes) {\n return bytes.map(function(x) { return padLeft(x.toString(16),2) }).join('')\n}\n\nfunction padLeft(orig, len) {\n if (orig.length > len) return orig\n return Array(len - orig.length + 1).join('0') + orig\n}\n\n\nif (typeof module !== 'undefined' && module.exports) { //CommonJS\n module.exports = convertHex\n} else {\n globals.convertHex = convertHex\n}\n\n}(this);","!function(globals) {\n'use strict'\n\nvar convertString = {\n bytesToString: function(bytes) {\n return bytes.map(function(x){ return String.fromCharCode(x) }).join('')\n },\n stringToBytes: function(str) {\n return str.split('').map(function(x) { return x.charCodeAt(0) })\n }\n}\n\n//http://hossa.in/2012/07/20/utf-8-in-javascript.html\nconvertString.UTF8 = {\n bytesToString: function(bytes) {\n return decodeURIComponent(escape(convertString.bytesToString(bytes)))\n },\n stringToBytes: function(str) {\n return convertString.stringToBytes(unescape(encodeURIComponent(str)))\n }\n}\n\nif (typeof module !== 'undefined' && module.exports) { //CommonJS\n module.exports = convertString\n} else {\n globals.convertString = convertString\n}\n\n}(this);","// 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 = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\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","'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","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar 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'\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","'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","'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","'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","'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","'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","'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","'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","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","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","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\n/******************************************************************************\n * Created 2008-08-19.\n *\n * Dijkstra path-finding functions. Adapted from the Dijkstar Python project.\n *\n * Copyright (C) 2008\n * Wyatt Baldwin \n * All rights reserved\n *\n * Licensed under the MIT license.\n *\n * http://www.opensource.org/licenses/mit-license.php\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n *****************************************************************************/\nvar dijkstra = {\n single_source_shortest_paths: function(graph, s, d) {\n // Predecessor map for each node that has been encountered.\n // node ID => predecessor node ID\n var predecessors = {};\n\n // Costs of shortest paths from s to all nodes encountered.\n // node ID => cost\n var costs = {};\n costs[s] = 0;\n\n // Costs of shortest paths from s to all nodes encountered; differs from\n // `costs` in that it provides easy access to the node that currently has\n // the known shortest path from s.\n // XXX: Do we actually need both `costs` and `open`?\n var open = dijkstra.PriorityQueue.make();\n open.push(s, 0);\n\n var closest,\n u, v,\n cost_of_s_to_u,\n adjacent_nodes,\n cost_of_e,\n cost_of_s_to_u_plus_cost_of_e,\n cost_of_s_to_v,\n first_visit;\n while (!open.empty()) {\n // In the nodes remaining in graph that have a known cost from s,\n // find the node, u, that currently has the shortest path from s.\n closest = open.pop();\n u = closest.value;\n cost_of_s_to_u = closest.cost;\n\n // Get nodes adjacent to u...\n adjacent_nodes = graph[u] || {};\n\n // ...and explore the edges that connect u to those nodes, updating\n // the cost of the shortest paths to any or all of those nodes as\n // necessary. v is the node across the current edge from u.\n for (v in adjacent_nodes) {\n if (adjacent_nodes.hasOwnProperty(v)) {\n // Get the cost of the edge running from u to v.\n cost_of_e = adjacent_nodes[v];\n\n // Cost of s to u plus the cost of u to v across e--this is *a*\n // cost from s to v that may or may not be less than the current\n // known cost to v.\n cost_of_s_to_u_plus_cost_of_e = cost_of_s_to_u + cost_of_e;\n\n // If we haven't visited v yet OR if the current known cost from s to\n // v is greater than the new cost we just found (cost of s to u plus\n // cost of u to v across e), update v's cost in the cost list and\n // update v's predecessor in the predecessor list (it's now u).\n cost_of_s_to_v = costs[v];\n first_visit = (typeof costs[v] === 'undefined');\n if (first_visit || cost_of_s_to_v > cost_of_s_to_u_plus_cost_of_e) {\n costs[v] = cost_of_s_to_u_plus_cost_of_e;\n open.push(v, cost_of_s_to_u_plus_cost_of_e);\n predecessors[v] = u;\n }\n }\n }\n }\n\n if (typeof d !== 'undefined' && typeof costs[d] === 'undefined') {\n var msg = ['Could not find a path from ', s, ' to ', d, '.'].join('');\n throw new Error(msg);\n }\n\n return predecessors;\n },\n\n extract_shortest_path_from_predecessor_list: function(predecessors, d) {\n var nodes = [];\n var u = d;\n var predecessor;\n while (u) {\n nodes.push(u);\n predecessor = predecessors[u];\n u = predecessors[u];\n }\n nodes.reverse();\n return nodes;\n },\n\n find_path: function(graph, s, d) {\n var predecessors = dijkstra.single_source_shortest_paths(graph, s, d);\n return dijkstra.extract_shortest_path_from_predecessor_list(\n predecessors, d);\n },\n\n /**\n * A very naive priority queue implementation.\n */\n PriorityQueue: {\n make: function (opts) {\n var T = dijkstra.PriorityQueue,\n t = {},\n key;\n opts = opts || {};\n for (key in T) {\n if (T.hasOwnProperty(key)) {\n t[key] = T[key];\n }\n }\n t.queue = [];\n t.sorter = opts.sorter || T.default_sorter;\n return t;\n },\n\n default_sorter: function (a, b) {\n return a.cost - b.cost;\n },\n\n /**\n * Add a new item to the queue and ensure the highest priority element\n * is at the front of the queue.\n */\n push: function (value, cost) {\n var item = {value: value, cost: cost};\n this.queue.push(item);\n this.queue.sort(this.sorter);\n },\n\n /**\n * Return the highest priority element in the queue.\n */\n pop: function () {\n return this.queue.shift();\n },\n\n empty: function () {\n return this.queue.length === 0;\n }\n }\n};\n\n\n// node.js module exports\nif (typeof module !== 'undefined') {\n module.exports = dijkstra;\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","'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","'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","'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 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","'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 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 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 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 BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar 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","'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","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar 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","'use strict'\n\nmodule.exports = function encodeUtf8 (input) {\n var result = []\n var size = input.length\n\n for (var index = 0; index < size; index++) {\n var point = input.charCodeAt(index)\n\n if (point >= 0xD800 && point <= 0xDBFF && size > index + 1) {\n var second = input.charCodeAt(index + 1)\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n point = (point - 0xD800) * 0x400 + second - 0xDC00 + 0x10000\n index += 1\n }\n }\n\n // US-ASCII\n if (point < 0x80) {\n result.push(point)\n continue\n }\n\n // 2-byte UTF-8\n if (point < 0x800) {\n result.push((point >> 6) | 192)\n result.push((point & 63) | 128)\n continue\n }\n\n // 3-byte UTF-8\n if (point < 0xD800 || (point >= 0xE000 && point < 0x10000)) {\n result.push((point >> 12) | 224)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // 4-byte UTF-8\n if (point >= 0x10000 && point <= 0x10FFFF) {\n result.push((point >> 18) | 240)\n result.push(((point >> 12) & 63) | 128)\n result.push(((point >> 6) & 63) | 128)\n result.push((point & 63) | 128)\n continue\n }\n\n // Invalid character\n result.push(0xEF, 0xBF, 0xBD)\n }\n\n return new Uint8Array(result).buffer\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;\nmodule.exports.once = once;\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\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\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 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","/*! safe-buffer. MIT License. Feross Aboukhadijeh */\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 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","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar 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';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n];\n\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\n 0xcbbb9d5d, 0xc1059ed8,\n 0x629a292a, 0x367cd507,\n 0x9159015a, 0x3070dd17,\n 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31,\n 0x8eb44a87, 0x68581511,\n 0xdb0c2e0d, 0x64f98fa7,\n 0x47b5481d, 0xbefa4fa4 ];\n}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xf3bcc908,\n 0xbb67ae85, 0x84caa73b,\n 0x3c6ef372, 0xfe94f82b,\n 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1,\n 0x9b05688c, 0x2b3e6c1f,\n 0x1f83d9ab, 0xfb41bd6b,\n 0x5be0cd19, 0x137e2179 ];\n this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar 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","var assert = require('assert')\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = require('crypto')\nvar bs58check = require('bs58check')\nvar secp256k1 = require('secp256k1')\n\nvar MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')\nvar HARDENED_OFFSET = 0x80000000\nvar LEN = 78\n\n// Bitcoin hardcoded by default, can use package `coininfo` for others\nvar BITCOIN_VERSIONS = {private: 0x0488ADE4, public: 0x0488B21E}\n\nfunction HDKey (versions) {\n this.versions = versions || BITCOIN_VERSIONS\n this.depth = 0\n this.index = 0\n this._privateKey = null\n this._publicKey = null\n this.chainCode = null\n this._fingerprint = 0\n this.parentFingerprint = 0\n}\n\nObject.defineProperty(HDKey.prototype, 'fingerprint', { get: function () { return this._fingerprint } })\nObject.defineProperty(HDKey.prototype, 'identifier', { get: function () { return this._identifier } })\nObject.defineProperty(HDKey.prototype, 'pubKeyHash', { get: function () { return this.identifier } })\n\nObject.defineProperty(HDKey.prototype, 'privateKey', {\n get: function () {\n return this._privateKey\n },\n set: function (value) {\n assert.equal(value.length, 32, 'Private key must be 32 bytes.')\n assert(secp256k1.privateKeyVerify(value) === true, 'Invalid private key')\n\n this._privateKey = value\n this._publicKey = Buffer.from(secp256k1.publicKeyCreate(value, true))\n this._identifier = hash160(this.publicKey)\n this._fingerprint = this._identifier.slice(0, 4).readUInt32BE(0)\n }\n})\n\nObject.defineProperty(HDKey.prototype, 'publicKey', {\n get: function () {\n return this._publicKey\n },\n set: function (value) {\n assert(value.length === 33 || value.length === 65, 'Public key must be 33 or 65 bytes.')\n assert(secp256k1.publicKeyVerify(value) === true, 'Invalid public key')\n\n this._publicKey = Buffer.from(secp256k1.publicKeyConvert(value, true)) // force compressed point\n this._identifier = hash160(this.publicKey)\n this._fingerprint = this._identifier.slice(0, 4).readUInt32BE(0)\n this._privateKey = null\n }\n})\n\nObject.defineProperty(HDKey.prototype, 'privateExtendedKey', {\n get: function () {\n if (this._privateKey) return bs58check.encode(serialize(this, this.versions.private, Buffer.concat([Buffer.alloc(1, 0), this.privateKey])))\n else return null\n }\n})\n\nObject.defineProperty(HDKey.prototype, 'publicExtendedKey', {\n get: function () {\n return bs58check.encode(serialize(this, this.versions.public, this.publicKey))\n }\n})\n\nHDKey.prototype.derive = function (path) {\n if (path === 'm' || path === 'M' || path === \"m'\" || path === \"M'\") {\n return this\n }\n\n var entries = path.split('/')\n var hdkey = this\n entries.forEach(function (c, i) {\n if (i === 0) {\n assert(/^[mM]{1}/.test(c), 'Path must start with \"m\" or \"M\"')\n return\n }\n\n var hardened = (c.length > 1) && (c[c.length - 1] === \"'\")\n var childIndex = parseInt(c, 10) // & (HARDENED_OFFSET - 1)\n assert(childIndex < HARDENED_OFFSET, 'Invalid index')\n if (hardened) childIndex += HARDENED_OFFSET\n\n hdkey = hdkey.deriveChild(childIndex)\n })\n\n return hdkey\n}\n\nHDKey.prototype.deriveChild = function (index) {\n var isHardened = index >= HARDENED_OFFSET\n var indexBuffer = Buffer.allocUnsafe(4)\n indexBuffer.writeUInt32BE(index, 0)\n\n var data\n\n if (isHardened) { // Hardened child\n assert(this.privateKey, 'Could not derive hardened child key')\n\n var pk = this.privateKey\n var zb = Buffer.alloc(1, 0)\n pk = Buffer.concat([zb, pk])\n\n // data = 0x00 || ser256(kpar) || ser32(index)\n data = Buffer.concat([pk, indexBuffer])\n } else { // Normal child\n // data = serP(point(kpar)) || ser32(index)\n // = serP(Kpar) || ser32(index)\n data = Buffer.concat([this.publicKey, indexBuffer])\n }\n\n var I = crypto.createHmac('sha512', this.chainCode).update(data).digest()\n var IL = I.slice(0, 32)\n var IR = I.slice(32)\n\n var hd = new HDKey(this.versions)\n\n // Private parent key -> private child key\n if (this.privateKey) {\n // ki = parse256(IL) + kpar (mod n)\n try {\n hd.privateKey = Buffer.from(secp256k1.privateKeyTweakAdd(Buffer.from(this.privateKey), IL))\n // throw if IL >= n || (privateKey + IL) === 0\n } catch (err) {\n // In case parse256(IL) >= n or ki == 0, one should proceed with the next value for i\n return this.deriveChild(index + 1)\n }\n // Public parent key -> public child key\n } else {\n // Ki = point(parse256(IL)) + Kpar\n // = G*IL + Kpar\n try {\n hd.publicKey = Buffer.from(secp256k1.publicKeyTweakAdd(Buffer.from(this.publicKey), IL, true))\n // throw if IL >= n || (g**IL + publicKey) is infinity\n } catch (err) {\n // In case parse256(IL) >= n or Ki is the point at infinity, one should proceed with the next value for i\n return this.deriveChild(index + 1)\n }\n }\n\n hd.chainCode = IR\n hd.depth = this.depth + 1\n hd.parentFingerprint = this.fingerprint// .readUInt32BE(0)\n hd.index = index\n\n return hd\n}\n\nHDKey.prototype.sign = function (hash) {\n return Buffer.from(secp256k1.ecdsaSign(hash, this.privateKey).signature)\n}\n\nHDKey.prototype.verify = function (hash, signature) {\n return secp256k1.ecdsaVerify(\n Uint8Array.from(signature),\n Uint8Array.from(hash),\n Uint8Array.from(this.publicKey)\n )\n}\n\nHDKey.prototype.wipePrivateData = function () {\n if (this._privateKey) crypto.randomBytes(this._privateKey.length).copy(this._privateKey)\n this._privateKey = null\n return this\n}\n\nHDKey.prototype.toJSON = function () {\n return {\n xpriv: this.privateExtendedKey,\n xpub: this.publicExtendedKey\n }\n}\n\nHDKey.fromMasterSeed = function (seedBuffer, versions) {\n var I = crypto.createHmac('sha512', MASTER_SECRET).update(seedBuffer).digest()\n var IL = I.slice(0, 32)\n var IR = I.slice(32)\n\n var hdkey = new HDKey(versions)\n hdkey.chainCode = IR\n hdkey.privateKey = IL\n\n return hdkey\n}\n\nHDKey.fromExtendedKey = function (base58key, versions) {\n // => version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33)\n versions = versions || BITCOIN_VERSIONS\n var hdkey = new HDKey(versions)\n\n var keyBuffer = bs58check.decode(base58key)\n\n var version = keyBuffer.readUInt32BE(0)\n assert(version === versions.private || version === versions.public, 'Version mismatch: does not match private or public')\n\n hdkey.depth = keyBuffer.readUInt8(4)\n hdkey.parentFingerprint = keyBuffer.readUInt32BE(5)\n hdkey.index = keyBuffer.readUInt32BE(9)\n hdkey.chainCode = keyBuffer.slice(13, 45)\n\n var key = keyBuffer.slice(45)\n if (key.readUInt8(0) === 0) { // private\n assert(version === versions.private, 'Version mismatch: version does not match private')\n hdkey.privateKey = key.slice(1) // cut off first 0x0 byte\n } else {\n assert(version === versions.public, 'Version mismatch: version does not match public')\n hdkey.publicKey = key\n }\n\n return hdkey\n}\n\nHDKey.fromJSON = function (obj) {\n return HDKey.fromExtendedKey(obj.xpriv)\n}\n\nfunction serialize (hdkey, version, key) {\n // => version(4) || depth(1) || fingerprint(4) || index(4) || chain(32) || key(33)\n var buffer = Buffer.allocUnsafe(LEN)\n\n buffer.writeUInt32BE(version, 0)\n buffer.writeUInt8(hdkey.depth, 4)\n\n var fingerprint = hdkey.depth ? hdkey.parentFingerprint : 0x00000000\n buffer.writeUInt32BE(fingerprint, 5)\n buffer.writeUInt32BE(hdkey.index, 9)\n\n hdkey.chainCode.copy(buffer, 13)\n key.copy(buffer, 45)\n\n return buffer\n}\n\nfunction hash160 (buf) {\n var sha = crypto.createHash('sha256').update(buf).digest()\n return crypto.createHash('ripemd160').update(sha).digest()\n}\n\nHDKey.HARDENED_OFFSET = HARDENED_OFFSET\nmodule.exports = HDKey\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","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.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","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","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/**\n * @license\n * Lodash \n * Copyright OpenJS 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;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee 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 `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee 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 `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\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 */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\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 * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\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 */\n function 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 */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\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 * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(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 */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\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 */\n function 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 `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names 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 key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\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 */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\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 */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\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 */\n function strictIndexOf(array, value, fromIndex) {\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 * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\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 */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\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 */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\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 */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\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 */\n function 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 * The base implementation of `_.keysIn` 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 */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\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 */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\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 */\n function 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 suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\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 */\n function 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 * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\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 */\n function 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 invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\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 */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\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 */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\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 */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\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 */\n function 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 */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or 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 boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` 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 date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\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 DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\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 empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\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 finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(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 */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\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 */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\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 */\n function 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 */\n function isObject(value) {\n var type = typeof value;\n return value != null && (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 */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\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 `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\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 `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\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 nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\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\n * classified as numbers, use the `_.isFinite` method.\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 number, 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 */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\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 */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\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' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` 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 regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\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 safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\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 */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(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 */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\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 `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\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 */\n function 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 */\n function 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 an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is 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 convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 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 */\n function 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 = baseTrim(value);\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 * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\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 * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\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 */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\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 */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\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 * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '