let bindingSignature;\n    try {\n      bindingSignature = await helper.getLatestValidSignature(this.bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config);\n    } catch (e) {\n      return null;\n    }\n    const keyExpiry = helper.getKeyExpirationTime(this.keyPacket, bindingSignature);\n    const sigExpiry = bindingSignature.getExpirationTime();\n    return keyExpiry < sigExpiry ? keyExpiry : sigExpiry;\n  }\n\n  /**\n   * Update subkey with new components from specified subkey\n   * @param {Subkey} subkey - Source subkey to merge\n   * @param {Date} [date] - Date to verify validity of signatures\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @throws {Error} if update failed\n   * @async\n   */\n  async update(subkey, date = new Date(), config = defaultConfig) {\n    const primaryKey = this.mainKey.keyPacket;\n    if (!this.hasSameFingerprintAs(subkey)) {\n      throw new Error('Subkey update method: fingerprints of subkeys not equal');\n    }\n    // key packet\n    if (this.keyPacket.constructor.tag === enums.packet.publicSubkey &&\n        subkey.keyPacket.constructor.tag === enums.packet.secretSubkey) {\n      this.keyPacket = subkey.keyPacket;\n    }\n    // update missing binding signatures\n    const that = this;\n    const dataToVerify = { key: primaryKey, bind: that.keyPacket };\n    await helper.mergeSignatures(subkey, this, 'bindingSignatures', date, async function(srcBindSig) {\n      for (let i = 0; i < that.bindingSignatures.length; i++) {\n        if (that.bindingSignatures[i].issuerKeyID.equals(srcBindSig.issuerKeyID)) {\n          if (srcBindSig.created > that.bindingSignatures[i].created) {\n            that.bindingSignatures[i] = srcBindSig;\n          }\n          return false;\n        }\n      }\n      try {\n        await srcBindSig.verify(primaryKey, enums.signature.subkeyBinding, dataToVerify, date, undefined, config);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    });\n    // revocation signatures\n    await helper.mergeSignatures(subkey, this, 'revocationSignatures', date, function(srcRevSig) {\n      return helper.isDataRevoked(primaryKey, enums.signature.subkeyRevocation, dataToVerify, [srcRevSig], undefined, undefined, date, config);\n    });\n  }\n\n  /**\n   * Revokes the subkey\n   * @param {SecretKeyPacket} primaryKey - decrypted private primary key for revocation\n   * @param {Object} reasonForRevocation - optional, object indicating the reason for revocation\n   * @param  {module:enums.reasonForRevocation} reasonForRevocation.flag optional, flag indicating the reason for revocation\n   * @param  {String} reasonForRevocation.string optional, string explaining the reason for revocation\n   * @param {Date} date - optional, override the creationtime of the revocation signature\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Subkey>} New subkey with revocation signature.\n   * @async\n   */\n  async revoke(\n    primaryKey,\n    {\n      flag: reasonForRevocationFlag = enums.reasonForRevocation.noReason,\n      string: reasonForRevocationString = ''\n    } = {},\n    date = new Date(),\n    config = defaultConfig\n  ) {\n    const dataToSign = { key: primaryKey, bind: this.keyPacket };\n    const subkey = new Subkey(this.keyPacket, this.mainKey);\n    subkey.revocationSignatures.push(await helper.createSignaturePacket(dataToSign, null, primaryKey, {\n      signatureType: enums.signature.subkeyRevocation,\n      reasonForRevocationFlag: enums.write(enums.reasonForRevocation, reasonForRevocationFlag),\n      reasonForRevocationString\n    }, date, undefined, undefined, false, config));\n    await subkey.update(this);\n    return subkey;\n  }\n\n  hasSameFingerprintAs(other) {\n    return this.keyPacket.hasSameFingerprintAs(other.keyPacket || other);\n  }\n}\n\n['getKeyID', 'getFingerprint', 'getAlgorithmInfo', 'getCreationTime', 'isDecrypted'].forEach(name => {\n  Subkey.prototype[name] =\n    function() {\n      return this.keyPacket[name]();\n    };\n});\n\nexport default Subkey;\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nimport { armor, unarmor } from '../encoding/armor';\nimport {\n  PacketList,\n  SignaturePacket\n} from '../packet';\nimport defaultConfig from '../config';\nimport enums from '../enums';\nimport util from '../util';\nimport User from './user';\nimport Subkey from './subkey';\nimport * as helper from './helper';\nimport { UnparseablePacket } from '../packet/packet';\n\n// A key revocation certificate can contain the following packets\nconst allowedRevocationPackets = /*#__PURE__*/ util.constructAllowedPackets([SignaturePacket]);\nconst mainKeyPacketTags = new Set([enums.packet.publicKey, enums.packet.privateKey]);\nconst keyPacketTags = new Set([\n  enums.packet.publicKey, enums.packet.privateKey,\n  enums.packet.publicSubkey, enums.packet.privateSubkey\n]);\n\n/**\n * Abstract class that represents an OpenPGP key. Must contain a primary key.\n * Can contain additional subkeys, signatures, user ids, user attributes.\n * @borrows PublicKeyPacket#getKeyID as Key#getKeyID\n * @borrows PublicKeyPacket#getFingerprint as Key#getFingerprint\n * @borrows PublicKeyPacket#hasSameFingerprintAs as Key#hasSameFingerprintAs\n * @borrows PublicKeyPacket#getAlgorithmInfo as Key#getAlgorithmInfo\n * @borrows PublicKeyPacket#getCreationTime as Key#getCreationTime\n */\nclass Key {\n  /**\n   * Transforms packetlist to structured key data\n   * @param {PacketList} packetlist - The packets that form a key\n   * @param {Set<enums.packet>} disallowedPackets - disallowed packet tags\n   */\n  packetListToStructure(packetlist, disallowedPackets = new Set()) {\n    let user;\n    let primaryKeyID;\n    let subkey;\n    let ignoreUntil;\n\n    for (const packet of packetlist) {\n\n      if (packet instanceof UnparseablePacket) {\n        const isUnparseableKeyPacket = keyPacketTags.has(packet.tag);\n        if (isUnparseableKeyPacket && !ignoreUntil) {\n          // Since non-key packets apply to the preceding key packet, if a (sub)key is Unparseable we must\n          // discard all non-key packets that follow, until another (sub)key packet is found.\n          if (mainKeyPacketTags.has(packet.tag)) {\n            ignoreUntil = mainKeyPacketTags;\n          } else {\n            ignoreUntil = keyPacketTags;\n          }\n        }\n        continue;\n      }\n\n      const tag = packet.constructor.tag;\n      if (ignoreUntil) {\n        if (!ignoreUntil.has(tag)) continue;\n        ignoreUntil = null;\n      }\n      if (disallowedPackets.has(tag)) {\n        throw new Error(`Unexpected packet type: ${tag}`);\n      }\n      switch (tag) {\n        case enums.packet.publicKey:\n        case enums.packet.secretKey:\n          if (this.keyPacket) {\n            throw new Error('Key block contains multiple keys');\n          }\n          this.keyPacket = packet;\n          primaryKeyID = this.getKeyID();\n          if (!primaryKeyID) {\n            throw new Error('Missing Key ID');\n          }\n          break;\n        case enums.packet.userID:\n        case enums.packet.userAttribute:\n          user = new User(packet, this);\n          this.users.push(user);\n          break;\n        case enums.packet.publicSubkey:\n        case enums.packet.secretSubkey:\n          user = null;\n          subkey = new Subkey(packet, this);\n          this.subkeys.push(subkey);\n          break;\n        case enums.packet.signature:\n          switch (packet.signatureType) {\n            case enums.signature.certGeneric:\n            case enums.signature.certPersona:\n            case enums.signature.certCasual:\n            case enums.signature.certPositive:\n              if (!user) {\n                util.printDebug('Dropping certification signatures without preceding user packet');\n                continue;\n              }\n              if (packet.issuerKeyID.equals(primaryKeyID)) {\n                user.selfCertifications.push(packet);\n              } else {\n                user.otherCertifications.push(packet);\n              }\n              break;\n            case enums.signature.certRevocation:\n              if (user) {\n                user.revocationSignatures.push(packet);\n              } else {\n                this.directSignatures.push(packet);\n              }\n              break;\n            case enums.signature.key:\n              this.directSignatures.push(packet);\n              break;\n            case enums.signature.subkeyBinding:\n              if (!subkey) {\n                util.printDebug('Dropping subkey binding signature without preceding subkey packet');\n                continue;\n              }\n              subkey.bindingSignatures.push(packet);\n              break;\n            case enums.signature.keyRevocation:\n              this.revocationSignatures.push(packet);\n              break;\n            case enums.signature.subkeyRevocation:\n              if (!subkey) {\n                util.printDebug('Dropping subkey revocation signature without preceding subkey packet');\n                continue;\n              }\n              subkey.revocationSignatures.push(packet);\n              break;\n          }\n          break;\n      }\n    }\n  }\n\n  /**\n   * Transforms structured key data to packetlist\n   * @returns {PacketList} The packets that form a key.\n   */\n  toPacketList() {\n    const packetlist = new PacketList();\n    packetlist.push(this.keyPacket);\n    packetlist.push(...this.revocationSignatures);\n    packetlist.push(...this.directSignatures);\n    this.users.map(user => packetlist.push(...user.toPacketList()));\n    this.subkeys.map(subkey => packetlist.push(...subkey.toPacketList()));\n    return packetlist;\n  }\n\n  /**\n   * Clones the key object. The copy is shallow, as it references the same packet objects as the original. However, if the top-level API is used, the two key instances are effectively independent.\n   * @param {Boolean} [clonePrivateParams=false] Only relevant for private keys: whether the secret key paramenters should be deeply copied. This is needed if e.g. `encrypt()` is to be called either on the clone or the original key.\n   * @returns {Promise<Key>} Clone of the key.\n   */\n  clone(clonePrivateParams = false) {\n    const key = new this.constructor(this.toPacketList());\n    if (clonePrivateParams) {\n      key.getKeys().forEach(k => {\n        // shallow clone the key packets\n        k.keyPacket = Object.create(\n          Object.getPrototypeOf(k.keyPacket),\n          Object.getOwnPropertyDescriptors(k.keyPacket)\n        );\n        if (!k.keyPacket.isDecrypted()) return;\n        // deep clone the private params, which are cleared during encryption\n        const privateParams = {};\n        Object.keys(k.keyPacket.privateParams).forEach(name => {\n          privateParams[name] = new Uint8Array(k.keyPacket.privateParams[name]);\n        });\n        k.keyPacket.privateParams = privateParams;\n      });\n    }\n    return key;\n  }\n\n  /**\n   * Returns an array containing all public or private subkeys matching keyID;\n   * If no keyID is given, returns all subkeys.\n   * @param {type/keyID} [keyID] - key ID to look for\n   * @returns {Array<Subkey>} array of subkeys\n   */\n  getSubkeys(keyID = null) {\n    const subkeys = this.subkeys.filter(subkey => (\n      !keyID || subkey.getKeyID().equals(keyID, true)\n    ));\n    return subkeys;\n  }\n\n  /**\n   * Returns an array containing all public or private keys matching keyID.\n   * If no keyID is given, returns all keys, starting with the primary key.\n   * @param {type/keyid~KeyID} [keyID] - key ID to look for\n   * @returns {Array<Key|Subkey>} array of keys\n   */\n  getKeys(keyID = null) {\n    const keys = [];\n    if (!keyID || this.getKeyID().equals(keyID, true)) {\n      keys.push(this);\n    }\n    return keys.concat(this.getSubkeys(keyID));\n  }\n\n  /**\n   * Returns key IDs of all keys\n   * @returns {Array<module:type/keyid~KeyID>}\n   */\n  getKeyIDs() {\n    return this.getKeys().map(key => key.getKeyID());\n  }\n\n  /**\n   * Returns userIDs\n   * @returns {Array<string>} Array of userIDs.\n   */\n  getUserIDs() {\n    return this.users.map(user => {\n      return user.userID ? user.userID.userID : null;\n    }).filter(userID => userID !== null);\n  }\n\n  /**\n   * Returns binary encoded key\n   * @returns {Uint8Array} Binary key.\n   */\n  write() {\n    return this.toPacketList().write();\n  }\n\n  /**\n   * Returns last created key or key by given keyID that is available for signing and verification\n   * @param  {module:type/keyid~KeyID} [keyID] - key ID of a specific key to retrieve\n   * @param  {Date} [date] - use the fiven date date to  to check key validity instead of the current date\n   * @param  {Object} [userID] - filter keys for the given user ID\n   * @param  {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Key|Subkey>} signing key\n   * @throws if no valid signing key was found\n   * @async\n   */\n  async getSigningKey(keyID = null, date = new Date(), userID = {}, config = defaultConfig) {\n    await this.verifyPrimaryKey(date, userID, config);\n    const primaryKey = this.keyPacket;\n    const subkeys = this.subkeys.slice().sort((a, b) => b.keyPacket.created - a.keyPacket.created);\n    let exception;\n    for (const subkey of subkeys) {\n      if (!keyID || subkey.getKeyID().equals(keyID)) {\n        try {\n          await subkey.verify(date, config);\n          const dataToVerify = { key: primaryKey, bind: subkey.keyPacket };\n          const bindingSignature = await helper.getLatestValidSignature(\n            subkey.bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config\n          );\n          if (!helper.isValidSigningKeyPacket(subkey.keyPacket, bindingSignature)) {\n            continue;\n          }\n          if (!bindingSignature.embeddedSignature) {\n            throw new Error('Missing embedded signature');\n          }\n          // verify embedded signature\n          await helper.getLatestValidSignature(\n            [bindingSignature.embeddedSignature], subkey.keyPacket, enums.signature.keyBinding, dataToVerify, date, config\n          );\n          helper.checkKeyRequirements(subkey.keyPacket, config);\n          return subkey;\n        } catch (e) {\n          exception = e;\n        }\n      }\n    }\n\n    try {\n      const primaryUser = await this.getPrimaryUser(date, userID, config);\n      if ((!keyID || primaryKey.getKeyID().equals(keyID)) &&\n          helper.isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, config)) {\n        helper.checkKeyRequirements(primaryKey, config);\n        return this;\n      }\n    } catch (e) {\n      exception = e;\n    }\n    throw util.wrapError('Could not find valid signing key packet in key ' + this.getKeyID().toHex(), exception);\n  }\n\n  /**\n   * Returns last created key or key by given keyID that is available for encryption or decryption\n   * @param  {module:type/keyid~KeyID} [keyID] - key ID of a specific key to retrieve\n   * @param  {Date}   [date] - use the fiven date date to  to check key validity instead of the current date\n   * @param  {Object} [userID] - filter keys for the given user ID\n   * @param  {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Key|Subkey>} encryption key\n   * @throws if no valid encryption key was found\n   * @async\n   */\n  async getEncryptionKey(keyID, date = new Date(), userID = {}, config = defaultConfig) {\n    await this.verifyPrimaryKey(date, userID, config);\n    const primaryKey = this.keyPacket;\n    // V4: by convention subkeys are preferred for encryption service\n    const subkeys = this.subkeys.slice().sort((a, b) => b.keyPacket.created - a.keyPacket.created);\n    let exception;\n    for (const subkey of subkeys) {\n      if (!keyID || subkey.getKeyID().equals(keyID)) {\n        try {\n          await subkey.verify(date, config);\n          const dataToVerify = { key: primaryKey, bind: subkey.keyPacket };\n          const bindingSignature = await helper.getLatestValidSignature(subkey.bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config);\n          if (helper.isValidEncryptionKeyPacket(subkey.keyPacket, bindingSignature)) {\n            helper.checkKeyRequirements(subkey.keyPacket, config);\n            return subkey;\n          }\n        } catch (e) {\n          exception = e;\n        }\n      }\n    }\n\n    try {\n      // if no valid subkey for encryption, evaluate primary key\n      const primaryUser = await this.getPrimaryUser(date, userID, config);\n      if ((!keyID || primaryKey.getKeyID().equals(keyID)) &&\n          helper.isValidEncryptionKeyPacket(primaryKey, primaryUser.selfCertification)) {\n        helper.checkKeyRequirements(primaryKey, config);\n        return this;\n      }\n    } catch (e) {\n      exception = e;\n    }\n    throw util.wrapError('Could not find valid encryption key packet in key ' + this.getKeyID().toHex(), exception);\n  }\n\n  /**\n   * Checks if a signature on a key is revoked\n   * @param {SignaturePacket} signature - The signature to verify\n   * @param  {PublicSubkeyPacket|\n   *          SecretSubkeyPacket|\n   *          PublicKeyPacket|\n   *          SecretKeyPacket} key, optional The key to verify the signature\n   * @param {Date} [date] - Use the given date for verification, instead of the current time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Boolean>} True if the certificate is revoked.\n   * @async\n   */\n  async isRevoked(signature, key, date = new Date(), config = defaultConfig) {\n    return helper.isDataRevoked(\n      this.keyPacket, enums.signature.keyRevocation, { key: this.keyPacket }, this.revocationSignatures, signature, key, date, config\n    );\n  }\n\n  /**\n   * Verify primary key. Checks for revocation signatures, expiration time\n   * and valid self signature. Throws if the primary key is invalid.\n   * @param {Date} [date] - Use the given date for verification instead of the current time\n   * @param {Object} [userID] - User ID\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @throws {Error} If key verification failed\n   * @async\n   */\n  async verifyPrimaryKey(date = new Date(), userID = {}, config = defaultConfig) {\n    const primaryKey = this.keyPacket;\n    // check for key revocation signatures\n    if (await this.isRevoked(null, null, date, config)) {\n      throw new Error('Primary key is revoked');\n    }\n    // check for valid, unrevoked, unexpired self signature\n    const { selfCertification } = await this.getPrimaryUser(date, userID, config);\n    // check for expiration time in binding signatures\n    if (helper.isDataExpired(primaryKey, selfCertification, date)) {\n      throw new Error('Primary key is expired');\n    }\n    // check for expiration time in direct signatures\n    const directSignature = await helper.getLatestValidSignature(\n      this.directSignatures, primaryKey, enums.signature.key, { key: primaryKey }, date, config\n    ).catch(() => {}); // invalid signatures are discarded, to avoid breaking the key\n\n    if (directSignature && helper.isDataExpired(primaryKey, directSignature, date)) {\n      throw new Error('Primary key is expired');\n    }\n  }\n\n  /**\n   * Returns the expiration date of the primary key, considering self-certifications and direct-key signatures.\n   * Returns `Infinity` if the key doesn't expire, or `null` if the key is revoked or invalid.\n   * @param  {Object} [userID] - User ID to consider instead of the primary user\n   * @param  {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Date | Infinity | null>}\n   * @async\n   */\n  async getExpirationTime(userID, config = defaultConfig) {\n    let primaryKeyExpiry;\n    try {\n      const { selfCertification } = await this.getPrimaryUser(null, userID, config);\n      const selfSigKeyExpiry = helper.getKeyExpirationTime(this.keyPacket, selfCertification);\n      const selfSigExpiry = selfCertification.getExpirationTime();\n      const directSignature = await helper.getLatestValidSignature(\n        this.directSignatures, this.keyPacket, enums.signature.key, { key: this.keyPacket }, null, config\n      ).catch(() => {});\n      if (directSignature) {\n        const directSigKeyExpiry = helper.getKeyExpirationTime(this.keyPacket, directSignature);\n        // We do not support the edge case where the direct signature expires, since it would invalidate the corresponding key expiration,\n        // causing a discountinous validy period for the key\n        primaryKeyExpiry = Math.min(selfSigKeyExpiry, selfSigExpiry, directSigKeyExpiry);\n      } else {\n        primaryKeyExpiry = selfSigKeyExpiry < selfSigExpiry ? selfSigKeyExpiry : selfSigExpiry;\n      }\n    } catch (e) {\n      primaryKeyExpiry = null;\n    }\n\n    return util.normalizeDate(primaryKeyExpiry);\n  }\n\n\n  /**\n   * Returns primary user and most significant (latest valid) self signature\n   * - if multiple primary users exist, returns the one with the latest self signature\n   * - otherwise, returns the user with the latest self signature\n   * @param {Date} [date] - Use the given date for verification instead of the current time\n   * @param {Object} [userID] - User ID to get instead of the primary user, if it exists\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<{\n   *   user: User,\n   *   selfCertification: SignaturePacket\n   * }>} The primary user and the self signature\n   * @async\n   */\n  async getPrimaryUser(date = new Date(), userID = {}, config = defaultConfig) {\n    const primaryKey = this.keyPacket;\n    const users = [];\n    let exception;\n    for (let i = 0; i < this.users.length; i++) {\n      try {\n        const user = this.users[i];\n        if (!user.userID) {\n          continue;\n        }\n        if (\n          (userID.name !== undefined && user.userID.name !== userID.name) ||\n          (userID.email !== undefined && user.userID.email !== userID.email) ||\n          (userID.comment !== undefined && user.userID.comment !== userID.comment)\n        ) {\n          throw new Error('Could not find user that matches that user ID');\n        }\n        const dataToVerify = { userID: user.userID, key: primaryKey };\n        const selfCertification = await helper.getLatestValidSignature(user.selfCertifications, primaryKey, enums.signature.certGeneric, dataToVerify, date, config);\n        users.push({ index: i, user, selfCertification });\n      } catch (e) {\n        exception = e;\n      }\n    }\n    if (!users.length) {\n      throw exception || new Error('Could not find primary user');\n    }\n    await Promise.all(users.map(async function (a) {\n      return a.selfCertification.revoked || a.user.isRevoked(a.selfCertification, null, date, config);\n    }));\n    // sort by primary user flag and signature creation time\n    const primaryUser = users.sort(function(a, b) {\n      const A = a.selfCertification;\n      const B = b.selfCertification;\n      return B.revoked - A.revoked || A.isPrimaryUserID - B.isPrimaryUserID || A.created - B.created;\n    }).pop();\n    const { user, selfCertification: cert } = primaryUser;\n    if (cert.revoked || await user.isRevoked(cert, null, date, config)) {\n      throw new Error('Primary user is revoked');\n    }\n    return primaryUser;\n  }\n\n  /**\n   * Update key with new components from specified key with same key ID:\n   * users, subkeys, certificates are merged into the destination key,\n   * duplicates and expired signatures are ignored.\n   *\n   * If the source key is a private key and the destination key is public,\n   * a private key is returned.\n   * @param {Key} sourceKey - Source key to merge\n   * @param {Date} [date] - Date to verify validity of signatures and keys\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Key>} updated key\n   * @async\n   */\n  async update(sourceKey, date = new Date(), config = defaultConfig) {\n    if (!this.hasSameFingerprintAs(sourceKey)) {\n      throw new Error('Primary key fingerprints must be equal to update the key');\n    }\n    if (!this.isPrivate() && sourceKey.isPrivate()) {\n      // check for equal subkey packets\n      const equal = (this.subkeys.length === sourceKey.subkeys.length) &&\n            (this.subkeys.every(destSubkey => {\n              return sourceKey.subkeys.some(srcSubkey => {\n                return destSubkey.hasSameFingerprintAs(srcSubkey);\n              });\n            }));\n      if (!equal) {\n        throw new Error('Cannot update public key with private key if subkeys mismatch');\n      }\n\n      return sourceKey.update(this, config);\n    }\n    // from here on, either:\n    // - destination key is private, source key is public\n    // - the keys are of the same type\n    // hence we don't need to convert the destination key type\n    const updatedKey = this.clone();\n    // revocation signatures\n    await helper.mergeSignatures(sourceKey, updatedKey, 'revocationSignatures', date, srcRevSig => {\n      return helper.isDataRevoked(updatedKey.keyPacket, enums.signature.keyRevocation, updatedKey, [srcRevSig], null, sourceKey.keyPacket, date, config);\n    });\n    // direct signatures\n    await helper.mergeSignatures(sourceKey, updatedKey, 'directSignatures', date);\n    // update users\n    await Promise.all(sourceKey.users.map(async srcUser => {\n      // multiple users with the same ID/attribute are not explicitly disallowed by the spec\n      // hence we support them, just in case\n      const usersToUpdate = updatedKey.users.filter(dstUser => (\n        (srcUser.userID && srcUser.userID.equals(dstUser.userID)) ||\n        (srcUser.userAttribute && srcUser.userAttribute.equals(dstUser.userAttribute))\n      ));\n      if (usersToUpdate.length > 0) {\n        await Promise.all(\n          usersToUpdate.map(userToUpdate => userToUpdate.update(srcUser, date, config))\n        );\n      } else {\n        const newUser = srcUser.clone();\n        newUser.mainKey = updatedKey;\n        updatedKey.users.push(newUser);\n      }\n    }));\n    // update subkeys\n    await Promise.all(sourceKey.subkeys.map(async srcSubkey => {\n      // multiple subkeys with same fingerprint might be preset\n      const subkeysToUpdate = updatedKey.subkeys.filter(dstSubkey => (\n        dstSubkey.hasSameFingerprintAs(srcSubkey)\n      ));\n      if (subkeysToUpdate.length > 0) {\n        await Promise.all(\n          subkeysToUpdate.map(subkeyToUpdate => subkeyToUpdate.update(srcSubkey, date, config))\n        );\n      } else {\n        const newSubkey = srcSubkey.clone();\n        newSubkey.mainKey = updatedKey;\n        updatedKey.subkeys.push(newSubkey);\n      }\n    }));\n\n    return updatedKey;\n  }\n\n  /**\n   * Get revocation certificate from a revoked key.\n   *   (To get a revocation certificate for an unrevoked key, call revoke() first.)\n   * @param {Date} date - Use the given date instead of the current time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<String>} Armored revocation certificate.\n   * @async\n   */\n  async getRevocationCertificate(date = new Date(), config = defaultConfig) {\n    const dataToVerify = { key: this.keyPacket };\n    const revocationSignature = await helper.getLatestValidSignature(this.revocationSignatures, this.keyPacket, enums.signature.keyRevocation, dataToVerify, date, config);\n    const packetlist = new PacketList();\n    packetlist.push(revocationSignature);\n    return armor(enums.armor.publicKey, packetlist.write(), null, null, 'This is a revocation certificate');\n  }\n\n  /**\n   * Applies a revocation certificate to a key\n   * This adds the first signature packet in the armored text to the key,\n   * if it is a valid revocation signature.\n   * @param {String} revocationCertificate - armored revocation certificate\n   * @param {Date} [date] - Date to verify the certificate\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Key>} Revoked key.\n   * @async\n   */\n  async applyRevocationCertificate(revocationCertificate, date = new Date(), config = defaultConfig) {\n    const input = await unarmor(revocationCertificate, config);\n    const packetlist = await PacketList.fromBinary(input.data, allowedRevocationPackets, config);\n    const revocationSignature = packetlist.findPacket(enums.packet.signature);\n    if (!revocationSignature || revocationSignature.signatureType !== enums.signature.keyRevocation) {\n      throw new Error('Could not find revocation signature packet');\n    }\n    if (!revocationSignature.issuerKeyID.equals(this.getKeyID())) {\n      throw new Error('Revocation signature does not match key');\n    }\n    try {\n      await revocationSignature.verify(this.keyPacket, enums.signature.keyRevocation, { key: this.keyPacket }, date, undefined, config);\n    } catch (e) {\n      throw util.wrapError('Could not verify revocation signature', e);\n    }\n    const key = this.clone();\n    key.revocationSignatures.push(revocationSignature);\n    return key;\n  }\n\n  /**\n   * Signs primary user of key\n   * @param {Array<PrivateKey>} privateKeys - decrypted private keys for signing\n   * @param {Date} [date] - Use the given date for verification instead of the current time\n   * @param {Object} [userID] - User ID to get instead of the primary user, if it exists\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Key>} Key with new certificate signature.\n   * @async\n   */\n  async signPrimaryUser(privateKeys, date, userID, config = defaultConfig) {\n    const { index, user } = await this.getPrimaryUser(date, userID, config);\n    const userSign = await user.certify(privateKeys, date, config);\n    const key = this.clone();\n    key.users[index] = userSign;\n    return key;\n  }\n\n  /**\n   * Signs all users of key\n   * @param {Array<PrivateKey>} privateKeys - decrypted private keys for signing\n   * @param {Date} [date] - Use the given date for signing, instead of the current time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Key>} Key with new certificate signature.\n   * @async\n   */\n  async signAllUsers(privateKeys, date = new Date(), config = defaultConfig) {\n    const key = this.clone();\n    key.users = await Promise.all(this.users.map(function(user) {\n      return user.certify(privateKeys, date, config);\n    }));\n    return key;\n  }\n\n  /**\n   * Verifies primary user of key\n   * - if no arguments are given, verifies the self certificates;\n   * - otherwise, verifies all certificates signed with given keys.\n   * @param {Array<PublicKey>} [verificationKeys] - array of keys to verify certificate signatures, instead of the primary key\n   * @param {Date} [date] - Use the given date for verification instead of the current time\n   * @param {Object} [userID] - User ID to get instead of the primary user, if it exists\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Array<{\n   *   keyID: module:type/keyid~KeyID,\n   *   valid: Boolean|null\n   * }>>} List of signer's keyID and validity of signature.\n   *      Signature validity is null if the verification keys do not correspond to the certificate.\n   * @async\n   */\n  async verifyPrimaryUser(verificationKeys, date = new Date(), userID, config = defaultConfig) {\n    const primaryKey = this.keyPacket;\n    const { user } = await this.getPrimaryUser(date, userID, config);\n    const results = verificationKeys ?\n      await user.verifyAllCertifications(verificationKeys, date, config) :\n      [{ keyID: primaryKey.getKeyID(), valid: await user.verify(date, config).catch(() => false) }];\n    return results;\n  }\n\n  /**\n   * Verifies all users of key\n   * - if no arguments are given, verifies the self certificates;\n   * - otherwise, verifies all certificates signed with given keys.\n   * @param {Array<PublicKey>} [verificationKeys] - array of keys to verify certificate signatures\n   * @param {Date} [date] - Use the given date for verification instead of the current time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Array<{\n   *   userID: String,\n   *   keyID: module:type/keyid~KeyID,\n   *   valid: Boolean|null\n   * }>>} List of userID, signer's keyID and validity of signature.\n   *      Signature validity is null if the verification keys do not correspond to the certificate.\n   * @async\n   */\n  async verifyAllUsers(verificationKeys, date = new Date(), config = defaultConfig) {\n    const primaryKey = this.keyPacket;\n    const results = [];\n    await Promise.all(this.users.map(async user => {\n      const signatures = verificationKeys ?\n        await user.verifyAllCertifications(verificationKeys, date, config) :\n        [{ keyID: primaryKey.getKeyID(), valid: await user.verify(date, config).catch(() => false) }];\n\n      results.push(...signatures.map(\n        signature => ({\n          userID: user.userID ? user.userID.userID : null,\n          userAttribute: user.userAttribute,\n          keyID: signature.keyID,\n          valid: signature.valid\n        }))\n      );\n    }));\n    return results;\n  }\n}\n\n['getKeyID', 'getFingerprint', 'getAlgorithmInfo', 'getCreationTime', 'hasSameFingerprintAs'].forEach(name => {\n  Key.prototype[name] =\n  Subkey.prototype[name];\n});\n\nexport default Key;\n","// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nimport { armor } from '../encoding/armor';\nimport defaultConfig from '../config';\nimport enums from '../enums';\nimport Key from './key';\n\n/**\n * Class that represents an OpenPGP Public Key\n */\nclass PublicKey extends Key {\n  /**\n   * @param {PacketList} packetlist - The packets that form this key\n   */\n  constructor(packetlist) {\n    super();\n    this.keyPacket = null;\n    this.revocationSignatures = [];\n    this.directSignatures = [];\n    this.users = [];\n    this.subkeys = [];\n    if (packetlist) {\n      this.packetListToStructure(packetlist, new Set([enums.packet.secretKey, enums.packet.secretSubkey]));\n      if (!this.keyPacket) {\n        throw new Error('Invalid key: missing public-key packet');\n      }\n    }\n  }\n\n  /**\n   * Returns true if this is a private key\n   * @returns {false}\n   */\n  isPrivate() {\n    return false;\n  }\n\n  /**\n   * Returns key as public key (shallow copy)\n   * @returns {PublicKey} New public Key\n   */\n  toPublic() {\n    return this;\n  }\n\n  /**\n   * Returns ASCII armored text of key\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {ReadableStream<String>} ASCII armor.\n   */\n  armor(config = defaultConfig) {\n    return armor(enums.armor.publicKey, this.toPacketList().write(), undefined, undefined, undefined, config);\n  }\n}\n\nexport default PublicKey;\n\n","import PublicKey from './public_key';\nimport { armor } from '../encoding/armor';\nimport {\n  PacketList,\n  PublicKeyPacket,\n  PublicSubkeyPacket\n} from '../packet';\nimport defaultConfig from '../config';\nimport enums from '../enums';\nimport * as helper from './helper';\n\n/**\n * Class that represents an OpenPGP Private key\n */\nclass PrivateKey extends PublicKey {\n  /**\n * @param {PacketList} packetlist - The packets that form this key\n */\n  constructor(packetlist) {\n    super();\n    this.packetListToStructure(packetlist, new Set([enums.packet.publicKey, enums.packet.publicSubkey]));\n    if (!this.keyPacket) {\n      throw new Error('Invalid key: missing private-key packet');\n    }\n  }\n\n  /**\n   * Returns true if this is a private key\n   * @returns {Boolean}\n   */\n  isPrivate() {\n    return true;\n  }\n\n  /**\n   * Returns key as public key (shallow copy)\n   * @returns {PublicKey} New public Key\n   */\n  toPublic() {\n    const packetlist = new PacketList();\n    const keyPackets = this.toPacketList();\n    for (const keyPacket of keyPackets) {\n      switch (keyPacket.constructor.tag) {\n        case enums.packet.secretKey: {\n          const pubKeyPacket = PublicKeyPacket.fromSecretKeyPacket(keyPacket);\n          packetlist.push(pubKeyPacket);\n          break;\n        }\n        case enums.packet.secretSubkey: {\n          const pubSubkeyPacket = PublicSubkeyPacket.fromSecretSubkeyPacket(keyPacket);\n          packetlist.push(pubSubkeyPacket);\n          break;\n        }\n        default:\n          packetlist.push(keyPacket);\n      }\n    }\n    return new PublicKey(packetlist);\n  }\n\n  /**\n   * Returns ASCII armored text of key\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {ReadableStream<String>} ASCII armor.\n   */\n  armor(config = defaultConfig) {\n    return armor(enums.armor.privateKey, this.toPacketList().write(), undefined, undefined, undefined, config);\n  }\n\n  /**\n   * Returns all keys that are available for decryption, matching the keyID when given\n   * This is useful to retrieve keys for session key decryption\n   * @param  {module:type/keyid~KeyID} keyID, optional\n   * @param  {Date}              date, optional\n   * @param  {String}            userID, optional\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Array<Key|Subkey>>} Array of decryption keys.\n   * @async\n   */\n  async getDecryptionKeys(keyID, date = new Date(), userID = {}, config = defaultConfig) {\n    const primaryKey = this.keyPacket;\n    const keys = [];\n    for (let i = 0; i < this.subkeys.length; i++) {\n      if (!keyID || this.subkeys[i].getKeyID().equals(keyID, true)) {\n        try {\n          const dataToVerify = { key: primaryKey, bind: this.subkeys[i].keyPacket };\n          const bindingSignature = await helper.getLatestValidSignature(this.subkeys[i].bindingSignatures, primaryKey, enums.signature.subkeyBinding, dataToVerify, date, config);\n          if (helper.isValidDecryptionKeyPacket(bindingSignature, config)) {\n            keys.push(this.subkeys[i]);\n          }\n        } catch (e) {}\n      }\n    }\n\n    // evaluate primary key\n    const primaryUser = await this.getPrimaryUser(date, userID, config);\n    if ((!keyID || primaryKey.getKeyID().equals(keyID, true)) &&\n        helper.isValidDecryptionKeyPacket(primaryUser.selfCertification, config)) {\n      keys.push(this);\n    }\n\n    return keys;\n  }\n\n  /**\n   * Returns true if the primary key or any subkey is decrypted.\n   * A dummy key is considered encrypted.\n   */\n  isDecrypted() {\n    return this.getKeys().some(({ keyPacket }) => keyPacket.isDecrypted());\n  }\n\n  /**\n   * Check whether the private and public primary key parameters correspond\n   * Together with verification of binding signatures, this guarantees key integrity\n   * In case of gnu-dummy primary key, it is enough to validate any signing subkeys\n   *   otherwise all encryption subkeys are validated\n   * If only gnu-dummy keys are found, we cannot properly validate so we throw an error\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @throws {Error} if validation was not successful and the key cannot be trusted\n   * @async\n   */\n  async validate(config = defaultConfig) {\n    if (!this.isPrivate()) {\n      throw new Error('Cannot validate a public key');\n    }\n\n    let signingKeyPacket;\n    if (!this.keyPacket.isDummy()) {\n      signingKeyPacket = this.keyPacket;\n    } else {\n      /**\n       * It is enough to validate any signing keys\n       * since its binding signatures are also checked\n       */\n      const signingKey = await this.getSigningKey(null, null, undefined, { ...config, rejectPublicKeyAlgorithms: new Set(), minRSABits: 0 });\n      // This could again be a dummy key\n      if (signingKey && !signingKey.keyPacket.isDummy()) {\n        signingKeyPacket = signingKey.keyPacket;\n      }\n    }\n\n    if (signingKeyPacket) {\n      return signingKeyPacket.validate();\n    } else {\n      const keys = this.getKeys();\n      const allDummies = keys.map(key => key.keyPacket.isDummy()).every(Boolean);\n      if (allDummies) {\n        throw new Error('Cannot validate an all-gnu-dummy key');\n      }\n\n      return Promise.all(keys.map(async key => key.keyPacket.validate()));\n    }\n  }\n\n  /**\n   * Clear private key parameters\n   */\n  clearPrivateParams() {\n    this.getKeys().forEach(({ keyPacket }) => {\n      if (keyPacket.isDecrypted()) {\n        keyPacket.clearPrivateParams();\n      }\n    });\n  }\n\n  /**\n   * Revokes the key\n   * @param {Object} reasonForRevocation - optional, object indicating the reason for revocation\n   * @param  {module:enums.reasonForRevocation} reasonForRevocation.flag optional, flag indicating the reason for revocation\n   * @param  {String} reasonForRevocation.string optional, string explaining the reason for revocation\n   * @param {Date} date - optional, override the creationtime of the revocation signature\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<PrivateKey>} New key with revocation signature.\n   * @async\n   */\n  async revoke(\n    {\n      flag: reasonForRevocationFlag = enums.reasonForRevocation.noReason,\n      string: reasonForRevocationString = ''\n    } = {},\n    date = new Date(),\n    config = defaultConfig\n  ) {\n    if (!this.isPrivate()) {\n      throw new Error('Need private key for revoking');\n    }\n    const dataToSign = { key: this.keyPacket };\n    const key = this.clone();\n    key.revocationSignatures.push(await helper.createSignaturePacket(dataToSign, null, this.keyPacket, {\n      signatureType: enums.signature.keyRevocation,\n      reasonForRevocationFlag: enums.write(enums.reasonForRevocation, reasonForRevocationFlag),\n      reasonForRevocationString\n    }, date, undefined, undefined, undefined, config));\n    return key;\n  }\n\n\n  /**\n   * Generates a new OpenPGP subkey, and returns a clone of the Key object with the new subkey added.\n   * Supports RSA and ECC keys. Defaults to the algorithm and bit size/curve of the primary key. DSA primary keys default to RSA subkeys.\n   * @param {ecc|rsa} options.type       The subkey algorithm: ECC or RSA\n   * @param {String}  options.curve      (optional) Elliptic curve for ECC keys\n   * @param {Integer} options.rsaBits    (optional) Number of bits for RSA subkeys\n   * @param {Number}  options.keyExpirationTime (optional) Number of seconds from the key creation time after which the key expires\n   * @param {Date}    options.date       (optional) Override the creation date of the key and the key signatures\n   * @param {Boolean} options.sign       (optional) Indicates whether the subkey should sign rather than encrypt. Defaults to false\n   * @param {Object}  options.config     (optional) custom configuration settings to overwrite those in [config]{@link module:config}\n   * @returns {Promise<PrivateKey>}\n   * @async\n   */\n  async addSubkey(options = {}) {\n    const config = { ...defaultConfig, ...options.config };\n    if (options.passphrase) {\n      throw new Error('Subkey could not be encrypted here, please encrypt whole key');\n    }\n    if (options.rsaBits < config.minRSABits) {\n      throw new Error(`rsaBits should be at least ${config.minRSABits}, got: ${options.rsaBits}`);\n    }\n    const secretKeyPacket = this.keyPacket;\n    if (secretKeyPacket.isDummy()) {\n      throw new Error('Cannot add subkey to gnu-dummy primary key');\n    }\n    if (!secretKeyPacket.isDecrypted()) {\n      throw new Error('Key is not decrypted');\n    }\n    const defaultOptions = secretKeyPacket.getAlgorithmInfo();\n    defaultOptions.type = defaultOptions.curve ? 'ecc' : 'rsa'; // DSA keys default to RSA\n    defaultOptions.rsaBits = defaultOptions.bits || 4096;\n    defaultOptions.curve = defaultOptions.curve || 'curve25519';\n    options = helper.sanitizeKeyOptions(options, defaultOptions);\n    const keyPacket = await helper.generateSecretSubkey(options);\n    helper.checkKeyRequirements(keyPacket, config);\n    const bindingSignature = await helper.createBindingSignature(keyPacket, secretKeyPacket, options, config);\n    const packetList = this.toPacketList();\n    packetList.push(keyPacket, bindingSignature);\n    return new PrivateKey(packetList);\n  }\n}\n\nexport default PrivateKey;\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2015-2016 Decentral\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nimport {\n  PacketList,\n  UserIDPacket,\n  SignaturePacket,\n  PublicKeyPacket,\n  PublicSubkeyPacket,\n  SecretKeyPacket,\n  SecretSubkeyPacket,\n  UserAttributePacket\n} from '../packet';\nimport PrivateKey from './private_key';\nimport PublicKey from './public_key';\nimport * as helper from './helper';\nimport enums from '../enums';\nimport util from '../util';\nimport defaultConfig from '../config';\nimport { unarmor } from '../encoding/armor';\n\n// A Key can contain the following packets\nconst allowedKeyPackets = /*#__PURE__*/ util.constructAllowedPackets([\n  PublicKeyPacket,\n  PublicSubkeyPacket,\n  SecretKeyPacket,\n  SecretSubkeyPacket,\n  UserIDPacket,\n  UserAttributePacket,\n  SignaturePacket\n]);\n\n/**\n * Creates a PublicKey or PrivateKey depending on the packetlist in input\n * @param {PacketList} - packets to parse\n * @return {Key} parsed key\n * @throws if no key packet was found\n */\nfunction createKey(packetlist) {\n  for (const packet of packetlist) {\n    switch (packet.constructor.tag) {\n      case enums.packet.secretKey:\n        return new PrivateKey(packetlist);\n      case enums.packet.publicKey:\n        return new PublicKey(packetlist);\n    }\n  }\n  throw new Error('No key packet found');\n}\n\n\n/**\n * Generates a new OpenPGP key. Supports RSA and ECC keys.\n * By default, primary and subkeys will be of same type.\n * @param {ecc|rsa} options.type                  The primary key algorithm type: ECC or RSA\n * @param {String}  options.curve                 Elliptic curve for ECC keys\n * @param {Integer} options.rsaBits               Number of bits for RSA keys\n * @param {Array<String|Object>} options.userIDs  User IDs as strings or objects: 'Jo Doe <info@jo.com>' or { name:'Jo Doe', email:'info@jo.com' }\n * @param {String}  options.passphrase            Passphrase used to encrypt the resulting private key\n * @param {Number}  options.keyExpirationTime     (optional) Number of seconds from the key creation time after which the key expires\n * @param {Date}    options.date                  Creation date of the key and the key signatures\n * @param {Object} config - Full configuration\n * @param {Array<Object>} options.subkeys         (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n *                                                  sign parameter defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @returns {Promise<{{ key: PrivateKey, revocationCertificate: String }}>}\n * @async\n * @static\n * @private\n */\nexport async function generate(options, config) {\n  options.sign = true; // primary key is always a signing key\n  options = helper.sanitizeKeyOptions(options);\n  options.subkeys = options.subkeys.map((subkey, index) => helper.sanitizeKeyOptions(options.subkeys[index], options));\n  let promises = [helper.generateSecretKey(options, config)];\n  promises = promises.concat(options.subkeys.map(options => helper.generateSecretSubkey(options, config)));\n  const packets = await Promise.all(promises);\n\n  const key = await wrapKeyObject(packets[0], packets.slice(1), options, config);\n  const revocationCertificate = await key.getRevocationCertificate(options.date, config);\n  key.revocationSignatures = [];\n  return { key, revocationCertificate };\n}\n\n/**\n * Reformats and signs an OpenPGP key with a given User ID. Currently only supports RSA keys.\n * @param {PrivateKey} options.privateKey         The private key to reformat\n * @param {Array<String|Object>} options.userIDs  User IDs as strings or objects: 'Jo Doe <info@jo.com>' or { name:'Jo Doe', email:'info@jo.com' }\n * @param {String} options.passphrase             Passphrase used to encrypt the resulting private key\n * @param {Number} options.keyExpirationTime      Number of seconds from the key creation time after which the key expires\n * @param {Date}   options.date                   Override the creation date of the key signatures\n * @param {Array<Object>} options.subkeys         (optional) options for each subkey, default to main key options. e.g. [{sign: true, passphrase: '123'}]\n * @param {Object} config - Full configuration\n *\n * @returns {Promise<{{ key: PrivateKey, revocationCertificate: String }}>}\n * @async\n * @static\n * @private\n */\nexport async function reformat(options, config) {\n  options = sanitize(options);\n  const { privateKey } = options;\n\n  if (!privateKey.isPrivate()) {\n    throw new Error('Cannot reformat a public key');\n  }\n\n  if (privateKey.keyPacket.isDummy()) {\n    throw new Error('Cannot reformat a gnu-dummy primary key');\n  }\n\n  const isDecrypted = privateKey.getKeys().every(({ keyPacket }) => keyPacket.isDecrypted());\n  if (!isDecrypted) {\n    throw new Error('Key is not decrypted');\n  }\n\n  const secretKeyPacket = privateKey.keyPacket;\n\n  if (!options.subkeys) {\n    options.subkeys = await Promise.all(privateKey.subkeys.map(async subkey => {\n      const secretSubkeyPacket = subkey.keyPacket;\n      const dataToVerify = { key: secretKeyPacket, bind: secretSubkeyPacket };\n      const bindingSignature = await (\n        helper.getLatestValidSignature(subkey.bindingSignatures, secretKeyPacket, enums.signature.subkeyBinding, dataToVerify, null, config)\n      ).catch(() => ({}));\n      return {\n        sign: bindingSignature.keyFlags && (bindingSignature.keyFlags[0] & enums.keyFlags.signData)\n      };\n    }));\n  }\n\n  const secretSubkeyPackets = privateKey.subkeys.map(subkey => subkey.keyPacket);\n  if (options.subkeys.length !== secretSubkeyPackets.length) {\n    throw new Error('Number of subkey options does not match number of subkeys');\n  }\n\n  options.subkeys = options.subkeys.map(subkeyOptions => sanitize(subkeyOptions, options));\n\n  const key = await wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options, config);\n  const revocationCertificate = await key.getRevocationCertificate(options.date, config);\n  key.revocationSignatures = [];\n  return { key, revocationCertificate };\n\n  function sanitize(options, subkeyDefaults = {}) {\n    options.keyExpirationTime = options.keyExpirationTime || subkeyDefaults.keyExpirationTime;\n    options.passphrase = util.isString(options.passphrase) ? options.passphrase : subkeyDefaults.passphrase;\n    options.date = options.date || subkeyDefaults.date;\n\n    return options;\n  }\n}\n\n/**\n * Construct PrivateKey object from the given key packets, add certification signatures and set passphrase protection\n * The new key includes a revocation certificate that must be removed before returning the key, otherwise the key is considered revoked.\n * @param {SecretKeyPacket} secretKeyPacket\n * @param {SecretSubkeyPacket} secretSubkeyPackets\n * @param {Object} options\n * @param {Object} config - Full configuration\n * @returns {PrivateKey}\n */\nasync function wrapKeyObject(secretKeyPacket, secretSubkeyPackets, options, config) {\n  // set passphrase protection\n  if (options.passphrase) {\n    await secretKeyPacket.encrypt(options.passphrase, config);\n  }\n\n  await Promise.all(secretSubkeyPackets.map(async function(secretSubkeyPacket, index) {\n    const subkeyPassphrase = options.subkeys[index].passphrase;\n    if (subkeyPassphrase) {\n      await secretSubkeyPacket.encrypt(subkeyPassphrase, config);\n    }\n  }));\n\n  const packetlist = new PacketList();\n  packetlist.push(secretKeyPacket);\n\n  await Promise.all(options.userIDs.map(async function(userID, index) {\n    function createPreferredAlgos(algos, preferredAlgo) {\n      return [preferredAlgo, ...algos.filter(algo => algo !== preferredAlgo)];\n    }\n\n    const userIDPacket = UserIDPacket.fromObject(userID);\n    const dataToSign = {};\n    dataToSign.userID = userIDPacket;\n    dataToSign.key = secretKeyPacket;\n\n    const signatureProperties = {};\n    signatureProperties.signatureType = enums.signature.certGeneric;\n    signatureProperties.keyFlags = [enums.keyFlags.certifyKeys | enums.keyFlags.signData];\n    signatureProperties.preferredSymmetricAlgorithms = createPreferredAlgos([\n      // prefer aes256, aes128, then aes192 (no WebCrypto support: https://www.chromium.org/blink/webcrypto#TOC-AES-support)\n      enums.symmetric.aes256,\n      enums.symmetric.aes128,\n      enums.symmetric.aes192\n    ], config.preferredSymmetricAlgorithm);\n    if (config.aeadProtect) {\n      signatureProperties.preferredAEADAlgorithms = createPreferredAlgos([\n        enums.aead.eax,\n        enums.aead.ocb\n      ], config.preferredAEADAlgorithm);\n    }\n    signatureProperties.preferredHashAlgorithms = createPreferredAlgos([\n      // prefer fast asm.js implementations (SHA-256)\n      enums.hash.sha256,\n      enums.hash.sha512\n    ], config.preferredHashAlgorithm);\n    signatureProperties.preferredCompressionAlgorithms = createPreferredAlgos([\n      enums.compression.zlib,\n      enums.compression.zip,\n      enums.compression.uncompressed\n    ], config.preferredCompressionAlgorithm);\n    if (index === 0) {\n      signatureProperties.isPrimaryUserID = true;\n    }\n    // integrity protection always enabled\n    signatureProperties.features = [0];\n    signatureProperties.features[0] |= enums.features.modificationDetection;\n    if (config.aeadProtect) {\n      signatureProperties.features[0] |= enums.features.aead;\n    }\n    if (config.v5Keys) {\n      signatureProperties.features[0] |= enums.features.v5Keys;\n    }\n    if (options.keyExpirationTime > 0) {\n      signatureProperties.keyExpirationTime = options.keyExpirationTime;\n      signatureProperties.keyNeverExpires = false;\n    }\n\n    const signaturePacket = await helper.createSignaturePacket(dataToSign, null, secretKeyPacket, signatureProperties, options.date, undefined, undefined, undefined, config);\n\n    return { userIDPacket, signaturePacket };\n  })).then(list => {\n    list.forEach(({ userIDPacket, signaturePacket }) => {\n      packetlist.push(userIDPacket);\n      packetlist.push(signaturePacket);\n    });\n  });\n\n  await Promise.all(secretSubkeyPackets.map(async function(secretSubkeyPacket, index) {\n    const subkeyOptions = options.subkeys[index];\n    const subkeySignaturePacket = await helper.createBindingSignature(secretSubkeyPacket, secretKeyPacket, subkeyOptions, config);\n    return { secretSubkeyPacket, subkeySignaturePacket };\n  })).then(packets => {\n    packets.forEach(({ secretSubkeyPacket, subkeySignaturePacket }) => {\n      packetlist.push(secretSubkeyPacket);\n      packetlist.push(subkeySignaturePacket);\n    });\n  });\n\n  // Add revocation signature packet for creating a revocation certificate.\n  // This packet should be removed before returning the key.\n  const dataToSign = { key: secretKeyPacket };\n  packetlist.push(await helper.createSignaturePacket(dataToSign, null, secretKeyPacket, {\n    signatureType: enums.signature.keyRevocation,\n    reasonForRevocationFlag: enums.reasonForRevocation.noReason,\n    reasonForRevocationString: ''\n  }, options.date, undefined, undefined, undefined, config));\n\n  if (options.passphrase) {\n    secretKeyPacket.clearPrivateParams();\n  }\n\n  await Promise.all(secretSubkeyPackets.map(async function(secretSubkeyPacket, index) {\n    const subkeyPassphrase = options.subkeys[index].passphrase;\n    if (subkeyPassphrase) {\n      secretSubkeyPacket.clearPrivateParams();\n    }\n  }));\n\n  return new PrivateKey(packetlist);\n}\n\n/**\n * Reads an (optionally armored) OpenPGP key and returns a key object\n * @param {Object} options\n * @param {String} [options.armoredKey] - Armored key to be parsed\n * @param {Uint8Array} [options.binaryKey] - Binary key to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Key>} Key object.\n * @async\n * @static\n */\nexport async function readKey({ armoredKey, binaryKey, config, ...rest }) {\n  config = { ...defaultConfig, ...config };\n  if (!armoredKey && !binaryKey) {\n    throw new Error('readKey: must pass options object containing `armoredKey` or `binaryKey`');\n  }\n  if (armoredKey && !util.isString(armoredKey)) {\n    throw new Error('readKey: options.armoredKey must be a string');\n  }\n  if (binaryKey && !util.isUint8Array(binaryKey)) {\n    throw new Error('readKey: options.binaryKey must be a Uint8Array');\n  }\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  let input;\n  if (armoredKey) {\n    const { type, data } = await unarmor(armoredKey, config);\n    if (!(type === enums.armor.publicKey || type === enums.armor.privateKey)) {\n      throw new Error('Armored text not of type key');\n    }\n    input = data;\n  } else {\n    input = binaryKey;\n  }\n  const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n  return createKey(packetlist);\n}\n\n/**\n * Reads an (optionally armored) OpenPGP private key and returns a PrivateKey object\n * @param {Object} options\n * @param {String} [options.armoredKey] - Armored key to be parsed\n * @param {Uint8Array} [options.binaryKey] - Binary key to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<PrivateKey>} Key object.\n * @async\n * @static\n */\nexport async function readPrivateKey({ armoredKey, binaryKey, config, ...rest }) {\n  config = { ...defaultConfig, ...config };\n  if (!armoredKey && !binaryKey) {\n    throw new Error('readPrivateKey: must pass options object containing `armoredKey` or `binaryKey`');\n  }\n  if (armoredKey && !util.isString(armoredKey)) {\n    throw new Error('readPrivateKey: options.armoredKey must be a string');\n  }\n  if (binaryKey && !util.isUint8Array(binaryKey)) {\n    throw new Error('readPrivateKey: options.binaryKey must be a Uint8Array');\n  }\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  let input;\n  if (armoredKey) {\n    const { type, data } = await unarmor(armoredKey, config);\n    if (!(type === enums.armor.privateKey)) {\n      throw new Error('Armored text not of type private key');\n    }\n    input = data;\n  } else {\n    input = binaryKey;\n  }\n  const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n  return new PrivateKey(packetlist);\n}\n\n/**\n * Reads an (optionally armored) OpenPGP key block and returns a list of key objects\n * @param {Object} options\n * @param {String} [options.armoredKeys] - Armored keys to be parsed\n * @param {Uint8Array} [options.binaryKeys] - Binary keys to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Array<Key>>} Key objects.\n * @async\n * @static\n */\nexport async function readKeys({ armoredKeys, binaryKeys, config, ...rest }) {\n  config = { ...defaultConfig, ...config };\n  let input = armoredKeys || binaryKeys;\n  if (!input) {\n    throw new Error('readKeys: must pass options object containing `armoredKeys` or `binaryKeys`');\n  }\n  if (armoredKeys && !util.isString(armoredKeys)) {\n    throw new Error('readKeys: options.armoredKeys must be a string');\n  }\n  if (binaryKeys && !util.isUint8Array(binaryKeys)) {\n    throw new Error('readKeys: options.binaryKeys must be a Uint8Array');\n  }\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (armoredKeys) {\n    const { type, data } = await unarmor(armoredKeys, config);\n    if (type !== enums.armor.publicKey && type !== enums.armor.privateKey) {\n      throw new Error('Armored text not of type key');\n    }\n    input = data;\n  }\n  const keys = [];\n  const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n  const keyIndex = packetlist.indexOfTag(enums.packet.publicKey, enums.packet.secretKey);\n  if (keyIndex.length === 0) {\n    throw new Error('No key packet found');\n  }\n  for (let i = 0; i < keyIndex.length; i++) {\n    const oneKeyList = packetlist.slice(keyIndex[i], keyIndex[i + 1]);\n    const newKey = createKey(oneKeyList);\n    keys.push(newKey);\n  }\n  return keys;\n}\n\n/**\n * Reads an (optionally armored) OpenPGP private key block and returns a list of PrivateKey objects\n * @param {Object} options\n * @param {String} [options.armoredKeys] - Armored keys to be parsed\n * @param {Uint8Array} [options.binaryKeys] - Binary keys to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Array<PrivateKey>>} Key objects.\n * @async\n * @static\n */\nexport async function readPrivateKeys({ armoredKeys, binaryKeys, config }) {\n  config = { ...defaultConfig, ...config };\n  let input = armoredKeys || binaryKeys;\n  if (!input) {\n    throw new Error('readPrivateKeys: must pass options object containing `armoredKeys` or `binaryKeys`');\n  }\n  if (armoredKeys && !util.isString(armoredKeys)) {\n    throw new Error('readPrivateKeys: options.armoredKeys must be a string');\n  }\n  if (binaryKeys && !util.isUint8Array(binaryKeys)) {\n    throw new Error('readPrivateKeys: options.binaryKeys must be a Uint8Array');\n  }\n  if (armoredKeys) {\n    const { type, data } = await unarmor(armoredKeys, config);\n    if (type !== enums.armor.privateKey) {\n      throw new Error('Armored text not of type private key');\n    }\n    input = data;\n  }\n  const keys = [];\n  const packetlist = await PacketList.fromBinary(input, allowedKeyPackets, config);\n  const keyIndex = packetlist.indexOfTag(enums.packet.secretKey);\n  if (keyIndex.length === 0) {\n    throw new Error('No secret key packet found');\n  }\n  for (let i = 0; i < keyIndex.length; i++) {\n    const oneKeyList = packetlist.slice(keyIndex[i], keyIndex[i + 1]);\n    const newKey = new PrivateKey(oneKeyList);\n    keys.push(newKey);\n  }\n  return keys;\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport { armor, unarmor } from './encoding/armor';\nimport KeyID from './type/keyid';\nimport defaultConfig from './config';\nimport crypto from './crypto';\nimport enums from './enums';\nimport util from './util';\nimport { Signature } from './signature';\nimport { getPreferredHashAlgo, getPreferredAlgo, isAEADSupported, createSignaturePacket } from './key';\nimport {\n  PacketList,\n  LiteralDataPacket,\n  CompressedDataPacket,\n  AEADEncryptedDataPacket,\n  SymEncryptedIntegrityProtectedDataPacket,\n  SymmetricallyEncryptedDataPacket,\n  PublicKeyEncryptedSessionKeyPacket,\n  SymEncryptedSessionKeyPacket,\n  OnePassSignaturePacket,\n  SignaturePacket\n} from './packet';\n\n// A Message can contain the following packets\nconst allowedMessagePackets = /*#__PURE__*/ util.constructAllowedPackets([\n  LiteralDataPacket,\n  CompressedDataPacket,\n  AEADEncryptedDataPacket,\n  SymEncryptedIntegrityProtectedDataPacket,\n  SymmetricallyEncryptedDataPacket,\n  PublicKeyEncryptedSessionKeyPacket,\n  SymEncryptedSessionKeyPacket,\n  OnePassSignaturePacket,\n  SignaturePacket\n]);\n// A SKESK packet can contain the following packets\nconst allowedSymSessionKeyPackets = /*#__PURE__*/ util.constructAllowedPackets([SymEncryptedSessionKeyPacket]);\n// A detached signature can contain the following packets\nconst allowedDetachedSignaturePackets = /*#__PURE__*/ util.constructAllowedPackets([SignaturePacket]);\n\n/**\n * Class that represents an OpenPGP message.\n * Can be an encrypted message, signed message, compressed message or literal message\n * See {@link https://tools.ietf.org/html/rfc4880#section-11.3}\n */\nexport class Message {\n  /**\n   * @param {PacketList} packetlist - The packets that form this message\n   */\n  constructor(packetlist) {\n    this.packets = packetlist || new PacketList();\n  }\n\n  /**\n   * Returns the key IDs of the keys to which the session key is encrypted\n   * @returns {Array<module:type/keyid~KeyID>} Array of keyID objects.\n   */\n  getEncryptionKeyIDs() {\n    const keyIDs = [];\n    const pkESKeyPacketlist = this.packets.filterByTag(enums.packet.publicKeyEncryptedSessionKey);\n    pkESKeyPacketlist.forEach(function(packet) {\n      keyIDs.push(packet.publicKeyID);\n    });\n    return keyIDs;\n  }\n\n  /**\n   * Returns the key IDs of the keys that signed the message\n   * @returns {Array<module:type/keyid~KeyID>} Array of keyID objects.\n   */\n  getSigningKeyIDs() {\n    const msg = this.unwrapCompressed();\n    // search for one pass signatures\n    const onePassSigList = msg.packets.filterByTag(enums.packet.onePassSignature);\n    if (onePassSigList.length > 0) {\n      return onePassSigList.map(packet => packet.issuerKeyID);\n    }\n    // if nothing found look for signature packets\n    const signatureList = msg.packets.filterByTag(enums.packet.signature);\n    return signatureList.map(packet => packet.issuerKeyID);\n  }\n\n  /**\n   * Decrypt the message. Either a private key, a session key, or a password must be specified.\n   * @param {Array<PrivateKey>} [decryptionKeys] - Private keys with decrypted secret data\n   * @param {Array<String>} [passwords] - Passwords used to decrypt\n   * @param {Array<Object>} [sessionKeys] - Session keys in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n   * @param {Date} [date] - Use the given date for key verification instead of the current time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Message>} New message with decrypted content.\n   * @async\n   */\n  async decrypt(decryptionKeys, passwords, sessionKeys, date = new Date(), config = defaultConfig) {\n    const sessionKeyObjects = sessionKeys || await this.decryptSessionKeys(decryptionKeys, passwords, date, config);\n\n    const symEncryptedPacketlist = this.packets.filterByTag(\n      enums.packet.symmetricallyEncryptedData,\n      enums.packet.symEncryptedIntegrityProtectedData,\n      enums.packet.aeadEncryptedData\n    );\n\n    if (symEncryptedPacketlist.length === 0) {\n      throw new Error('No encrypted data found');\n    }\n\n    const symEncryptedPacket = symEncryptedPacketlist[0];\n    let exception = null;\n    const decryptedPromise = Promise.all(sessionKeyObjects.map(async ({ algorithm: algorithmName, data }) => {\n      if (!util.isUint8Array(data) || !util.isString(algorithmName)) {\n        throw new Error('Invalid session key for decryption.');\n      }\n\n      try {\n        const algo = enums.write(enums.symmetric, algorithmName);\n        await symEncryptedPacket.decrypt(algo, data, config);\n      } catch (e) {\n        util.printDebugError(e);\n        exception = e;\n      }\n    }));\n    // We don't await stream.cancel here because it only returns when the other copy is canceled too.\n    stream.cancel(symEncryptedPacket.encrypted); // Don't keep copy of encrypted data in memory.\n    symEncryptedPacket.encrypted = null;\n    await decryptedPromise;\n\n    if (!symEncryptedPacket.packets || !symEncryptedPacket.packets.length) {\n      throw exception || new Error('Decryption failed.');\n    }\n\n    const resultMsg = new Message(symEncryptedPacket.packets);\n    symEncryptedPacket.packets = new PacketList(); // remove packets after decryption\n\n    return resultMsg;\n  }\n\n  /**\n   * Decrypt encrypted session keys either with private keys or passwords.\n   * @param {Array<PrivateKey>} [decryptionKeys] - Private keys with decrypted secret data\n   * @param {Array<String>} [passwords] - Passwords used to decrypt\n   * @param {Date} [date] - Use the given date for key verification, instead of current time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Array<{\n   *   data: Uint8Array,\n   *   algorithm: String\n   * }>>} array of object with potential sessionKey, algorithm pairs\n   * @async\n   */\n  async decryptSessionKeys(decryptionKeys, passwords, date = new Date(), config = defaultConfig) {\n    let decryptedSessionKeyPackets = [];\n\n    let exception;\n    if (passwords) {\n      const skeskPackets = this.packets.filterByTag(enums.packet.symEncryptedSessionKey);\n      if (skeskPackets.length === 0) {\n        throw new Error('No symmetrically encrypted session key packet found.');\n      }\n      await Promise.all(passwords.map(async function(password, i) {\n        let packets;\n        if (i) {\n          packets = await PacketList.fromBinary(skeskPackets.write(), allowedSymSessionKeyPackets, config);\n        } else {\n          packets = skeskPackets;\n        }\n        await Promise.all(packets.map(async function(skeskPacket) {\n          try {\n            await skeskPacket.decrypt(password);\n            decryptedSessionKeyPackets.push(skeskPacket);\n          } catch (err) {\n            util.printDebugError(err);\n          }\n        }));\n      }));\n    } else if (decryptionKeys) {\n      const pkeskPackets = this.packets.filterByTag(enums.packet.publicKeyEncryptedSessionKey);\n      if (pkeskPackets.length === 0) {\n        throw new Error('No public key encrypted session key packet found.');\n      }\n      await Promise.all(pkeskPackets.map(async function(pkeskPacket) {\n        await Promise.all(decryptionKeys.map(async function(decryptionKey) {\n          let algos = [\n            enums.symmetric.aes256, // Old OpenPGP.js default fallback\n            enums.symmetric.aes128, // RFC4880bis fallback\n            enums.symmetric.tripledes, // RFC4880 fallback\n            enums.symmetric.cast5 // Golang OpenPGP fallback\n          ];\n          try {\n            const primaryUser = await decryptionKey.getPrimaryUser(date, undefined, config); // TODO: Pass userID from somewhere.\n            if (primaryUser.selfCertification.preferredSymmetricAlgorithms) {\n              algos = algos.concat(primaryUser.selfCertification.preferredSymmetricAlgorithms);\n            }\n          } catch (e) {}\n\n          // do not check key expiration to allow decryption of old messages\n          const decryptionKeyPackets = (await decryptionKey.getDecryptionKeys(pkeskPacket.publicKeyID, null, undefined, config)).map(key => key.keyPacket);\n          await Promise.all(decryptionKeyPackets.map(async function(decryptionKeyPacket) {\n            if (!decryptionKeyPacket || decryptionKeyPacket.isDummy()) {\n              return;\n            }\n            if (!decryptionKeyPacket.isDecrypted()) {\n              throw new Error('Decryption key is not decrypted.');\n            }\n\n            // To hinder CCA attacks against PKCS1, we carry out a constant-time decryption flow if the `constantTimePKCS1Decryption` config option is set.\n            const doConstantTimeDecryption = config.constantTimePKCS1Decryption && (\n              pkeskPacket.publicKeyAlgorithm === enums.publicKey.rsaEncrypt ||\n              pkeskPacket.publicKeyAlgorithm === enums.publicKey.rsaEncryptSign ||\n              pkeskPacket.publicKeyAlgorithm === enums.publicKey.rsaSign ||\n              pkeskPacket.publicKeyAlgorithm === enums.publicKey.elgamal\n            );\n\n            if (doConstantTimeDecryption) {\n              // The goal is to not reveal whether PKESK decryption (specifically the PKCS1 decoding step) failed, hence, we always proceed to decrypt the message,\n              // either with the successfully decrypted session key, or with a randomly generated one.\n              // Since the SEIP/AEAD's symmetric algorithm and key size are stored in the encrypted portion of the PKESK, and the execution flow cannot depend on\n              // the decrypted payload, we always assume the message to be encrypted with one of the symmetric algorithms specified in `config.constantTimePKCS1DecryptionSupportedSymmetricAlgorithms`:\n              // - If the PKESK decryption succeeds, and the session key cipher is in the supported set, then we try to decrypt the data with the decrypted session key as well as with the\n              // randomly generated keys of the remaining key types.\n              // - If the PKESK decryptions fails, or if it succeeds but support for the cipher is not enabled, then we discard the session key and try to decrypt the data using only the randomly\n              // generated session keys.\n              // NB: as a result, if the data is encrypted with a non-suported cipher, decryption will always fail.\n\n              const serialisedPKESK = pkeskPacket.write(); // make copies to be able to decrypt the PKESK packet multiple times\n              await Promise.all(Array.from(config.constantTimePKCS1DecryptionSupportedSymmetricAlgorithms).map(async sessionKeyAlgorithm => {\n                const pkeskPacketCopy = new PublicKeyEncryptedSessionKeyPacket();\n                pkeskPacketCopy.read(serialisedPKESK);\n                const randomSessionKey = {\n                  sessionKeyAlgorithm,\n                  sessionKey: crypto.generateSessionKey(sessionKeyAlgorithm)\n                };\n                try {\n                  await pkeskPacketCopy.decrypt(decryptionKeyPacket, randomSessionKey);\n                  decryptedSessionKeyPackets.push(pkeskPacketCopy);\n                } catch (err) {\n                  // `decrypt` can still throw some non-security-sensitive errors\n                  util.printDebugError(err);\n                  exception = err;\n                }\n              }));\n\n            } else {\n              try {\n                await pkeskPacket.decrypt(decryptionKeyPacket);\n                if (!algos.includes(enums.write(enums.symmetric, pkeskPacket.sessionKeyAlgorithm))) {\n                  throw new Error('A non-preferred symmetric algorithm was used.');\n                }\n                decryptedSessionKeyPackets.push(pkeskPacket);\n              } catch (err) {\n                util.printDebugError(err);\n                exception = err;\n              }\n            }\n          }));\n        }));\n        stream.cancel(pkeskPacket.encrypted); // Don't keep copy of encrypted data in memory.\n        pkeskPacket.encrypted = null;\n      }));\n    } else {\n      throw new Error('No key or password specified.');\n    }\n\n    if (decryptedSessionKeyPackets.length > 0) {\n      // Return only unique session keys\n      if (decryptedSessionKeyPackets.length > 1) {\n        const seen = new Set();\n        decryptedSessionKeyPackets = decryptedSessionKeyPackets.filter(item => {\n          const k = item.sessionKeyAlgorithm + util.uint8ArrayToString(item.sessionKey);\n          if (seen.has(k)) {\n            return false;\n          }\n          seen.add(k);\n          return true;\n        });\n      }\n\n      return decryptedSessionKeyPackets.map(packet => ({\n        data: packet.sessionKey,\n        algorithm: enums.read(enums.symmetric, packet.sessionKeyAlgorithm)\n      }));\n    }\n    throw exception || new Error('Session key decryption failed.');\n  }\n\n  /**\n   * Get literal data that is the body of the message\n   * @returns {(Uint8Array|null)} Literal body of the message as Uint8Array.\n   */\n  getLiteralData() {\n    const msg = this.unwrapCompressed();\n    const literal = msg.packets.findPacket(enums.packet.literalData);\n    return (literal && literal.getBytes()) || null;\n  }\n\n  /**\n   * Get filename from literal data packet\n   * @returns {(String|null)} Filename of literal data packet as string.\n   */\n  getFilename() {\n    const msg = this.unwrapCompressed();\n    const literal = msg.packets.findPacket(enums.packet.literalData);\n    return (literal && literal.getFilename()) || null;\n  }\n\n  /**\n   * Get literal data as text\n   * @returns {(String|null)} Literal body of the message interpreted as text.\n   */\n  getText() {\n    const msg = this.unwrapCompressed();\n    const literal = msg.packets.findPacket(enums.packet.literalData);\n    if (literal) {\n      return literal.getText();\n    }\n    return null;\n  }\n\n  /**\n   * Generate a new session key object, taking the algorithm preferences of the passed encryption keys into account, if any.\n   * @param {Array<PublicKey>} [encryptionKeys] - Public key(s) to select algorithm preferences for\n   * @param {Date} [date] - Date to select algorithm preferences at\n   * @param {Array<Object>} [userIDs] - User IDs to select algorithm preferences for\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<{ data: Uint8Array, algorithm: String, aeadAlgorithm: undefined|String }>} Object with session key data and algorithms.\n   * @async\n   */\n  static async generateSessionKey(encryptionKeys = [], date = new Date(), userIDs = [], config = defaultConfig) {\n    const algo = await getPreferredAlgo('symmetric', encryptionKeys, date, userIDs, config);\n    const algorithmName = enums.read(enums.symmetric, algo);\n    const aeadAlgorithmName = config.aeadProtect && await isAEADSupported(encryptionKeys, date, userIDs, config) ?\n      enums.read(enums.aead, await getPreferredAlgo('aead', encryptionKeys, date, userIDs, config)) :\n      undefined;\n\n    await Promise.all(encryptionKeys.map(key => key.getEncryptionKey()\n      .catch(() => null) // ignore key strength requirements\n      .then(maybeKey => {\n        if (maybeKey && (maybeKey.keyPacket.algorithm === enums.publicKey.x25519) && !util.isAES(algo)) {\n          throw new Error('Could not generate a session key compatible with the given `encryptionKeys`: X22519 keys can only be used to encrypt AES session keys; change `config.preferredSymmetricAlgorithm` accordingly.');\n        }\n      })\n    ));\n\n    const sessionKeyData = crypto.generateSessionKey(algo);\n    return { data: sessionKeyData, algorithm: algorithmName, aeadAlgorithm: aeadAlgorithmName };\n  }\n\n  /**\n   * Encrypt the message either with public keys, passwords, or both at once.\n   * @param {Array<PublicKey>} [encryptionKeys] - Public key(s) for message encryption\n   * @param {Array<String>} [passwords] - Password(s) for message encryption\n   * @param {Object} [sessionKey] - Session key in the form: { data:Uint8Array, algorithm:String, [aeadAlgorithm:String] }\n   * @param {Boolean} [wildcard] - Use a key ID of 0 instead of the public key IDs\n   * @param {Array<module:type/keyid~KeyID>} [encryptionKeyIDs] - Array of key IDs to use for encryption. Each encryptionKeyIDs[i] corresponds to keys[i]\n   * @param {Date} [date] - Override the creation date of the literal package\n   * @param {Array<Object>} [userIDs] - User IDs to encrypt for, e.g. [{ name:'Robert Receiver', email:'robert@openpgp.org' }]\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Message>} New message with encrypted content.\n   * @async\n   */\n  async encrypt(encryptionKeys, passwords, sessionKey, wildcard = false, encryptionKeyIDs = [], date = new Date(), userIDs = [], config = defaultConfig) {\n    if (sessionKey) {\n      if (!util.isUint8Array(sessionKey.data) || !util.isString(sessionKey.algorithm)) {\n        throw new Error('Invalid session key for encryption.');\n      }\n    } else if (encryptionKeys && encryptionKeys.length) {\n      sessionKey = await Message.generateSessionKey(encryptionKeys, date, userIDs, config);\n    } else if (passwords && passwords.length) {\n      sessionKey = await Message.generateSessionKey(undefined, undefined, undefined, config);\n    } else {\n      throw new Error('No keys, passwords, or session key provided.');\n    }\n\n    const { data: sessionKeyData, algorithm: algorithmName, aeadAlgorithm: aeadAlgorithmName } = sessionKey;\n\n    const msg = await Message.encryptSessionKey(sessionKeyData, algorithmName, aeadAlgorithmName, encryptionKeys, passwords, wildcard, encryptionKeyIDs, date, userIDs, config);\n\n    let symEncryptedPacket;\n    if (aeadAlgorithmName) {\n      symEncryptedPacket = new AEADEncryptedDataPacket();\n      symEncryptedPacket.aeadAlgorithm = enums.write(enums.aead, aeadAlgorithmName);\n    } else {\n      symEncryptedPacket = new SymEncryptedIntegrityProtectedDataPacket();\n    }\n    symEncryptedPacket.packets = this.packets;\n\n    const algorithm = enums.write(enums.symmetric, algorithmName);\n    await symEncryptedPacket.encrypt(algorithm, sessionKeyData, config);\n\n    msg.packets.push(symEncryptedPacket);\n    symEncryptedPacket.packets = new PacketList(); // remove packets after encryption\n    return msg;\n  }\n\n  /**\n   * Encrypt a session key either with public keys, passwords, or both at once.\n   * @param {Uint8Array} sessionKey - session key for encryption\n   * @param {String} algorithmName - session key algorithm\n   * @param {String} [aeadAlgorithmName] - AEAD algorithm, e.g. 'eax' or 'ocb'\n   * @param {Array<PublicKey>} [encryptionKeys] - Public key(s) for message encryption\n   * @param {Array<String>} [passwords] - For message encryption\n   * @param {Boolean} [wildcard] - Use a key ID of 0 instead of the public key IDs\n   * @param {Array<module:type/keyid~KeyID>} [encryptionKeyIDs] - Array of key IDs to use for encryption. Each encryptionKeyIDs[i] corresponds to encryptionKeys[i]\n   * @param {Date} [date] - Override the date\n   * @param {Array} [userIDs] - User IDs to encrypt for, e.g. [{ name:'Robert Receiver', email:'robert@openpgp.org' }]\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Message>} New message with encrypted content.\n   * @async\n   */\n  static async encryptSessionKey(sessionKey, algorithmName, aeadAlgorithmName, encryptionKeys, passwords, wildcard = false, encryptionKeyIDs = [], date = new Date(), userIDs = [], config = defaultConfig) {\n    const packetlist = new PacketList();\n    const algorithm = enums.write(enums.symmetric, algorithmName);\n    const aeadAlgorithm = aeadAlgorithmName && enums.write(enums.aead, aeadAlgorithmName);\n\n    if (encryptionKeys) {\n      const results = await Promise.all(encryptionKeys.map(async function(primaryKey, i) {\n        const encryptionKey = await primaryKey.getEncryptionKey(encryptionKeyIDs[i], date, userIDs, config);\n        const pkESKeyPacket = new PublicKeyEncryptedSessionKeyPacket();\n        pkESKeyPacket.publicKeyID = wildcard ? KeyID.wildcard() : encryptionKey.getKeyID();\n        pkESKeyPacket.publicKeyAlgorithm = encryptionKey.keyPacket.algorithm;\n        pkESKeyPacket.sessionKey = sessionKey;\n        pkESKeyPacket.sessionKeyAlgorithm = algorithm;\n        await pkESKeyPacket.encrypt(encryptionKey.keyPacket);\n        delete pkESKeyPacket.sessionKey; // delete plaintext session key after encryption\n        return pkESKeyPacket;\n      }));\n      packetlist.push(...results);\n    }\n    if (passwords) {\n      const testDecrypt = async function(keyPacket, password) {\n        try {\n          await keyPacket.decrypt(password);\n          return 1;\n        } catch (e) {\n          return 0;\n        }\n      };\n\n      const sum = (accumulator, currentValue) => accumulator + currentValue;\n\n      const encryptPassword = async function(sessionKey, algorithm, aeadAlgorithm, password) {\n        const symEncryptedSessionKeyPacket = new SymEncryptedSessionKeyPacket(config);\n        symEncryptedSessionKeyPacket.sessionKey = sessionKey;\n        symEncryptedSessionKeyPacket.sessionKeyAlgorithm = algorithm;\n        if (aeadAlgorithm) {\n          symEncryptedSessionKeyPacket.aeadAlgorithm = aeadAlgorithm;\n        }\n        await symEncryptedSessionKeyPacket.encrypt(password, config);\n\n        if (config.passwordCollisionCheck) {\n          const results = await Promise.all(passwords.map(pwd => testDecrypt(symEncryptedSessionKeyPacket, pwd)));\n          if (results.reduce(sum) !== 1) {\n            return encryptPassword(sessionKey, algorithm, password);\n          }\n        }\n\n        delete symEncryptedSessionKeyPacket.sessionKey; // delete plaintext session key after encryption\n        return symEncryptedSessionKeyPacket;\n      };\n\n      const results = await Promise.all(passwords.map(pwd => encryptPassword(sessionKey, algorithm, aeadAlgorithm, pwd)));\n      packetlist.push(...results);\n    }\n\n    return new Message(packetlist);\n  }\n\n  /**\n   * Sign the message (the literal data packet of the message)\n   * @param {Array<PrivateKey>} signingKeys - private keys with decrypted secret key data for signing\n   * @param {Signature} [signature] - Any existing detached signature to add to the message\n   * @param {Array<module:type/keyid~KeyID>} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n   * @param {Date} [date] - Override the creation time of the signature\n   * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n   * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Message>} New message with signed content.\n   * @async\n   */\n  async sign(signingKeys = [], signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], config = defaultConfig) {\n    const packetlist = new PacketList();\n\n    const literalDataPacket = this.packets.findPacket(enums.packet.literalData);\n    if (!literalDataPacket) {\n      throw new Error('No literal data packet to sign.');\n    }\n\n    let i;\n    let existingSigPacketlist;\n    // If data packet was created from Uint8Array, use binary, otherwise use text\n    const signatureType = literalDataPacket.text === null ?\n      enums.signature.binary : enums.signature.text;\n\n    if (signature) {\n      existingSigPacketlist = signature.packets.filterByTag(enums.packet.signature);\n      for (i = existingSigPacketlist.length - 1; i >= 0; i--) {\n        const signaturePacket = existingSigPacketlist[i];\n        const onePassSig = new OnePassSignaturePacket();\n        onePassSig.signatureType = signaturePacket.signatureType;\n        onePassSig.hashAlgorithm = signaturePacket.hashAlgorithm;\n        onePassSig.publicKeyAlgorithm = signaturePacket.publicKeyAlgorithm;\n        onePassSig.issuerKeyID = signaturePacket.issuerKeyID;\n        if (!signingKeys.length && i === 0) {\n          onePassSig.flags = 1;\n        }\n        packetlist.push(onePassSig);\n      }\n    }\n\n    await Promise.all(Array.from(signingKeys).reverse().map(async function (primaryKey, i) {\n      if (!primaryKey.isPrivate()) {\n        throw new Error('Need private key for signing');\n      }\n      const signingKeyID = signingKeyIDs[signingKeys.length - 1 - i];\n      const signingKey = await primaryKey.getSigningKey(signingKeyID, date, userIDs, config);\n      const onePassSig = new OnePassSignaturePacket();\n      onePassSig.signatureType = signatureType;\n      onePassSig.hashAlgorithm = await getPreferredHashAlgo(primaryKey, signingKey.keyPacket, date, userIDs, config);\n      onePassSig.publicKeyAlgorithm = signingKey.keyPacket.algorithm;\n      onePassSig.issuerKeyID = signingKey.getKeyID();\n      if (i === signingKeys.length - 1) {\n        onePassSig.flags = 1;\n      }\n      return onePassSig;\n    })).then(onePassSignatureList => {\n      onePassSignatureList.forEach(onePassSig => packetlist.push(onePassSig));\n    });\n\n    packetlist.push(literalDataPacket);\n    packetlist.push(...(await createSignaturePackets(literalDataPacket, signingKeys, signature, signingKeyIDs, date, userIDs, notations, false, config)));\n\n    return new Message(packetlist);\n  }\n\n  /**\n   * Compresses the message (the literal and -if signed- signature data packets of the message)\n   * @param {module:enums.compression} algo - compression algorithm\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Message} New message with compressed content.\n   */\n  compress(algo, config = defaultConfig) {\n    if (algo === enums.compression.uncompressed) {\n      return this;\n    }\n\n    const compressed = new CompressedDataPacket(config);\n    compressed.algorithm = algo;\n    compressed.packets = this.packets;\n\n    const packetList = new PacketList();\n    packetList.push(compressed);\n\n    return new Message(packetList);\n  }\n\n  /**\n   * Create a detached signature for the message (the literal data packet of the message)\n   * @param {Array<PrivateKey>} signingKeys - private keys with decrypted secret key data for signing\n   * @param {Signature} [signature] - Any existing detached signature\n   * @param {Array<module:type/keyid~KeyID>} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n   * @param {Date} [date] - Override the creation time of the signature\n   * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n   * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Signature>} New detached signature of message content.\n   * @async\n   */\n  async signDetached(signingKeys = [], signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], config = defaultConfig) {\n    const literalDataPacket = this.packets.findPacket(enums.packet.literalData);\n    if (!literalDataPacket) {\n      throw new Error('No literal data packet to sign.');\n    }\n    return new Signature(await createSignaturePackets(literalDataPacket, signingKeys, signature, signingKeyIDs, date, userIDs, notations, true, config));\n  }\n\n  /**\n   * Verify message signatures\n   * @param {Array<PublicKey>} verificationKeys - Array of public keys to verify signatures\n   * @param {Date} [date] - Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Array<{\n   *   keyID: module:type/keyid~KeyID,\n   *   signature: Promise<Signature>,\n   *   verified: Promise<true>\n   * }>>} List of signer's keyID and validity of signatures.\n   * @async\n   */\n  async verify(verificationKeys, date = new Date(), config = defaultConfig) {\n    const msg = this.unwrapCompressed();\n    const literalDataList = msg.packets.filterByTag(enums.packet.literalData);\n    if (literalDataList.length !== 1) {\n      throw new Error('Can only verify message with one literal data packet.');\n    }\n    if (stream.isArrayStream(msg.packets.stream)) {\n      msg.packets.push(...await stream.readToEnd(msg.packets.stream, _ => _ || []));\n    }\n    const onePassSigList = msg.packets.filterByTag(enums.packet.onePassSignature).reverse();\n    const signatureList = msg.packets.filterByTag(enums.packet.signature);\n    if (onePassSigList.length && !signatureList.length && util.isStream(msg.packets.stream) && !stream.isArrayStream(msg.packets.stream)) {\n      await Promise.all(onePassSigList.map(async onePassSig => {\n        onePassSig.correspondingSig = new Promise((resolve, reject) => {\n          onePassSig.correspondingSigResolve = resolve;\n          onePassSig.correspondingSigReject = reject;\n        });\n        onePassSig.signatureData = stream.fromAsync(async () => (await onePassSig.correspondingSig).signatureData);\n        onePassSig.hashed = stream.readToEnd(await onePassSig.hash(onePassSig.signatureType, literalDataList[0], undefined, false));\n        onePassSig.hashed.catch(() => {});\n      }));\n      msg.packets.stream = stream.transformPair(msg.packets.stream, async (readable, writable) => {\n        const reader = stream.getReader(readable);\n        const writer = stream.getWriter(writable);\n        try {\n          for (let i = 0; i < onePassSigList.length; i++) {\n            const { value: signature } = await reader.read();\n            onePassSigList[i].correspondingSigResolve(signature);\n          }\n          await reader.readToEnd();\n          await writer.ready;\n          await writer.close();\n        } catch (e) {\n          onePassSigList.forEach(onePassSig => {\n            onePassSig.correspondingSigReject(e);\n          });\n          await writer.abort(e);\n        }\n      });\n      return createVerificationObjects(onePassSigList, literalDataList, verificationKeys, date, false, config);\n    }\n    return createVerificationObjects(signatureList, literalDataList, verificationKeys, date, false, config);\n  }\n\n  /**\n   * Verify detached message signature\n   * @param {Array<PublicKey>} verificationKeys - Array of public keys to verify signatures\n   * @param {Signature} signature\n   * @param {Date} date - Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Array<{\n   *   keyID: module:type/keyid~KeyID,\n   *   signature: Promise<Signature>,\n   *   verified: Promise<true>\n   * }>>} List of signer's keyID and validity of signature.\n   * @async\n   */\n  verifyDetached(signature, verificationKeys, date = new Date(), config = defaultConfig) {\n    const msg = this.unwrapCompressed();\n    const literalDataList = msg.packets.filterByTag(enums.packet.literalData);\n    if (literalDataList.length !== 1) {\n      throw new Error('Can only verify message with one literal data packet.');\n    }\n    const signatureList = signature.packets.filterByTag(enums.packet.signature); // drop UnparsablePackets\n    return createVerificationObjects(signatureList, literalDataList, verificationKeys, date, true, config);\n  }\n\n  /**\n   * Unwrap compressed message\n   * @returns {Message} Message Content of compressed message.\n   */\n  unwrapCompressed() {\n    const compressed = this.packets.filterByTag(enums.packet.compressedData);\n    if (compressed.length) {\n      return new Message(compressed[0].packets);\n    }\n    return this;\n  }\n\n  /**\n   * Append signature to unencrypted message object\n   * @param {String|Uint8Array} detachedSignature - The detached ASCII-armored or Uint8Array PGP signature\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   */\n  async appendSignature(detachedSignature, config = defaultConfig) {\n    await this.packets.read(\n      util.isUint8Array(detachedSignature) ? detachedSignature : (await unarmor(detachedSignature)).data,\n      allowedDetachedSignaturePackets,\n      config\n    );\n  }\n\n  /**\n   * Returns binary encoded message\n   * @returns {ReadableStream<Uint8Array>} Binary message.\n   */\n  write() {\n    return this.packets.write();\n  }\n\n  /**\n   * Returns ASCII armored text of message\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {ReadableStream<String>} ASCII armor.\n   */\n  armor(config = defaultConfig) {\n    return armor(enums.armor.message, this.write(), null, null, null, config);\n  }\n}\n\n/**\n * Create signature packets for the message\n * @param {LiteralDataPacket} literalDataPacket - the literal data packet to sign\n * @param {Array<PrivateKey>} [signingKeys] - private keys with decrypted secret key data for signing\n * @param {Signature} [signature] - Any existing detached signature to append\n * @param {Array<module:type/keyid~KeyID>} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n * @param {Date} [date] - Override the creationtime of the signature\n * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n * @param {Boolean} [detached] - Whether to create detached signature packets\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise<PacketList>} List of signature packets.\n * @async\n * @private\n */\nexport async function createSignaturePackets(literalDataPacket, signingKeys, signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], detached = false, config = defaultConfig) {\n  const packetlist = new PacketList();\n\n  // If data packet was created from Uint8Array, use binary, otherwise use text\n  const signatureType = literalDataPacket.text === null ?\n    enums.signature.binary : enums.signature.text;\n\n  await Promise.all(signingKeys.map(async (primaryKey, i) => {\n    const userID = userIDs[i];\n    if (!primaryKey.isPrivate()) {\n      throw new Error('Need private key for signing');\n    }\n    const signingKey = await primaryKey.getSigningKey(signingKeyIDs[i], date, userID, config);\n    return createSignaturePacket(literalDataPacket, primaryKey, signingKey.keyPacket, { signatureType }, date, userID, notations, detached, config);\n  })).then(signatureList => {\n    packetlist.push(...signatureList);\n  });\n\n  if (signature) {\n    const existingSigPacketlist = signature.packets.filterByTag(enums.packet.signature);\n    packetlist.push(...existingSigPacketlist);\n  }\n  return packetlist;\n}\n\n/**\n * Create object containing signer's keyID and validity of signature\n * @param {SignaturePacket} signature - Signature packet\n * @param {Array<LiteralDataPacket>} literalDataList - Array of literal data packets\n * @param {Array<PublicKey>} verificationKeys - Array of public keys to verify signatures\n * @param {Date} [date] - Check signature validity with respect to the given date\n * @param {Boolean} [detached] - Whether to verify detached signature packets\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise<{\n *   keyID: module:type/keyid~KeyID,\n *   signature: Promise<Signature>,\n *   verified: Promise<true>\n * }>} signer's keyID and validity of signature\n * @async\n * @private\n */\nasync function createVerificationObject(signature, literalDataList, verificationKeys, date = new Date(), detached = false, config = defaultConfig) {\n  let primaryKey;\n  let unverifiedSigningKey;\n\n  for (const key of verificationKeys) {\n    const issuerKeys = key.getKeys(signature.issuerKeyID);\n    if (issuerKeys.length > 0) {\n      primaryKey = key;\n      unverifiedSigningKey = issuerKeys[0];\n      break;\n    }\n  }\n\n  const isOnePassSignature = signature instanceof OnePassSignaturePacket;\n  const signaturePacketPromise = isOnePassSignature ? signature.correspondingSig : signature;\n\n  const verifiedSig = {\n    keyID: signature.issuerKeyID,\n    verified: (async () => {\n      if (!unverifiedSigningKey) {\n        throw new Error(`Could not find signing key with key ID ${signature.issuerKeyID.toHex()}`);\n      }\n\n      await signature.verify(unverifiedSigningKey.keyPacket, signature.signatureType, literalDataList[0], date, detached, config);\n      const signaturePacket = await signaturePacketPromise;\n      if (unverifiedSigningKey.getCreationTime() > signaturePacket.created) {\n        throw new Error('Key is newer than the signature');\n      }\n      // We pass the signature creation time to check whether the key was expired at the time of signing.\n      // We check this after signature verification because for streamed one-pass signatures, the creation time is not available before\n      try {\n        await primaryKey.getSigningKey(unverifiedSigningKey.getKeyID(), signaturePacket.created, undefined, config);\n      } catch (e) {\n        // If a key was reformatted then the self-signatures of the signing key might be in the future compared to the message signature,\n        // making the key invalid at the time of signing.\n        // However, if the key is valid at the given `date`, we still allow using it provided the relevant `config` setting is enabled.\n        // Note: we do not support the edge case of a key that was reformatted and it has expired.\n        if (config.allowInsecureVerificationWithReformattedKeys && e.message.match(/Signature creation time is in the future/)) {\n          await primaryKey.getSigningKey(unverifiedSigningKey.getKeyID(), date, undefined, config);\n        } else {\n          throw e;\n        }\n      }\n      return true;\n    })(),\n    signature: (async () => {\n      const signaturePacket = await signaturePacketPromise;\n      const packetlist = new PacketList();\n      signaturePacket && packetlist.push(signaturePacket);\n      return new Signature(packetlist);\n    })()\n  };\n\n  // Mark potential promise rejections as \"handled\". This is needed because in\n  // some cases, we reject them before the user has a reasonable chance to\n  // handle them (e.g. `await readToEnd(result.data); await result.verified` and\n  // the data stream errors).\n  verifiedSig.signature.catch(() => {});\n  verifiedSig.verified.catch(() => {});\n\n  return verifiedSig;\n}\n\n/**\n * Create list of objects containing signer's keyID and validity of signature\n * @param {Array<SignaturePacket>} signatureList - Array of signature packets\n * @param {Array<LiteralDataPacket>} literalDataList - Array of literal data packets\n * @param {Array<PublicKey>} verificationKeys - Array of public keys to verify signatures\n * @param {Date} date - Verify the signature against the given date,\n *                    i.e. check signature creation time < date < expiration time\n * @param {Boolean} [detached] - Whether to verify detached signature packets\n * @param {Object} [config] - Full configuration, defaults to openpgp.config\n * @returns {Promise<Array<{\n *   keyID: module:type/keyid~KeyID,\n *   signature: Promise<Signature>,\n *   verified: Promise<true>\n * }>>} list of signer's keyID and validity of signatures (one entry per signature packet in input)\n * @async\n * @private\n */\nexport async function createVerificationObjects(signatureList, literalDataList, verificationKeys, date = new Date(), detached = false, config = defaultConfig) {\n  return Promise.all(signatureList.filter(function(signature) {\n    return ['text', 'binary'].includes(enums.read(enums.signature, signature.signatureType));\n  }).map(async function(signature) {\n    return createVerificationObject(signature, literalDataList, verificationKeys, date, detached, config);\n  }));\n}\n\n/**\n * Reads an (optionally armored) OpenPGP message and returns a Message object\n * @param {Object} options\n * @param {String | ReadableStream<String>} [options.armoredMessage] - Armored message to be parsed\n * @param {Uint8Array | ReadableStream<Uint8Array>} [options.binaryMessage] - Binary to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Message>} New message object.\n * @async\n * @static\n */\nexport async function readMessage({ armoredMessage, binaryMessage, config, ...rest }) {\n  config = { ...defaultConfig, ...config };\n  let input = armoredMessage || binaryMessage;\n  if (!input) {\n    throw new Error('readMessage: must pass options object containing `armoredMessage` or `binaryMessage`');\n  }\n  if (armoredMessage && !util.isString(armoredMessage) && !util.isStream(armoredMessage)) {\n    throw new Error('readMessage: options.armoredMessage must be a string or stream');\n  }\n  if (binaryMessage && !util.isUint8Array(binaryMessage) && !util.isStream(binaryMessage)) {\n    throw new Error('readMessage: options.binaryMessage must be a Uint8Array or stream');\n  }\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  const streamType = util.isStream(input);\n  if (streamType) {\n    await stream.loadStreamsPonyfill();\n    input = stream.toStream(input);\n  }\n  if (armoredMessage) {\n    const { type, data } = await unarmor(input, config);\n    if (type !== enums.armor.message) {\n      throw new Error('Armored text not of type message');\n    }\n    input = data;\n  }\n  const packetlist = await PacketList.fromBinary(input, allowedMessagePackets, config);\n  const message = new Message(packetlist);\n  message.fromStream = streamType;\n  return message;\n}\n\n/**\n * Creates new message object from text or binary data.\n * @param {Object} options\n * @param {String | ReadableStream<String>} [options.text] - The text message contents\n * @param {Uint8Array | ReadableStream<Uint8Array>} [options.binary] - The binary message contents\n * @param {String} [options.filename=\"\"] - Name of the file (if any)\n * @param {Date} [options.date=current date] - Date of the message, or modification date of the file\n * @param {'utf8'|'binary'|'text'|'mime'} [options.format='utf8' if text is passed, 'binary' otherwise] - Data packet type\n * @returns {Promise<Message>} New message object.\n * @async\n * @static\n */\nexport async function createMessage({ text, binary, filename, date = new Date(), format = text !== undefined ? 'utf8' : 'binary', ...rest }) {\n  let input = text !== undefined ? text : binary;\n  if (input === undefined) {\n    throw new Error('createMessage: must pass options object containing `text` or `binary`');\n  }\n  if (text && !util.isString(text) && !util.isStream(text)) {\n    throw new Error('createMessage: options.text must be a string or stream');\n  }\n  if (binary && !util.isUint8Array(binary) && !util.isStream(binary)) {\n    throw new Error('createMessage: options.binary must be a Uint8Array or stream');\n  }\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  const streamType = util.isStream(input);\n  if (streamType) {\n    await stream.loadStreamsPonyfill();\n    input = stream.toStream(input);\n  }\n  const literalDataPacket = new LiteralDataPacket(date);\n  if (text !== undefined) {\n    literalDataPacket.setText(input, enums.write(enums.literal, format));\n  } else {\n    literalDataPacket.setBytes(input, enums.write(enums.literal, format));\n  }\n  if (filename !== undefined) {\n    literalDataPacket.setFilename(filename);\n  }\n  const literalDataPacketlist = new PacketList();\n  literalDataPacketlist.push(literalDataPacket);\n  const message = new Message(literalDataPacketlist);\n  message.fromStream = streamType;\n  return message;\n}\n","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nimport { armor, unarmor } from './encoding/armor';\nimport enums from './enums';\nimport util from './util';\nimport { PacketList, LiteralDataPacket, SignaturePacket } from './packet';\nimport { Signature } from './signature';\nimport { createVerificationObjects, createSignaturePackets } from './message';\nimport defaultConfig from './config';\n\n// A Cleartext message can contain the following packets\nconst allowedPackets = /*#__PURE__*/ util.constructAllowedPackets([SignaturePacket]);\n\n/**\n * Class that represents an OpenPGP cleartext signed message.\n * See {@link https://tools.ietf.org/html/rfc4880#section-7}\n */\nexport class CleartextMessage {\n  /**\n   * @param {String} text - The cleartext of the signed message\n   * @param {Signature} signature - The detached signature or an empty signature for unsigned messages\n   */\n  constructor(text, signature) {\n    // remove trailing whitespace and normalize EOL to canonical form <CR><LF>\n    this.text = util.removeTrailingSpaces(text).replace(/\\r?\\n/g, '\\r\\n');\n    if (signature && !(signature instanceof Signature)) {\n      throw new Error('Invalid signature input');\n    }\n    this.signature = signature || new Signature(new PacketList());\n  }\n\n  /**\n   * Returns the key IDs of the keys that signed the cleartext message\n   * @returns {Array<module:type/keyid~KeyID>} Array of keyID objects.\n   */\n  getSigningKeyIDs() {\n    const keyIDs = [];\n    const signatureList = this.signature.packets;\n    signatureList.forEach(function(packet) {\n      keyIDs.push(packet.issuerKeyID);\n    });\n    return keyIDs;\n  }\n\n  /**\n   * Sign the cleartext message\n   * @param {Array<Key>} privateKeys - private keys with decrypted secret key data for signing\n   * @param {Signature} [signature] - Any existing detached signature\n   * @param {Array<module:type/keyid~KeyID>} [signingKeyIDs] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to privateKeys[i]\n   * @param {Date} [date] - The creation time of the signature that should be created\n   * @param {Array} [userIDs] - User IDs to sign with, e.g. [{ name:'Steve Sender', email:'steve@openpgp.org' }]\n   * @param {Array} [notations] - Notation Data to add to the signatures, e.g. [{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<CleartextMessage>} New cleartext message with signed content.\n   * @async\n   */\n  async sign(privateKeys, signature = null, signingKeyIDs = [], date = new Date(), userIDs = [], notations = [], config = defaultConfig) {\n    const literalDataPacket = new LiteralDataPacket();\n    literalDataPacket.setText(this.text);\n    const newSignature = new Signature(await createSignaturePackets(literalDataPacket, privateKeys, signature, signingKeyIDs, date, userIDs, notations, true, config));\n    return new CleartextMessage(this.text, newSignature);\n  }\n\n  /**\n   * Verify signatures of cleartext signed message\n   * @param {Array<Key>} keys - Array of keys to verify signatures\n   * @param {Date} [date] - Verify the signature against the given date, i.e. check signature creation time < date < expiration time\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {Promise<Array<{\n   *   keyID: module:type/keyid~KeyID,\n   *   signature: Promise<Signature>,\n   *   verified: Promise<true>\n   * }>>} List of signer's keyID and validity of signature.\n   * @async\n   */\n  verify(keys, date = new Date(), config = defaultConfig) {\n    const signatureList = this.signature.packets.filterByTag(enums.packet.signature); // drop UnparsablePackets\n    const literalDataPacket = new LiteralDataPacket();\n    // we assume that cleartext signature is generated based on UTF8 cleartext\n    literalDataPacket.setText(this.text);\n    return createVerificationObjects(signatureList, [literalDataPacket], keys, date, true, config);\n  }\n\n  /**\n   * Get cleartext\n   * @returns {String} Cleartext of message.\n   */\n  getText() {\n    // normalize end of line to \\n\n    return this.text.replace(/\\r\\n/g, '\\n');\n  }\n\n  /**\n   * Returns ASCII armored text of cleartext signed message\n   * @param {Object} [config] - Full configuration, defaults to openpgp.config\n   * @returns {String | ReadableStream<String>} ASCII armor.\n   */\n  armor(config = defaultConfig) {\n    let hashes = this.signature.packets.map(function(packet) {\n      return enums.read(enums.hash, packet.hashAlgorithm).toUpperCase();\n    });\n    hashes = hashes.filter(function(item, i, ar) { return ar.indexOf(item) === i; });\n    const body = {\n      hash: hashes.join(),\n      text: this.text,\n      data: this.signature.packets.write()\n    };\n    return armor(enums.armor.signed, body, undefined, undefined, undefined, config);\n  }\n}\n\n/**\n * Reads an OpenPGP cleartext signed message and returns a CleartextMessage object\n * @param {Object} options\n * @param {String} options.cleartextMessage - Text to be parsed\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<CleartextMessage>} New cleartext message object.\n * @async\n * @static\n */\nexport async function readCleartextMessage({ cleartextMessage, config, ...rest }) {\n  config = { ...defaultConfig, ...config };\n  if (!cleartextMessage) {\n    throw new Error('readCleartextMessage: must pass options object containing `cleartextMessage`');\n  }\n  if (!util.isString(cleartextMessage)) {\n    throw new Error('readCleartextMessage: options.cleartextMessage must be a string');\n  }\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  const input = await unarmor(cleartextMessage);\n  if (input.type !== enums.armor.signed) {\n    throw new Error('No cleartext signed message.');\n  }\n  const packetlist = await PacketList.fromBinary(input.data, allowedPackets, config);\n  verifyHeaders(input.headers, packetlist);\n  const signature = new Signature(packetlist);\n  return new CleartextMessage(input.text, signature);\n}\n\n/**\n * Compare hash algorithm specified in the armor header with signatures\n * @param {Array<String>} headers - Armor headers\n * @param {PacketList} packetlist - The packetlist with signature packets\n * @private\n */\nfunction verifyHeaders(headers, packetlist) {\n  const checkHashAlgos = function(hashAlgos) {\n    const check = packet => algo => packet.hashAlgorithm === algo;\n\n    for (let i = 0; i < packetlist.length; i++) {\n      if (packetlist[i].constructor.tag === enums.packet.signature && !hashAlgos.some(check(packetlist[i]))) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  let oneHeader = null;\n  let hashAlgos = [];\n  headers.forEach(function(header) {\n    oneHeader = header.match(/^Hash: (.+)$/); // get header value\n    if (oneHeader) {\n      oneHeader = oneHeader[1].replace(/\\s/g, ''); // remove whitespace\n      oneHeader = oneHeader.split(',');\n      oneHeader = oneHeader.map(function(hash) {\n        hash = hash.toLowerCase();\n        try {\n          return enums.write(enums.hash, hash);\n        } catch (e) {\n          throw new Error('Unknown hash algorithm in armor header: ' + hash);\n        }\n      });\n      hashAlgos = hashAlgos.concat(oneHeader);\n    } else {\n      throw new Error('Only \"Hash\" header allowed in cleartext signed message');\n    }\n  });\n\n  if (!hashAlgos.length && !checkHashAlgos([enums.hash.md5])) {\n    throw new Error('If no \"Hash\" header in cleartext signed message, then only MD5 signatures allowed');\n  } else if (hashAlgos.length && !checkHashAlgos(hashAlgos)) {\n    throw new Error('Hash algorithm mismatch in armor header and signature');\n  }\n}\n\n/**\n * Creates a new CleartextMessage object from text\n * @param {Object} options\n * @param {String} options.text\n * @static\n * @async\n */\nexport async function createCleartextMessage({ text, ...rest }) {\n  if (!text) {\n    throw new Error('createCleartextMessage: must pass options object containing `text`');\n  }\n  if (!util.isString(text)) {\n    throw new Error('createCleartextMessage: options.text must be a string');\n  }\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  return new CleartextMessage(text);\n}\n","// OpenPGP.js - An OpenPGP implementation in javascript\n// Copyright (C) 2016 Tankred Hase\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nimport * as stream from '@openpgp/web-stream-tools';\nimport { Message } from './message';\nimport { CleartextMessage } from './cleartext';\nimport { generate, reformat, getPreferredAlgo } from './key';\nimport defaultConfig from './config';\nimport util from './util';\nimport { checkKeyRequirements } from './key/helper';\n\n\n//////////////////////\n//                  //\n//   Key handling   //\n//                  //\n//////////////////////\n\n\n/**\n * Generates a new OpenPGP key pair. Supports RSA and ECC keys. By default, primary and subkeys will be of same type.\n * The generated primary key will have signing capabilities. By default, one subkey with encryption capabilities is also generated.\n * @param {Object} options\n * @param {Object|Array<Object>} options.userIDs - User IDs as objects: `{ name: 'Jo Doe', email: 'info@jo.com' }`\n * @param {'ecc'|'rsa'} [options.type='ecc'] - The primary key algorithm type: ECC (default) or RSA\n * @param {String} [options.passphrase=(not protected)] - The passphrase used to encrypt the generated private key. If omitted or empty, the key won't be encrypted.\n * @param {Number} [options.rsaBits=4096] - Number of bits for RSA keys\n * @param {String} [options.curve='curve25519'] - Elliptic curve for ECC keys:\n *                                             curve25519 (default), p256, p384, p521, secp256k1,\n *                                             brainpoolP256r1, brainpoolP384r1, or brainpoolP512r1\n * @param {Date} [options.date=current date] - Override the creation date of the key and the key signatures\n * @param {Number} [options.keyExpirationTime=0 (never expires)] - Number of seconds from the key creation time after which the key expires\n * @param {Array<Object>} [options.subkeys=a single encryption subkey] - Options for each subkey e.g. `[{sign: true, passphrase: '123'}]`\n *                                             default to main key options, except for `sign` parameter that defaults to false, and indicates whether the subkey should sign rather than encrypt\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - format of the output keys\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Object>} The generated key object in the form:\n *                                     { privateKey:PrivateKey|Uint8Array|String, publicKey:PublicKey|Uint8Array|String, revocationCertificate:String }\n * @async\n * @static\n */\nexport async function generateKey({ userIDs = [], passphrase, type = 'ecc', rsaBits = 4096, curve = 'curve25519', keyExpirationTime = 0, date = new Date(), subkeys = [{}], format = 'armored', config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  userIDs = toArray(userIDs);\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (userIDs.length === 0) {\n    throw new Error('UserIDs are required for key generation');\n  }\n  if (type === 'rsa' && rsaBits < config.minRSABits) {\n    throw new Error(`rsaBits should be at least ${config.minRSABits}, got: ${rsaBits}`);\n  }\n\n  const options = { userIDs, passphrase, type, rsaBits, curve, keyExpirationTime, date, subkeys };\n\n  try {\n    const { key, revocationCertificate } = await generate(options, config);\n    key.getKeys().forEach(({ keyPacket }) => checkKeyRequirements(keyPacket, config));\n\n    return {\n      privateKey: formatObject(key, format, config),\n      publicKey: formatObject(key.toPublic(), format, config),\n      revocationCertificate\n    };\n  } catch (err) {\n    throw util.wrapError('Error generating keypair', err);\n  }\n}\n\n/**\n * Reformats signature packets for a key and rewraps key object.\n * @param {Object} options\n * @param {PrivateKey} options.privateKey - Private key to reformat\n * @param {Object|Array<Object>} options.userIDs - User IDs as objects: `{ name: 'Jo Doe', email: 'info@jo.com' }`\n * @param {String} [options.passphrase=(not protected)] - The passphrase used to encrypt the reformatted private key. If omitted or empty, the key won't be encrypted.\n * @param {Number} [options.keyExpirationTime=0 (never expires)] - Number of seconds from the key creation time after which the key expires\n * @param {Date}   [options.date] - Override the creation date of the key signatures. If the key was previously used to sign messages, it is recommended\n *                                  to set the same date as the key creation time to ensure that old message signatures will still be verifiable using the reformatted key.\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - format of the output keys\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Object>} The generated key object in the form:\n *                                     { privateKey:PrivateKey|Uint8Array|String, publicKey:PublicKey|Uint8Array|String, revocationCertificate:String }\n * @async\n * @static\n */\nexport async function reformatKey({ privateKey, userIDs = [], passphrase, keyExpirationTime = 0, date, format = 'armored', config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  userIDs = toArray(userIDs);\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (userIDs.length === 0) {\n    throw new Error('UserIDs are required for key reformat');\n  }\n  const options = { privateKey, userIDs, passphrase, keyExpirationTime, date };\n\n  try {\n    const { key: reformattedKey, revocationCertificate } = await reformat(options, config);\n\n    return {\n      privateKey: formatObject(reformattedKey, format, config),\n      publicKey: formatObject(reformattedKey.toPublic(), format, config),\n      revocationCertificate\n    };\n  } catch (err) {\n    throw util.wrapError('Error reformatting keypair', err);\n  }\n}\n\n/**\n * Revokes a key. Requires either a private key or a revocation certificate.\n *   If a revocation certificate is passed, the reasonForRevocation parameter will be ignored.\n * @param {Object} options\n * @param {Key} options.key - Public or private key to revoke\n * @param {String} [options.revocationCertificate] - Revocation certificate to revoke the key with\n * @param {Object} [options.reasonForRevocation] - Object indicating the reason for revocation\n * @param {module:enums.reasonForRevocation} [options.reasonForRevocation.flag=[noReason]{@link module:enums.reasonForRevocation}] - Flag indicating the reason for revocation\n * @param {String} [options.reasonForRevocation.string=\"\"] - String explaining the reason for revocation\n * @param {Date} [options.date] - Use the given date instead of the current time to verify validity of revocation certificate (if provided), or as creation time of the revocation signature\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - format of the output key(s)\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Object>} The revoked key in the form:\n *                              { privateKey:PrivateKey|Uint8Array|String, publicKey:PublicKey|Uint8Array|String } if private key is passed, or\n *                              { privateKey: null, publicKey:PublicKey|Uint8Array|String } otherwise\n * @async\n * @static\n */\nexport async function revokeKey({ key, revocationCertificate, reasonForRevocation, date = new Date(), format = 'armored', config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  try {\n    const revokedKey = revocationCertificate ?\n      await key.applyRevocationCertificate(revocationCertificate, date, config) :\n      await key.revoke(reasonForRevocation, date, config);\n\n    return revokedKey.isPrivate() ? {\n      privateKey: formatObject(revokedKey, format, config),\n      publicKey: formatObject(revokedKey.toPublic(), format, config)\n    } : {\n      privateKey: null,\n      publicKey: formatObject(revokedKey, format, config)\n    };\n  } catch (err) {\n    throw util.wrapError('Error revoking key', err);\n  }\n}\n\n/**\n * Unlock a private key with the given passphrase.\n * This method does not change the original key.\n * @param {Object} options\n * @param {PrivateKey} options.privateKey - The private key to decrypt\n * @param {String|Array<String>} options.passphrase - The user's passphrase(s)\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<PrivateKey>} The unlocked key object.\n * @async\n */\nexport async function decryptKey({ privateKey, passphrase, config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (!privateKey.isPrivate()) {\n    throw new Error('Cannot decrypt a public key');\n  }\n  const clonedPrivateKey = privateKey.clone(true);\n  const passphrases = util.isArray(passphrase) ? passphrase : [passphrase];\n\n  try {\n    await Promise.all(clonedPrivateKey.getKeys().map(key => (\n      // try to decrypt each key with any of the given passphrases\n      util.anyPromise(passphrases.map(passphrase => key.keyPacket.decrypt(passphrase)))\n    )));\n\n    await clonedPrivateKey.validate(config);\n    return clonedPrivateKey;\n  } catch (err) {\n    clonedPrivateKey.clearPrivateParams();\n    throw util.wrapError('Error decrypting private key', err);\n  }\n}\n\n/**\n * Lock a private key with the given passphrase.\n * This method does not change the original key.\n * @param {Object} options\n * @param {PrivateKey} options.privateKey - The private key to encrypt\n * @param {String|Array<String>} options.passphrase - If multiple passphrases, they should be in the same order as the packets each should encrypt\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<PrivateKey>} The locked key object.\n * @async\n */\nexport async function encryptKey({ privateKey, passphrase, config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (!privateKey.isPrivate()) {\n    throw new Error('Cannot encrypt a public key');\n  }\n  const clonedPrivateKey = privateKey.clone(true);\n\n  const keys = clonedPrivateKey.getKeys();\n  const passphrases = util.isArray(passphrase) ? passphrase : new Array(keys.length).fill(passphrase);\n  if (passphrases.length !== keys.length) {\n    throw new Error('Invalid number of passphrases given for key encryption');\n  }\n\n  try {\n    await Promise.all(keys.map(async (key, i) => {\n      const { keyPacket } = key;\n      await keyPacket.encrypt(passphrases[i], config);\n      keyPacket.clearPrivateParams();\n    }));\n    return clonedPrivateKey;\n  } catch (err) {\n    clonedPrivateKey.clearPrivateParams();\n    throw util.wrapError('Error encrypting private key', err);\n  }\n}\n\n\n///////////////////////////////////////////\n//                                       //\n//   Message encryption and decryption   //\n//                                       //\n///////////////////////////////////////////\n\n\n/**\n * Encrypts a message using public keys, passwords or both at once. At least one of `encryptionKeys`, `passwords` or `sessionKeys`\n *   must be specified. If signing keys are specified, those will be used to sign the message.\n * @param {Object} options\n * @param {Message} options.message - Message to be encrypted as created by {@link createMessage}\n * @param {PublicKey|PublicKey[]} [options.encryptionKeys] - Array of keys or single key, used to encrypt the message\n * @param {PrivateKey|PrivateKey[]} [options.signingKeys] - Private keys for signing. If omitted message will not be signed\n * @param {String|String[]} [options.passwords] - Array of passwords or a single password to encrypt the message\n * @param {Object} [options.sessionKey] - Session key in the form: `{ data:Uint8Array, algorithm:String }`\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - Format of the returned message\n * @param {Signature} [options.signature] - A detached signature to add to the encrypted message\n * @param {Boolean} [options.wildcard=false] - Use a key ID of 0 instead of the public key IDs\n * @param {KeyID|KeyID[]} [options.signingKeyIDs=latest-created valid signing (sub)keys] - Array of key IDs to use for signing. Each `signingKeyIDs[i]` corresponds to `signingKeys[i]`\n * @param {KeyID|KeyID[]} [options.encryptionKeyIDs=latest-created valid encryption (sub)keys] - Array of key IDs to use for encryption. Each `encryptionKeyIDs[i]` corresponds to `encryptionKeys[i]`\n * @param {Date} [options.date=current date] - Override the creation date of the message signature\n * @param {Object|Object[]} [options.signingUserIDs=primary user IDs] - Array of user IDs to sign with, one per key in `signingKeys`, e.g. `[{ name: 'Steve Sender', email: 'steve@openpgp.org' }]`\n * @param {Object|Object[]} [options.encryptionUserIDs=primary user IDs] - Array of user IDs to encrypt for, one per key in `encryptionKeys`, e.g. `[{ name: 'Robert Receiver', email: 'robert@openpgp.org' }]`\n * @param {Object|Object[]} [options.signatureNotations=[]] - Array of notations to add to the signatures, e.g. `[{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]`\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<MaybeStream<String>|MaybeStream<Uint8Array>>} Encrypted message (string if `armor` was true, the default; Uint8Array if `armor` was false).\n * @async\n * @static\n */\nexport async function encrypt({ message, encryptionKeys, signingKeys, passwords, sessionKey, format = 'armored', signature = null, wildcard = false, signingKeyIDs = [], encryptionKeyIDs = [], date = new Date(), signingUserIDs = [], encryptionUserIDs = [], signatureNotations = [], config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  checkMessage(message); checkOutputMessageFormat(format);\n  encryptionKeys = toArray(encryptionKeys); signingKeys = toArray(signingKeys); passwords = toArray(passwords);\n  signingKeyIDs = toArray(signingKeyIDs); encryptionKeyIDs = toArray(encryptionKeyIDs); signingUserIDs = toArray(signingUserIDs); encryptionUserIDs = toArray(encryptionUserIDs); signatureNotations = toArray(signatureNotations);\n  if (rest.detached) {\n    throw new Error(\"The `detached` option has been removed from openpgp.encrypt, separately call openpgp.sign instead. Don't forget to remove the `privateKeys` option as well.\");\n  }\n  if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.encrypt, pass `encryptionKeys` instead');\n  if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.encrypt, pass `signingKeys` instead');\n  if (rest.armor !== undefined) throw new Error('The `armor` option has been removed from openpgp.encrypt, pass `format` instead.');\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (!signingKeys) {\n    signingKeys = [];\n  }\n  const streaming = message.fromStream;\n  try {\n    if (signingKeys.length || signature) { // sign the message only if signing keys or signature is specified\n      message = await message.sign(signingKeys, signature, signingKeyIDs, date, signingUserIDs, signatureNotations, config);\n    }\n    message = message.compress(\n      await getPreferredAlgo('compression', encryptionKeys, date, encryptionUserIDs, config),\n      config\n    );\n    message = await message.encrypt(encryptionKeys, passwords, sessionKey, wildcard, encryptionKeyIDs, date, encryptionUserIDs, config);\n    if (format === 'object') return message;\n    // serialize data\n    const armor = format === 'armored';\n    const data = armor ? message.armor(config) : message.write();\n    return convertStream(data, streaming, armor ? 'utf8' : 'binary');\n  } catch (err) {\n    throw util.wrapError('Error encrypting message', err);\n  }\n}\n\n/**\n * Decrypts a message with the user's private key, a session key or a password.\n * One of `decryptionKeys`, `sessionkeys` or `passwords` must be specified (passing a combination of these options is not supported).\n * @param {Object} options\n * @param {Message} options.message - The message object with the encrypted data\n * @param {PrivateKey|PrivateKey[]} [options.decryptionKeys] - Private keys with decrypted secret key data or session key\n * @param {String|String[]} [options.passwords] - Passwords to decrypt the message\n * @param {Object|Object[]} [options.sessionKeys] - Session keys in the form: { data:Uint8Array, algorithm:String }\n * @param {PublicKey|PublicKey[]} [options.verificationKeys] - Array of public keys or single key, to verify signatures\n * @param {Boolean} [options.expectSigned=false] - If true, data decryption fails if the message is not signed with the provided publicKeys\n * @param {'utf8'|'binary'} [options.format='utf8'] - Whether to return data as a string(Stream) or Uint8Array(Stream). If 'utf8' (the default), also normalize newlines.\n * @param {Signature} [options.signature] - Detached signature for verification\n * @param {Date} [options.date=current date] - Use the given date for verification instead of the current time\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Object>} Object containing decrypted and verified message in the form:\n *\n *     {\n *       data: MaybeStream<String>, (if format was 'utf8', the default)\n *       data: MaybeStream<Uint8Array>, (if format was 'binary')\n *       filename: String,\n *       signatures: [\n *         {\n *           keyID: module:type/keyid~KeyID,\n *           verified: Promise<true>,\n *           signature: Promise<Signature>\n *         }, ...\n *       ]\n *     }\n *\n *     where `signatures` contains a separate entry for each signature packet found in the input message.\n * @async\n * @static\n */\nexport async function decrypt({ message, decryptionKeys, passwords, sessionKeys, verificationKeys, expectSigned = false, format = 'utf8', signature = null, date = new Date(), config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  checkMessage(message); verificationKeys = toArray(verificationKeys); decryptionKeys = toArray(decryptionKeys); passwords = toArray(passwords); sessionKeys = toArray(sessionKeys);\n  if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.decrypt, pass `decryptionKeys` instead');\n  if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.decrypt, pass `verificationKeys` instead');\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  try {\n    const decrypted = await message.decrypt(decryptionKeys, passwords, sessionKeys, date, config);\n    if (!verificationKeys) {\n      verificationKeys = [];\n    }\n\n    const result = {};\n    result.signatures = signature ? await decrypted.verifyDetached(signature, verificationKeys, date, config) : await decrypted.verify(verificationKeys, date, config);\n    result.data = format === 'binary' ? decrypted.getLiteralData() : decrypted.getText();\n    result.filename = decrypted.getFilename();\n    linkStreams(result, message);\n    if (expectSigned) {\n      if (verificationKeys.length === 0) {\n        throw new Error('Verification keys are required to verify message signatures');\n      }\n      if (result.signatures.length === 0) {\n        throw new Error('Message is not signed');\n      }\n      result.data = stream.concat([\n        result.data,\n        stream.fromAsync(async () => {\n          await util.anyPromise(result.signatures.map(sig => sig.verified));\n        })\n      ]);\n    }\n    result.data = await convertStream(result.data, message.fromStream, format);\n    return result;\n  } catch (err) {\n    throw util.wrapError('Error decrypting message', err);\n  }\n}\n\n\n//////////////////////////////////////////\n//                                      //\n//   Message signing and verification   //\n//                                      //\n//////////////////////////////////////////\n\n\n/**\n * Signs a message.\n * @param {Object} options\n * @param {CleartextMessage|Message} options.message - (cleartext) message to be signed\n * @param {PrivateKey|PrivateKey[]} options.signingKeys - Array of keys or single key with decrypted secret key data to sign cleartext\n * @param {'armored'|'binary'|'object'} [options.format='armored'] - Format of the returned message\n * @param {Boolean} [options.detached=false] - If the return value should contain a detached signature\n * @param {KeyID|KeyID[]} [options.signingKeyIDs=latest-created valid signing (sub)keys] - Array of key IDs to use for signing. Each signingKeyIDs[i] corresponds to signingKeys[i]\n * @param {Date} [options.date=current date] - Override the creation date of the signature\n * @param {Object|Object[]} [options.signingUserIDs=primary user IDs] - Array of user IDs to sign with, one per key in `signingKeys`, e.g. `[{ name: 'Steve Sender', email: 'steve@openpgp.org' }]`\n * @param {Object|Object[]} [options.signatureNotations=[]] - Array of notations to add to the signatures, e.g. `[{ name: 'test@example.org', value: new TextEncoder().encode('test'), humanReadable: true, critical: false }]`\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<MaybeStream<String|Uint8Array>>} Signed message (string if `armor` was true, the default; Uint8Array if `armor` was false).\n * @async\n * @static\n */\nexport async function sign({ message, signingKeys, format = 'armored', detached = false, signingKeyIDs = [], date = new Date(), signingUserIDs = [], signatureNotations = [], config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  checkCleartextOrMessage(message); checkOutputMessageFormat(format);\n  signingKeys = toArray(signingKeys); signingKeyIDs = toArray(signingKeyIDs); signingUserIDs = toArray(signingUserIDs); signatureNotations = toArray(signatureNotations);\n\n  if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.sign, pass `signingKeys` instead');\n  if (rest.armor !== undefined) throw new Error('The `armor` option has been removed from openpgp.sign, pass `format` instead.');\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (message instanceof CleartextMessage && format === 'binary') throw new Error('Cannot return signed cleartext message in binary format');\n  if (message instanceof CleartextMessage && detached) throw new Error('Cannot detach-sign a cleartext message');\n\n  if (!signingKeys || signingKeys.length === 0) {\n    throw new Error('No signing keys provided');\n  }\n\n  try {\n    let signature;\n    if (detached) {\n      signature = await message.signDetached(signingKeys, undefined, signingKeyIDs, date, signingUserIDs, signatureNotations, config);\n    } else {\n      signature = await message.sign(signingKeys, undefined, signingKeyIDs, date, signingUserIDs, signatureNotations, config);\n    }\n    if (format === 'object') return signature;\n\n    const armor = format === 'armored';\n    signature = armor ? signature.armor(config) : signature.write();\n    if (detached) {\n      signature = stream.transformPair(message.packets.write(), async (readable, writable) => {\n        await Promise.all([\n          stream.pipe(signature, writable),\n          stream.readToEnd(readable).catch(() => {})\n        ]);\n      });\n    }\n    return convertStream(signature, message.fromStream, armor ? 'utf8' : 'binary');\n  } catch (err) {\n    throw util.wrapError('Error signing message', err);\n  }\n}\n\n/**\n * Verifies signatures of cleartext signed message\n * @param {Object} options\n * @param {CleartextMessage|Message} options.message - (cleartext) message object with signatures\n * @param {PublicKey|PublicKey[]} options.verificationKeys - Array of publicKeys or single key, to verify signatures\n * @param {Boolean} [options.expectSigned=false] - If true, verification throws if the message is not signed with the provided publicKeys\n * @param {'utf8'|'binary'} [options.format='utf8'] - Whether to return data as a string(Stream) or Uint8Array(Stream). If 'utf8' (the default), also normalize newlines.\n * @param {Signature} [options.signature] - Detached signature for verification\n * @param {Date} [options.date=current date] - Use the given date for verification instead of the current time\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Object>} Object containing verified message in the form:\n *\n *     {\n *       data: MaybeStream<String>, (if `message` was a CleartextMessage)\n *       data: MaybeStream<Uint8Array>, (if `message` was a Message)\n *       signatures: [\n *         {\n *           keyID: module:type/keyid~KeyID,\n *           verified: Promise<true>,\n *           signature: Promise<Signature>\n *         }, ...\n *       ]\n *     }\n *\n *     where `signatures` contains a separate entry for each signature packet found in the input message.\n * @async\n * @static\n */\nexport async function verify({ message, verificationKeys, expectSigned = false, format = 'utf8', signature = null, date = new Date(), config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  checkCleartextOrMessage(message); verificationKeys = toArray(verificationKeys);\n  if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.verify, pass `verificationKeys` instead');\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if (message instanceof CleartextMessage && format === 'binary') throw new Error(\"Can't return cleartext message data as binary\");\n  if (message instanceof CleartextMessage && signature) throw new Error(\"Can't verify detached cleartext signature\");\n\n  try {\n    const result = {};\n    if (signature) {\n      result.signatures = await message.verifyDetached(signature, verificationKeys, date, config);\n    } else {\n      result.signatures = await message.verify(verificationKeys, date, config);\n    }\n    result.data = format === 'binary' ? message.getLiteralData() : message.getText();\n    if (message.fromStream && !signature) linkStreams(result, message);\n    if (expectSigned) {\n      if (result.signatures.length === 0) {\n        throw new Error('Message is not signed');\n      }\n      result.data = stream.concat([\n        result.data,\n        stream.fromAsync(async () => {\n          await util.anyPromise(result.signatures.map(sig => sig.verified));\n        })\n      ]);\n    }\n    result.data = await convertStream(result.data, message.fromStream, format);\n    return result;\n  } catch (err) {\n    throw util.wrapError('Error verifying signed message', err);\n  }\n}\n\n\n///////////////////////////////////////////////\n//                                           //\n//   Session key encryption and decryption   //\n//                                           //\n///////////////////////////////////////////////\n\n/**\n * Generate a new session key object, taking the algorithm preferences of the passed public keys into account, if any.\n * @param {Object} options\n * @param {PublicKey|PublicKey[]} [options.encryptionKeys] - Array of public keys or single key used to select algorithm preferences for. If no keys are given, the algorithm will be [config.preferredSymmetricAlgorithm]{@link module:config.preferredSymmetricAlgorithm}\n * @param {Date} [options.date=current date] - Date to select algorithm preferences at\n * @param {Object|Object[]} [options.encryptionUserIDs=primary user IDs] - User IDs to select algorithm preferences for\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<{ data: Uint8Array, algorithm: String }>} Object with session key data and algorithm.\n * @async\n * @static\n */\nexport async function generateSessionKey({ encryptionKeys, date = new Date(), encryptionUserIDs = [], config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  encryptionKeys = toArray(encryptionKeys); encryptionUserIDs = toArray(encryptionUserIDs);\n  if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.generateSessionKey, pass `encryptionKeys` instead');\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  try {\n    const sessionKeys = await Message.generateSessionKey(encryptionKeys, date, encryptionUserIDs, config);\n    return sessionKeys;\n  } catch (err) {\n    throw util.wrapError('Error generating session key', err);\n  }\n}\n\n/**\n * Encrypt a symmetric session key with public keys, passwords, or both at once.\n * At least one of `encryptionKeys` or `passwords` must be specified.\n * @param {Object} options\n * @param {Uint8Array} options.data - The session key to be encrypted e.g. 16 random bytes (for aes128)\n * @param {String} options.algorithm - Algorithm of the symmetric session key e.g. 'aes128' or 'aes256'\n * @param {String} [options.aeadAlgorithm] - AEAD algorithm, e.g. 'eax' or 'ocb'\n * @param {PublicKey|PublicKey[]} [options.encryptionKeys] - Array of public keys or single key, used to encrypt the key\n * @param {String|String[]} [options.passwords] - Passwords for the message\n * @param {'armored'|'binary'} [options.format='armored'] - Format of the returned value\n * @param {Boolean} [options.wildcard=false] - Use a key ID of 0 instead of the public key IDs\n * @param {KeyID|KeyID[]} [options.encryptionKeyIDs=latest-created valid encryption (sub)keys] - Array of key IDs to use for encryption. Each encryptionKeyIDs[i] corresponds to encryptionKeys[i]\n * @param {Date} [options.date=current date] - Override the date\n * @param {Object|Object[]} [options.encryptionUserIDs=primary user IDs] - Array of user IDs to encrypt for, one per key in `encryptionKeys`, e.g. `[{ name: 'Phil Zimmermann', email: 'phil@openpgp.org' }]`\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<String|Uint8Array>} Encrypted session keys (string if `armor` was true, the default; Uint8Array if `armor` was false).\n * @async\n * @static\n */\nexport async function encryptSessionKey({ data, algorithm, aeadAlgorithm, encryptionKeys, passwords, format = 'armored', wildcard = false, encryptionKeyIDs = [], date = new Date(), encryptionUserIDs = [], config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  checkBinary(data); checkString(algorithm, 'algorithm'); checkOutputMessageFormat(format);\n  encryptionKeys = toArray(encryptionKeys); passwords = toArray(passwords); encryptionKeyIDs = toArray(encryptionKeyIDs); encryptionUserIDs = toArray(encryptionUserIDs);\n  if (rest.publicKeys) throw new Error('The `publicKeys` option has been removed from openpgp.encryptSessionKey, pass `encryptionKeys` instead');\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  if ((!encryptionKeys || encryptionKeys.length === 0) && (!passwords || passwords.length === 0)) {\n    throw new Error('No encryption keys or passwords provided.');\n  }\n\n  try {\n    const message = await Message.encryptSessionKey(data, algorithm, aeadAlgorithm, encryptionKeys, passwords, wildcard, encryptionKeyIDs, date, encryptionUserIDs, config);\n    return formatObject(message, format, config);\n  } catch (err) {\n    throw util.wrapError('Error encrypting session key', err);\n  }\n}\n\n/**\n * Decrypt symmetric session keys using private keys or passwords (not both).\n * One of `decryptionKeys` or `passwords` must be specified.\n * @param {Object} options\n * @param {Message} options.message - A message object containing the encrypted session key packets\n * @param {PrivateKey|PrivateKey[]} [options.decryptionKeys] - Private keys with decrypted secret key data\n * @param {String|String[]} [options.passwords] - Passwords to decrypt the session key\n * @param {Date} [options.date] - Date to use for key verification instead of the current time\n * @param {Object} [options.config] - Custom configuration settings to overwrite those in [config]{@link module:config}\n * @returns {Promise<Object[]>} Array of decrypted session key, algorithm pairs in the form:\n *                                            { data:Uint8Array, algorithm:String }\n * @throws if no session key could be found or decrypted\n * @async\n * @static\n */\nexport async function decryptSessionKeys({ message, decryptionKeys, passwords, date = new Date(), config, ...rest }) {\n  config = { ...defaultConfig, ...config }; checkConfig(config);\n  checkMessage(message); decryptionKeys = toArray(decryptionKeys); passwords = toArray(passwords);\n  if (rest.privateKeys) throw new Error('The `privateKeys` option has been removed from openpgp.decryptSessionKeys, pass `decryptionKeys` instead');\n  const unknownOptions = Object.keys(rest); if (unknownOptions.length > 0) throw new Error(`Unknown option: ${unknownOptions.join(', ')}`);\n\n  try {\n    const sessionKeys = await message.decryptSessionKeys(decryptionKeys, passwords, date, config);\n    return sessionKeys;\n  } catch (err) {\n    throw util.wrapError('Error decrypting session keys', err);\n  }\n}\n\n\n//////////////////////////\n//                      //\n//   Helper functions   //\n//                      //\n//////////////////////////\n\n\n/**\n * Input validation\n * @private\n */\nfunction checkString(data, name) {\n  if (!util.isString(data)) {\n    throw new Error('Parameter [' + (name || 'data') + '] must be of type String');\n  }\n}\nfunction checkBinary(data, name) {\n  if (!util.isUint8Array(data)) {\n    throw new Error('Parameter [' + (name || 'data') + '] must be of type Uint8Array');\n  }\n}\nfunction checkMessage(message) {\n  if (!(message instanceof Message)) {\n    throw new Error('Parameter [message] needs to be of type Message');\n  }\n}\nfunction checkCleartextOrMessage(message) {\n  if (!(message instanceof CleartextMessage) && !(message instanceof Message)) {\n    throw new Error('Parameter [message] needs to be of type Message or CleartextMessage');\n  }\n}\nfunction checkOutputMessageFormat(format) {\n  if (format !== 'armored' && format !== 'binary' && format !== 'object') {\n    throw new Error(`Unsupported format ${format}`);\n  }\n}\nconst defaultConfigPropsCount = Object.keys(defaultConfig).length;\nfunction checkConfig(config) {\n  const inputConfigProps = Object.keys(config);\n  if (inputConfigProps.length !== defaultConfigPropsCount) {\n    for (const inputProp of inputConfigProps) {\n      if (defaultConfig[inputProp] === undefined) {\n        throw new Error(`Unknown config property: ${inputProp}`);\n      }\n    }\n  }\n}\n\n/**\n * Normalize parameter to an array if it is not undefined.\n * @param {Object} param - the parameter to be normalized\n * @returns {Array<Object>|undefined} The resulting array or undefined.\n * @private\n */\nfunction toArray(param) {\n  if (param && !util.isArray(param)) {\n    param = [param];\n  }\n  return param;\n}\n\n/**\n * Convert data to or from Stream\n * @param {Object} data - the data to convert\n * @param {'web'|'ponyfill'|'node'|false} streaming - Whether to return a ReadableStream, and of what type\n * @param {'utf8'|'binary'} [encoding] - How to return data in Node Readable streams\n * @returns {Promise<Object>} The data in the respective format.\n * @async\n * @private\n */\nasync function convertStream(data, streaming, encoding = 'utf8') {\n  const streamType = util.isStream(data);\n  if (streamType === 'array') {\n    return stream.readToEnd(data);\n  }\n  if (streaming === 'node') {\n    data = stream.webToNode(data);\n    if (encoding !== 'binary') data.setEncoding(encoding);\n    return data;\n  }\n  if (streaming === 'web' && streamType === 'ponyfill') {\n    return stream.toNativeReadable(data);\n  }\n  return data;\n}\n\n/**\n * Link result.data to the message stream for cancellation.\n * Also, forward errors in the message to result.data.\n * @param {Object} result - the data to convert\n * @param {Message} message - message object\n * @returns {Object}\n * @private\n */\nfunction linkStreams(result, message) {\n  result.data = stream.transformPair(message.packets.stream, async (readable, writable) => {\n    await stream.pipe(result.data, writable, {\n      preventClose: true\n    });\n    const writer = stream.getWriter(writable);\n    try {\n      // Forward errors in the message stream to result.data.\n      await stream.readToEnd(readable, _ => _);\n      await writer.close();\n    } catch (e) {\n      await writer.abort(e);\n    }\n  });\n}\n\n/**\n * Convert the object to the given format\n * @param {Key|Message} object\n * @param {'armored'|'binary'|'object'} format\n * @param {Object} config - Full configuration\n * @returns {String|Uint8Array|Object}\n */\nfunction formatObject(object, format, config) {\n  switch (format) {\n    case 'object':\n      return object;\n    case 'armored':\n      return object.armor(config);\n    case 'binary':\n      return object.write();\n    default:\n      throw new Error(`Unsupported format ${format}`);\n  }\n}\n","/**\n * web-streams-polyfill v3.0.3\n */\n/// <reference lib=\"es2015.symbol\" />\nconst SymbolPolyfill = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ?\n    Symbol :\n    description => `Symbol(${description})`;\n\n/// <reference lib=\"dom\" />\nfunction noop() {\n    return undefined;\n}\nfunction getGlobals() {\n    if (typeof self !== 'undefined') {\n        return self;\n    }\n    else if (typeof window !== 'undefined') {\n        return window;\n    }\n    else if (typeof global !== 'undefined') {\n        return global;\n    }\n    return undefined;\n}\nconst globals = getGlobals();\n\nfunction typeIsObject(x) {\n    return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\nconst rethrowAssertionErrorRejection = noop;\n\nconst originalPromise = Promise;\nconst originalPromiseThen = Promise.prototype.then;\nconst originalPromiseResolve = Promise.resolve.bind(originalPromise);\nconst originalPromiseReject = Promise.reject.bind(originalPromise);\nfunction newPromise(executor) {\n    return new originalPromise(executor);\n}\nfunction promiseResolvedWith(value) {\n    return originalPromiseResolve(value);\n}\nfunction promiseRejectedWith(reason) {\n    return originalPromiseReject(reason);\n}\nfunction PerformPromiseThen(promise, onFulfilled, onRejected) {\n    // There doesn't appear to be any way to correctly emulate the behaviour from JavaScript, so this is just an\n    // approximation.\n    return originalPromiseThen.call(promise, onFulfilled, onRejected);\n}\nfunction uponPromise(promise, onFulfilled, onRejected) {\n    PerformPromiseThen(PerformPromiseThen(promise, onFulfilled, onRejected), undefined, rethrowAssertionErrorRejection);\n}\nfunction uponFulfillment(promise, onFulfilled) {\n    uponPromise(promise, onFulfilled);\n}\nfunction uponRejection(promise, onRejected) {\n    uponPromise(promise, undefined, onRejected);\n}\nfunction transformPromiseWith(promise, fulfillmentHandler, rejectionHandler) {\n    return PerformPromiseThen(promise, fulfillmentHandler, rejectionHandler);\n}\nfunction setPromiseIsHandledToTrue(promise) {\n    PerformPromiseThen(promise, undefined, rethrowAssertionErrorRejection);\n}\nconst queueMicrotask = (() => {\n    const globalQueueMicrotask = globals && globals.queueMicrotask;\n    if (typeof globalQueueMicrotask === 'function') {\n        return globalQueueMicrotask;\n    }\n    const resolvedPromise = promiseResolvedWith(undefined);\n    return (fn) => PerformPromiseThen(resolvedPromise, fn);\n})();\nfunction reflectCall(F, V, args) {\n    if (typeof F !== 'function') {\n        throw new TypeError('Argument is not a function');\n    }\n    return Function.prototype.apply.call(F, V, args);\n}\nfunction promiseCall(F, V, args) {\n    try {\n        return promiseResolvedWith(reflectCall(F, V, args));\n    }\n    catch (value) {\n        return promiseRejectedWith(value);\n    }\n}\n\n// Original from Chromium\n// https://chromium.googlesource.com/chromium/src/+/0aee4434a4dba42a42abaea9bfbc0cd196a63bc1/third_party/blink/renderer/core/streams/SimpleQueue.js\nconst QUEUE_MAX_ARRAY_SIZE = 16384;\n/**\n * Simple queue structure.\n *\n * Avoids scalability issues with using a packed array directly by using\n * multiple arrays in a linked list and keeping the array size bounded.\n */\nclass SimpleQueue {\n    constructor() {\n        this._cursor = 0;\n        this._size = 0;\n        // _front and _back are always defined.\n        this._front = {\n            _elements: [],\n            _next: undefined\n        };\n        this._back = this._front;\n        // The cursor is used to avoid calling Array.shift().\n        // It contains the index of the front element of the array inside the\n        // front-most node. It is always in the range [0, QUEUE_MAX_ARRAY_SIZE).\n        this._cursor = 0;\n        // When there is only one node, size === elements.length - cursor.\n        this._size = 0;\n    }\n    get length() {\n        return this._size;\n    }\n    // For exception safety, this method is structured in order:\n    // 1. Read state\n    // 2. Calculate required state mutations\n    // 3. Perform state mutations\n    push(element) {\n        const oldBack = this._back;\n        let newBack = oldBack;\n        if (oldBack._elements.length === QUEUE_MAX_ARRAY_SIZE - 1) {\n            newBack = {\n                _elements: [],\n                _next: undefined\n            };\n        }\n        // push() is the mutation most likely to throw an exception, so it\n        // goes first.\n        oldBack._elements.push(element);\n        if (newBack !== oldBack) {\n            this._back = newBack;\n            oldBack._next = newBack;\n        }\n        ++this._size;\n    }\n    // Like push(), shift() follows the read -> calculate -> mutate pattern for\n    // exception safety.\n    shift() { // must not be called on an empty queue\n        const oldFront = this._front;\n        let newFront = oldFront;\n        const oldCursor = this._cursor;\n        let newCursor = oldCursor + 1;\n        const elements = oldFront._elements;\n        const element = elements[oldCursor];\n        if (newCursor === QUEUE_MAX_ARRAY_SIZE) {\n            newFront = oldFront._next;\n            newCursor = 0;\n        }\n        // No mutations before this point.\n        --this._size;\n        this._cursor = newCursor;\n        if (oldFront !== newFront) {\n            this._front = newFront;\n        }\n        // Permit shifted element to be garbage collected.\n        elements[oldCursor] = undefined;\n        return element;\n    }\n    // The tricky thing about forEach() is that it can be called\n    // re-entrantly. The queue may be mutated inside the callback. It is easy to\n    // see that push() within the callback has no negative effects since the end\n    // of the queue is checked for on every iteration. If shift() is called\n    // repeatedly within the callback then the next iteration may return an\n    // element that has been removed. In this case the callback will be called\n    // with undefined values until we either \"catch up\" with elements that still\n    // exist or reach the back of the queue.\n    forEach(callback) {\n        let i = this._cursor;\n        let node = this._front;\n        let elements = node._elements;\n        while (i !== elements.length || node._next !== undefined) {\n            if (i === elements.length) {\n                node = node._next;\n                elements = node._elements;\n                i = 0;\n                if (elements.length === 0) {\n                    break;\n                }\n            }\n            callback(elements[i]);\n            ++i;\n        }\n    }\n    // Return the element that would be returned if shift() was called now,\n    // without modifying the queue.\n    peek() { // must not be called on an empty queue\n        const front = this._front;\n        const cursor = this._cursor;\n        return front._elements[cursor];\n    }\n}\n\nfunction ReadableStreamReaderGenericInitialize(reader, stream) {\n    reader._ownerReadableStream = stream;\n    stream._reader = reader;\n    if (stream._state === 'readable') {\n        defaultReaderClosedPromiseInitialize(reader);\n    }\n    else if (stream._state === 'closed') {\n        defaultReaderClosedPromiseInitializeAsResolved(reader);\n    }\n    else {\n        defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);\n    }\n}\n// A client of ReadableStreamDefaultReader and ReadableStreamBYOBReader may use these functions directly to bypass state\n// check.\nfunction ReadableStreamReaderGenericCancel(reader, reason) {\n    const stream = reader._ownerReadableStream;\n    return ReadableStreamCancel(stream, reason);\n}\nfunction ReadableStreamReaderGenericRelease(reader) {\n    if (reader._ownerReadableStream._state === 'readable') {\n        defaultReaderClosedPromiseReject(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n    }\n    else {\n        defaultReaderClosedPromiseResetToRejected(reader, new TypeError(`Reader was released and can no longer be used to monitor the stream's closedness`));\n    }\n    reader._ownerReadableStream._reader = undefined;\n    reader._ownerReadableStream = undefined;\n}\n// Helper functions for the readers.\nfunction readerLockException(name) {\n    return new TypeError('Cannot ' + name + ' a stream using a released reader');\n}\n// Helper functions for the ReadableStreamDefaultReader.\nfunction defaultReaderClosedPromiseInitialize(reader) {\n    reader._closedPromise = newPromise((resolve, reject) => {\n        reader._closedPromise_resolve = resolve;\n        reader._closedPromise_reject = reject;\n    });\n}\nfunction defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {\n    defaultReaderClosedPromiseInitialize(reader);\n    defaultReaderClosedPromiseReject(reader, reason);\n}\nfunction defaultReaderClosedPromiseInitializeAsResolved(reader) {\n    defaultReaderClosedPromiseInitialize(reader);\n    defaultReaderClosedPromiseResolve(reader);\n}\nfunction defaultReaderClosedPromiseReject(reader, reason) {\n    if (reader._closedPromise_reject === undefined) {\n        return;\n    }\n    setPromiseIsHandledToTrue(reader._closedPromise);\n    reader._closedPromise_reject(reason);\n    reader._closedPromise_resolve = undefined;\n    reader._closedPromise_reject = undefined;\n}\nfunction defaultReaderClosedPromiseResetToRejected(reader, reason) {\n    defaultReaderClosedPromiseInitializeAsRejected(reader, reason);\n}\nfunction defaultReaderClosedPromiseResolve(reader) {\n    if (reader._closedPromise_resolve === undefined) {\n        return;\n    }\n    reader._closedPromise_resolve(undefined);\n    reader._closedPromise_resolve = undefined;\n    reader._closedPromise_reject = undefined;\n}\n\nconst AbortSteps = SymbolPolyfill('[[AbortSteps]]');\nconst ErrorSteps = SymbolPolyfill('[[ErrorSteps]]');\nconst CancelSteps = SymbolPolyfill('[[CancelSteps]]');\nconst PullSteps = SymbolPolyfill('[[PullSteps]]');\n\n/// <reference lib=\"es2015.core\" />\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isFinite#Polyfill\nconst NumberIsFinite = Number.isFinite || function (x) {\n    return typeof x === 'number' && isFinite(x);\n};\n\n/// <reference lib=\"es2015.core\" />\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc#Polyfill\nconst MathTrunc = Math.trunc || function (v) {\n    return v < 0 ? Math.ceil(v) : Math.floor(v);\n};\n\n// https://heycam.github.io/webidl/#idl-dictionaries\nfunction isDictionary(x) {\n    return typeof x === 'object' || typeof x === 'function';\n}\nfunction assertDictionary(obj, context) {\n    if (obj !== undefined && !isDictionary(obj)) {\n        throw new TypeError(`${context} is not an object.`);\n    }\n}\n// https://heycam.github.io/webidl/#idl-callback-functions\nfunction assertFunction(x, context) {\n    if (typeof x !== 'function') {\n        throw new TypeError(`${context} is not a function.`);\n    }\n}\n// https://heycam.github.io/webidl/#idl-object\nfunction isObject(x) {\n    return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\nfunction assertObject(x, context) {\n    if (!isObject(x)) {\n        throw new TypeError(`${context} is not an object.`);\n    }\n}\nfunction assertRequiredArgument(x, position, context) {\n    if (x === undefined) {\n        throw new TypeError(`Parameter ${position} is required in '${context}'.`);\n    }\n}\nfunction assertRequiredField(x, field, context) {\n    if (x === undefined) {\n        throw new TypeError(`${field} is required in '${context}'.`);\n    }\n}\n// https://heycam.github.io/webidl/#idl-unrestricted-double\nfunction convertUnrestrictedDouble(value) {\n    return Number(value);\n}\nfunction censorNegativeZero(x) {\n    return x === 0 ? 0 : x;\n}\nfunction integerPart(x) {\n    return censorNegativeZero(MathTrunc(x));\n}\n// https://heycam.github.io/webidl/#idl-unsigned-long-long\nfunction convertUnsignedLongLongWithEnforceRange(value, context) {\n    const lowerBound = 0;\n    const upperBound = Number.MAX_SAFE_INTEGER;\n    let x = Number(value);\n    x = censorNegativeZero(x);\n    if (!NumberIsFinite(x)) {\n        throw new TypeError(`${context} is not a finite number`);\n    }\n    x = integerPart(x);\n    if (x < lowerBound || x > upperBound) {\n        throw new TypeError(`${context} is outside the accepted range of ${lowerBound} to ${upperBound}, inclusive`);\n    }\n    if (!NumberIsFinite(x) || x === 0) {\n        return 0;\n    }\n    // TODO Use BigInt if supported?\n    // let xBigInt = BigInt(integerPart(x));\n    // xBigInt = BigInt.asUintN(64, xBigInt);\n    // return Number(xBigInt);\n    return x;\n}\n\nfunction assertReadableStream(x, context) {\n    if (!IsReadableStream(x)) {\n        throw new TypeError(`${context} is not a ReadableStream.`);\n    }\n}\n\n// Abstract operations for the ReadableStream.\nfunction AcquireReadableStreamDefaultReader(stream) {\n    return new ReadableStreamDefaultReader(stream);\n}\n// ReadableStream API exposed for controllers.\nfunction ReadableStreamAddReadRequest(stream, readRequest) {\n    stream._reader._readRequests.push(readRequest);\n}\nfunction ReadableStreamFulfillReadRequest(stream, chunk, done) {\n    const reader = stream._reader;\n    const readRequest = reader._readRequests.shift();\n    if (done) {\n        readRequest._closeSteps();\n    }\n    else {\n        readRequest._chunkSteps(chunk);\n    }\n}\nfunction ReadableStreamGetNumReadRequests(stream) {\n    return stream._reader._readRequests.length;\n}\nfunction ReadableStreamHasDefaultReader(stream) {\n    const reader = stream._reader;\n    if (reader === undefined) {\n        return false;\n    }\n    if (!IsReadableStreamDefaultReader(reader)) {\n        return false;\n    }\n    return true;\n}\n/**\n * A default reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nclass ReadableStreamDefaultReader {\n    constructor(stream) {\n        assertRequiredArgument(stream, 1, 'ReadableStreamDefaultReader');\n        assertReadableStream(stream, 'First parameter');\n        if (IsReadableStreamLocked(stream)) {\n            throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n        }\n        ReadableStreamReaderGenericInitialize(this, stream);\n        this._readRequests = new SimpleQueue();\n    }\n    /**\n     * Returns a promise that will be fulfilled when the stream becomes closed,\n     * or rejected if the stream ever errors or the reader's lock is released before the stream finishes closing.\n     */\n    get closed() {\n        if (!IsReadableStreamDefaultReader(this)) {\n            return promiseRejectedWith(defaultReaderBrandCheckException('closed'));\n        }\n        return this._closedPromise;\n    }\n    /**\n     * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n     */\n    cancel(reason = undefined) {\n        if (!IsReadableStreamDefaultReader(this)) {\n            return promiseRejectedWith(defaultReaderBrandCheckException('cancel'));\n        }\n        if (this._ownerReadableStream === undefined) {\n            return promiseRejectedWith(readerLockException('cancel'));\n        }\n        return ReadableStreamReaderGenericCancel(this, reason);\n    }\n    /**\n     * Returns a promise that allows access to the next chunk from the stream's internal queue, if available.\n     *\n     * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n     */\n    read() {\n        if (!IsReadableStreamDefaultReader(this)) {\n            return promiseRejectedWith(defaultReaderBrandCheckException('read'));\n        }\n        if (this._ownerReadableStream === undefined) {\n            return promiseRejectedWith(readerLockException('read from'));\n        }\n        let resolvePromise;\n        let rejectPromise;\n        const promise = newPromise((resolve, reject) => {\n            resolvePromise = resolve;\n            rejectPromise = reject;\n        });\n        const readRequest = {\n            _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n            _closeSteps: () => resolvePromise({ value: undefined, done: true }),\n            _errorSteps: e => rejectPromise(e)\n        };\n        ReadableStreamDefaultReaderRead(this, readRequest);\n        return promise;\n    }\n    /**\n     * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n     * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n     * from now on; otherwise, the reader will appear closed.\n     *\n     * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n     * the reader's {@link ReadableStreamDefaultReader.read | read()} method has not yet been settled. Attempting to\n     * do so will throw a `TypeError` and leave the reader locked to the stream.\n     */\n    releaseLock() {\n        if (!IsReadableStreamDefaultReader(this)) {\n            throw defaultReaderBrandCheckException('releaseLock');\n        }\n        if (this._ownerReadableStream === undefined) {\n            return;\n        }\n        if (this._readRequests.length > 0) {\n            throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n        }\n        ReadableStreamReaderGenericRelease(this);\n    }\n}\nObject.defineProperties(ReadableStreamDefaultReader.prototype, {\n    cancel: { enumerable: true },\n    read: { enumerable: true },\n    releaseLock: { enumerable: true },\n    closed: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(ReadableStreamDefaultReader.prototype, SymbolPolyfill.toStringTag, {\n        value: 'ReadableStreamDefaultReader',\n        configurable: true\n    });\n}\n// Abstract operations for the readers.\nfunction IsReadableStreamDefaultReader(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {\n        return false;\n    }\n    return true;\n}\nfunction ReadableStreamDefaultReaderRead(reader, readRequest) {\n    const stream = reader._ownerReadableStream;\n    stream._disturbed = true;\n    if (stream._state === 'closed') {\n        readRequest._closeSteps();\n    }\n    else if (stream._state === 'errored') {\n        readRequest._errorSteps(stream._storedError);\n    }\n    else {\n        stream._readableStreamController[PullSteps](readRequest);\n    }\n}\n// Helper functions for the ReadableStreamDefaultReader.\nfunction defaultReaderBrandCheckException(name) {\n    return new TypeError(`ReadableStreamDefaultReader.prototype.${name} can only be used on a ReadableStreamDefaultReader`);\n}\n\n/// <reference lib=\"es2018.asynciterable\" />\nlet AsyncIteratorPrototype;\nif (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n    // We're running inside a ES2018+ environment, but we're compiling to an older syntax.\n    // We cannot access %AsyncIteratorPrototype% without non-ES2018 syntax, but we can re-create it.\n    AsyncIteratorPrototype = {\n        // 25.1.3.1 %AsyncIteratorPrototype% [ @@asyncIterator ] ( )\n        // https://tc39.github.io/ecma262/#sec-asynciteratorprototype-asynciterator\n        [SymbolPolyfill.asyncIterator]() {\n            return this;\n        }\n    };\n    Object.defineProperty(AsyncIteratorPrototype, SymbolPolyfill.asyncIterator, { enumerable: false });\n}\n\n/// <reference lib=\"es2018.asynciterable\" />\nclass ReadableStreamAsyncIteratorImpl {\n    constructor(reader, preventCancel) {\n        this._ongoingPromise = undefined;\n        this._isFinished = false;\n        this._reader = reader;\n        this._preventCancel = preventCancel;\n    }\n    next() {\n        const nextSteps = () => this._nextSteps();\n        this._ongoingPromise = this._ongoingPromise ?\n            transformPromiseWith(this._ongoingPromise, nextSteps, nextSteps) :\n            nextSteps();\n        return this._ongoingPromise;\n    }\n    return(value) {\n        const returnSteps = () => this._returnSteps(value);\n        return this._ongoingPromise ?\n            transformPromiseWith(this._ongoingPromise, returnSteps, returnSteps) :\n            returnSteps();\n    }\n    _nextSteps() {\n        if (this._isFinished) {\n            return Promise.resolve({ value: undefined, done: true });\n        }\n        const reader = this._reader;\n        if (reader._ownerReadableStream === undefined) {\n            return promiseRejectedWith(readerLockException('iterate'));\n        }\n        let resolvePromise;\n        let rejectPromise;\n        const promise = newPromise((resolve, reject) => {\n            resolvePromise = resolve;\n            rejectPromise = reject;\n        });\n        const readRequest = {\n            _chunkSteps: chunk => {\n                this._ongoingPromise = undefined;\n                // This needs to be delayed by one microtask, otherwise we stop pulling too early which breaks a test.\n                // FIXME Is this a bug in the specification, or in the test?\n                queueMicrotask(() => resolvePromise({ value: chunk, done: false }));\n            },\n            _closeSteps: () => {\n                this._ongoingPromise = undefined;\n                this._isFinished = true;\n                ReadableStreamReaderGenericRelease(reader);\n                resolvePromise({ value: undefined, done: true });\n            },\n            _errorSteps: reason => {\n                this._ongoingPromise = undefined;\n                this._isFinished = true;\n                ReadableStreamReaderGenericRelease(reader);\n                rejectPromise(reason);\n            }\n        };\n        ReadableStreamDefaultReaderRead(reader, readRequest);\n        return promise;\n    }\n    _returnSteps(value) {\n        if (this._isFinished) {\n            return Promise.resolve({ value, done: true });\n        }\n        this._isFinished = true;\n        const reader = this._reader;\n        if (reader._ownerReadableStream === undefined) {\n            return promiseRejectedWith(readerLockException('finish iterating'));\n        }\n        if (!this._preventCancel) {\n            const result = ReadableStreamReaderGenericCancel(reader, value);\n            ReadableStreamReaderGenericRelease(reader);\n            return transformPromiseWith(result, () => ({ value, done: true }));\n        }\n        ReadableStreamReaderGenericRelease(reader);\n        return promiseResolvedWith({ value, done: true });\n    }\n}\nconst ReadableStreamAsyncIteratorPrototype = {\n    next() {\n        if (!IsReadableStreamAsyncIterator(this)) {\n            return promiseRejectedWith(streamAsyncIteratorBrandCheckException('next'));\n        }\n        return this._asyncIteratorImpl.next();\n    },\n    return(value) {\n        if (!IsReadableStreamAsyncIterator(this)) {\n            return promiseRejectedWith(streamAsyncIteratorBrandCheckException('return'));\n        }\n        return this._asyncIteratorImpl.return(value);\n    }\n};\nif (AsyncIteratorPrototype !== undefined) {\n    Object.setPrototypeOf(ReadableStreamAsyncIteratorPrototype, AsyncIteratorPrototype);\n}\n// Abstract operations for the ReadableStream.\nfunction AcquireReadableStreamAsyncIterator(stream, preventCancel) {\n    const reader = AcquireReadableStreamDefaultReader(stream);\n    const impl = new ReadableStreamAsyncIteratorImpl(reader, preventCancel);\n    const iterator = Object.create(ReadableStreamAsyncIteratorPrototype);\n    iterator._asyncIteratorImpl = impl;\n    return iterator;\n}\nfunction IsReadableStreamAsyncIterator(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_asyncIteratorImpl')) {\n        return false;\n    }\n    return true;\n}\n// Helper functions for the ReadableStream.\nfunction streamAsyncIteratorBrandCheckException(name) {\n    return new TypeError(`ReadableStreamAsyncIterator.${name} can only be used on a ReadableSteamAsyncIterator`);\n}\n\n/// <reference lib=\"es2015.core\" />\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN#Polyfill\nconst NumberIsNaN = Number.isNaN || function (x) {\n    // eslint-disable-next-line no-self-compare\n    return x !== x;\n};\n\nfunction IsFiniteNonNegativeNumber(v) {\n    if (!IsNonNegativeNumber(v)) {\n        return false;\n    }\n    if (v === Infinity) {\n        return false;\n    }\n    return true;\n}\nfunction IsNonNegativeNumber(v) {\n    if (typeof v !== 'number') {\n        return false;\n    }\n    if (NumberIsNaN(v)) {\n        return false;\n    }\n    if (v < 0) {\n        return false;\n    }\n    return true;\n}\n\nfunction DequeueValue(container) {\n    const pair = container._queue.shift();\n    container._queueTotalSize -= pair.size;\n    if (container._queueTotalSize < 0) {\n        container._queueTotalSize = 0;\n    }\n    return pair.value;\n}\nfunction EnqueueValueWithSize(container, value, size) {\n    size = Number(size);\n    if (!IsFiniteNonNegativeNumber(size)) {\n        throw new RangeError('Size must be a finite, non-NaN, non-negative number.');\n    }\n    container._queue.push({ value, size });\n    container._queueTotalSize += size;\n}\nfunction PeekQueueValue(container) {\n    const pair = container._queue.peek();\n    return pair.value;\n}\nfunction ResetQueue(container) {\n    container._queue = new SimpleQueue();\n    container._queueTotalSize = 0;\n}\n\nfunction CreateArrayFromList(elements) {\n    // We use arrays to represent lists, so this is basically a no-op.\n    // Do a slice though just in case we happen to depend on the unique-ness.\n    return elements.slice();\n}\nfunction CopyDataBlockBytes(dest, destOffset, src, srcOffset, n) {\n    new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);\n}\n// Not implemented correctly\nfunction TransferArrayBuffer(O) {\n    return O;\n}\n// Not implemented correctly\nfunction IsDetachedBuffer(O) {\n    return false;\n}\n\n/**\n * A pull-into request in a {@link ReadableByteStreamController}.\n *\n * @public\n */\nclass ReadableStreamBYOBRequest {\n    constructor() {\n        throw new TypeError('Illegal constructor');\n    }\n    /**\n     * Returns the view for writing in to, or `null` if the BYOB request has already been responded to.\n     */\n    get view() {\n        if (!IsReadableStreamBYOBRequest(this)) {\n            throw byobRequestBrandCheckException('view');\n        }\n        return this._view;\n    }\n    respond(bytesWritten) {\n        if (!IsReadableStreamBYOBRequest(this)) {\n            throw byobRequestBrandCheckException('respond');\n        }\n        assertRequiredArgument(bytesWritten, 1, 'respond');\n        bytesWritten = convertUnsignedLongLongWithEnforceRange(bytesWritten, 'First parameter');\n        if (this._associatedReadableByteStreamController === undefined) {\n            throw new TypeError('This BYOB request has been invalidated');\n        }\n        if (IsDetachedBuffer(this._view.buffer)) ;\n        ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);\n    }\n    respondWithNewView(view) {\n        if (!IsReadableStreamBYOBRequest(this)) {\n            throw byobRequestBrandCheckException('respondWithNewView');\n        }\n        assertRequiredArgument(view, 1, 'respondWithNewView');\n        if (!ArrayBuffer.isView(view)) {\n            throw new TypeError('You can only respond with array buffer views');\n        }\n        if (view.byteLength === 0) {\n            throw new TypeError('chunk must have non-zero byteLength');\n        }\n        if (view.buffer.byteLength === 0) {\n            throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n        }\n        if (this._associatedReadableByteStreamController === undefined) {\n            throw new TypeError('This BYOB request has been invalidated');\n        }\n        ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);\n    }\n}\nObject.defineProperties(ReadableStreamBYOBRequest.prototype, {\n    respond: { enumerable: true },\n    respondWithNewView: { enumerable: true },\n    view: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(ReadableStreamBYOBRequest.prototype, SymbolPolyfill.toStringTag, {\n        value: 'ReadableStreamBYOBRequest',\n        configurable: true\n    });\n}\n/**\n * Allows control of a {@link ReadableStream | readable byte stream}'s state and internal queue.\n *\n * @public\n */\nclass ReadableByteStreamController {\n    constructor() {\n        throw new TypeError('Illegal constructor');\n    }\n    /**\n     * Returns the current BYOB pull request, or `null` if there isn't one.\n     */\n    get byobRequest() {\n        if (!IsReadableByteStreamController(this)) {\n            throw byteStreamControllerBrandCheckException('byobRequest');\n        }\n        if (this._byobRequest === null && this._pendingPullIntos.length > 0) {\n            const firstDescriptor = this._pendingPullIntos.peek();\n            const view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);\n            const byobRequest = Object.create(ReadableStreamBYOBRequest.prototype);\n            SetUpReadableStreamBYOBRequest(byobRequest, this, view);\n            this._byobRequest = byobRequest;\n        }\n        return this._byobRequest;\n    }\n    /**\n     * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n     * over-full. An underlying byte source ought to use this information to determine when and how to apply backpressure.\n     */\n    get desiredSize() {\n        if (!IsReadableByteStreamController(this)) {\n            throw byteStreamControllerBrandCheckException('desiredSize');\n        }\n        return ReadableByteStreamControllerGetDesiredSize(this);\n    }\n    /**\n     * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n     * the stream, but once those are read, the stream will become closed.\n     */\n    close() {\n        if (!IsReadableByteStreamController(this)) {\n            throw byteStreamControllerBrandCheckException('close');\n        }\n        if (this._closeRequested) {\n            throw new TypeError('The stream has already been closed; do not close it again!');\n        }\n        const state = this._controlledReadableByteStream._state;\n        if (state !== 'readable') {\n            throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be closed`);\n        }\n        ReadableByteStreamControllerClose(this);\n    }\n    enqueue(chunk) {\n        if (!IsReadableByteStreamController(this)) {\n            throw byteStreamControllerBrandCheckException('enqueue');\n        }\n        assertRequiredArgument(chunk, 1, 'enqueue');\n        if (!ArrayBuffer.isView(chunk)) {\n            throw new TypeError('chunk must be an array buffer view');\n        }\n        if (chunk.byteLength === 0) {\n            throw new TypeError('chunk must have non-zero byteLength');\n        }\n        if (chunk.buffer.byteLength === 0) {\n            throw new TypeError(`chunk's buffer must have non-zero byteLength`);\n        }\n        if (this._closeRequested) {\n            throw new TypeError('stream is closed or draining');\n        }\n        const state = this._controlledReadableByteStream._state;\n        if (state !== 'readable') {\n            throw new TypeError(`The stream (in ${state} state) is not in the readable state and cannot be enqueued to`);\n        }\n        ReadableByteStreamControllerEnqueue(this, chunk);\n    }\n    /**\n     * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n     */\n    error(e = undefined) {\n        if (!IsReadableByteStreamController(this)) {\n            throw byteStreamControllerBrandCheckException('error');\n        }\n        ReadableByteStreamControllerError(this, e);\n    }\n    /** @internal */\n    [CancelSteps](reason) {\n        if (this._pendingPullIntos.length > 0) {\n            const firstDescriptor = this._pendingPullIntos.peek();\n            firstDescriptor.bytesFilled = 0;\n        }\n        ResetQueue(this);\n        const result = this._cancelAlgorithm(reason);\n        ReadableByteStreamControllerClearAlgorithms(this);\n        return result;\n    }\n    /** @internal */\n    [PullSteps](readRequest) {\n        const stream = this._controlledReadableByteStream;\n        if (this._queueTotalSize > 0) {\n            const entry = this._queue.shift();\n            this._queueTotalSize -= entry.byteLength;\n            ReadableByteStreamControllerHandleQueueDrain(this);\n            const view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);\n            readRequest._chunkSteps(view);\n            return;\n        }\n        const autoAllocateChunkSize = this._autoAllocateChunkSize;\n        if (autoAllocateChunkSize !== undefined) {\n            let buffer;\n            try {\n                buffer = new ArrayBuffer(autoAllocateChunkSize);\n            }\n            catch (bufferE) {\n                readRequest._errorSteps(bufferE);\n                return;\n            }\n            const pullIntoDescriptor = {\n                buffer,\n                byteOffset: 0,\n                byteLength: autoAllocateChunkSize,\n                bytesFilled: 0,\n                elementSize: 1,\n                viewConstructor: Uint8Array,\n                readerType: 'default'\n            };\n            this._pendingPullIntos.push(pullIntoDescriptor);\n        }\n        ReadableStreamAddReadRequest(stream, readRequest);\n        ReadableByteStreamControllerCallPullIfNeeded(this);\n    }\n}\nObject.defineProperties(ReadableByteStreamController.prototype, {\n    close: { enumerable: true },\n    enqueue: { enumerable: true },\n    error: { enumerable: true },\n    byobRequest: { enumerable: true },\n    desiredSize: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(ReadableByteStreamController.prototype, SymbolPolyfill.toStringTag, {\n        value: 'ReadableByteStreamController',\n        configurable: true\n    });\n}\n// Abstract operations for the ReadableByteStreamController.\nfunction IsReadableByteStreamController(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableByteStream')) {\n        return false;\n    }\n    return true;\n}\nfunction IsReadableStreamBYOBRequest(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {\n        return false;\n    }\n    return true;\n}\nfunction ReadableByteStreamControllerCallPullIfNeeded(controller) {\n    const shouldPull = ReadableByteStreamControllerShouldCallPull(controller);\n    if (!shouldPull) {\n        return;\n    }\n    if (controller._pulling) {\n        controller._pullAgain = true;\n        return;\n    }\n    controller._pulling = true;\n    // TODO: Test controller argument\n    const pullPromise = controller._pullAlgorithm();\n    uponPromise(pullPromise, () => {\n        controller._pulling = false;\n        if (controller._pullAgain) {\n            controller._pullAgain = false;\n            ReadableByteStreamControllerCallPullIfNeeded(controller);\n        }\n    }, e => {\n        ReadableByteStreamControllerError(controller, e);\n    });\n}\nfunction ReadableByteStreamControllerClearPendingPullIntos(controller) {\n    ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n    controller._pendingPullIntos = new SimpleQueue();\n}\nfunction ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {\n    let done = false;\n    if (stream._state === 'closed') {\n        done = true;\n    }\n    const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n    if (pullIntoDescriptor.readerType === 'default') {\n        ReadableStreamFulfillReadRequest(stream, filledView, done);\n    }\n    else {\n        ReadableStreamFulfillReadIntoRequest(stream, filledView, done);\n    }\n}\nfunction ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {\n    const bytesFilled = pullIntoDescriptor.bytesFilled;\n    const elementSize = pullIntoDescriptor.elementSize;\n    return new pullIntoDescriptor.viewConstructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);\n}\nfunction ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {\n    controller._queue.push({ buffer, byteOffset, byteLength });\n    controller._queueTotalSize += byteLength;\n}\nfunction ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {\n    const elementSize = pullIntoDescriptor.elementSize;\n    const currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;\n    const maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);\n    const maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;\n    const maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;\n    let totalBytesToCopyRemaining = maxBytesToCopy;\n    let ready = false;\n    if (maxAlignedBytes > currentAlignedBytes) {\n        totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;\n        ready = true;\n    }\n    const queue = controller._queue;\n    while (totalBytesToCopyRemaining > 0) {\n        const headOfQueue = queue.peek();\n        const bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);\n        const destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n        CopyDataBlockBytes(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);\n        if (headOfQueue.byteLength === bytesToCopy) {\n            queue.shift();\n        }\n        else {\n            headOfQueue.byteOffset += bytesToCopy;\n            headOfQueue.byteLength -= bytesToCopy;\n        }\n        controller._queueTotalSize -= bytesToCopy;\n        ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);\n        totalBytesToCopyRemaining -= bytesToCopy;\n    }\n    return ready;\n}\nfunction ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {\n    ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n    pullIntoDescriptor.bytesFilled += size;\n}\nfunction ReadableByteStreamControllerHandleQueueDrain(controller) {\n    if (controller._queueTotalSize === 0 && controller._closeRequested) {\n        ReadableByteStreamControllerClearAlgorithms(controller);\n        ReadableStreamClose(controller._controlledReadableByteStream);\n    }\n    else {\n        ReadableByteStreamControllerCallPullIfNeeded(controller);\n    }\n}\nfunction ReadableByteStreamControllerInvalidateBYOBRequest(controller) {\n    if (controller._byobRequest === null) {\n        return;\n    }\n    controller._byobRequest._associatedReadableByteStreamController = undefined;\n    controller._byobRequest._view = null;\n    controller._byobRequest = null;\n}\nfunction ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {\n    while (controller._pendingPullIntos.length > 0) {\n        if (controller._queueTotalSize === 0) {\n            return;\n        }\n        const pullIntoDescriptor = controller._pendingPullIntos.peek();\n        if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n            ReadableByteStreamControllerShiftPendingPullInto(controller);\n            ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n        }\n    }\n}\nfunction ReadableByteStreamControllerPullInto(controller, view, readIntoRequest) {\n    const stream = controller._controlledReadableByteStream;\n    let elementSize = 1;\n    if (view.constructor !== DataView) {\n        elementSize = view.constructor.BYTES_PER_ELEMENT;\n    }\n    const ctor = view.constructor;\n    const buffer = TransferArrayBuffer(view.buffer);\n    const pullIntoDescriptor = {\n        buffer,\n        byteOffset: view.byteOffset,\n        byteLength: view.byteLength,\n        bytesFilled: 0,\n        elementSize,\n        viewConstructor: ctor,\n        readerType: 'byob'\n    };\n    if (controller._pendingPullIntos.length > 0) {\n        controller._pendingPullIntos.push(pullIntoDescriptor);\n        // No ReadableByteStreamControllerCallPullIfNeeded() call since:\n        // - No change happens on desiredSize\n        // - The source has already been notified of that there's at least 1 pending read(view)\n        ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n        return;\n    }\n    if (stream._state === 'closed') {\n        const emptyView = new ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);\n        readIntoRequest._closeSteps(emptyView);\n        return;\n    }\n    if (controller._queueTotalSize > 0) {\n        if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor)) {\n            const filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);\n            ReadableByteStreamControllerHandleQueueDrain(controller);\n            readIntoRequest._chunkSteps(filledView);\n            return;\n        }\n        if (controller._closeRequested) {\n            const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n            ReadableByteStreamControllerError(controller, e);\n            readIntoRequest._errorSteps(e);\n            return;\n        }\n    }\n    controller._pendingPullIntos.push(pullIntoDescriptor);\n    ReadableStreamAddReadIntoRequest(stream, readIntoRequest);\n    ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\nfunction ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {\n    firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);\n    const stream = controller._controlledReadableByteStream;\n    if (ReadableStreamHasBYOBReader(stream)) {\n        while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n            const pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);\n            ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);\n        }\n    }\n}\nfunction ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {\n    if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {\n        throw new RangeError('bytesWritten out of range');\n    }\n    ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);\n    if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {\n        // TODO: Figure out whether we should detach the buffer or not here.\n        return;\n    }\n    ReadableByteStreamControllerShiftPendingPullInto(controller);\n    const remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;\n    if (remainderSize > 0) {\n        const end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;\n        const remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);\n        ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);\n    }\n    pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);\n    pullIntoDescriptor.bytesFilled -= remainderSize;\n    ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableByteStream, pullIntoDescriptor);\n    ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n}\nfunction ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {\n    const firstDescriptor = controller._pendingPullIntos.peek();\n    const state = controller._controlledReadableByteStream._state;\n    if (state === 'closed') {\n        if (bytesWritten !== 0) {\n            throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');\n        }\n        ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);\n    }\n    else {\n        ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);\n    }\n    ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\nfunction ReadableByteStreamControllerShiftPendingPullInto(controller) {\n    const descriptor = controller._pendingPullIntos.shift();\n    ReadableByteStreamControllerInvalidateBYOBRequest(controller);\n    return descriptor;\n}\nfunction ReadableByteStreamControllerShouldCallPull(controller) {\n    const stream = controller._controlledReadableByteStream;\n    if (stream._state !== 'readable') {\n        return false;\n    }\n    if (controller._closeRequested) {\n        return false;\n    }\n    if (!controller._started) {\n        return false;\n    }\n    if (ReadableStreamHasDefaultReader(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n        return true;\n    }\n    if (ReadableStreamHasBYOBReader(stream) && ReadableStreamGetNumReadIntoRequests(stream) > 0) {\n        return true;\n    }\n    const desiredSize = ReadableByteStreamControllerGetDesiredSize(controller);\n    if (desiredSize > 0) {\n        return true;\n    }\n    return false;\n}\nfunction ReadableByteStreamControllerClearAlgorithms(controller) {\n    controller._pullAlgorithm = undefined;\n    controller._cancelAlgorithm = undefined;\n}\n// A client of ReadableByteStreamController may use these functions directly to bypass state check.\nfunction ReadableByteStreamControllerClose(controller) {\n    const stream = controller._controlledReadableByteStream;\n    if (controller._closeRequested || stream._state !== 'readable') {\n        return;\n    }\n    if (controller._queueTotalSize > 0) {\n        controller._closeRequested = true;\n        return;\n    }\n    if (controller._pendingPullIntos.length > 0) {\n        const firstPendingPullInto = controller._pendingPullIntos.peek();\n        if (firstPendingPullInto.bytesFilled > 0) {\n            const e = new TypeError('Insufficient bytes to fill elements in the given buffer');\n            ReadableByteStreamControllerError(controller, e);\n            throw e;\n        }\n    }\n    ReadableByteStreamControllerClearAlgorithms(controller);\n    ReadableStreamClose(stream);\n}\nfunction ReadableByteStreamControllerEnqueue(controller, chunk) {\n    const stream = controller._controlledReadableByteStream;\n    if (controller._closeRequested || stream._state !== 'readable') {\n        return;\n    }\n    const buffer = chunk.buffer;\n    const byteOffset = chunk.byteOffset;\n    const byteLength = chunk.byteLength;\n    const transferredBuffer = TransferArrayBuffer(buffer);\n    if (ReadableStreamHasDefaultReader(stream)) {\n        if (ReadableStreamGetNumReadRequests(stream) === 0) {\n            ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n        }\n        else {\n            const transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);\n            ReadableStreamFulfillReadRequest(stream, transferredView, false);\n        }\n    }\n    else if (ReadableStreamHasBYOBReader(stream)) {\n        // TODO: Ideally in this branch detaching should happen only if the buffer is not consumed fully.\n        ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n        ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);\n    }\n    else {\n        ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);\n    }\n    ReadableByteStreamControllerCallPullIfNeeded(controller);\n}\nfunction ReadableByteStreamControllerError(controller, e) {\n    const stream = controller._controlledReadableByteStream;\n    if (stream._state !== 'readable') {\n        return;\n    }\n    ReadableByteStreamControllerClearPendingPullIntos(controller);\n    ResetQueue(controller);\n    ReadableByteStreamControllerClearAlgorithms(controller);\n    ReadableStreamError(stream, e);\n}\nfunction ReadableByteStreamControllerGetDesiredSize(controller) {\n    const state = controller._controlledReadableByteStream._state;\n    if (state === 'errored') {\n        return null;\n    }\n    if (state === 'closed') {\n        return 0;\n    }\n    return controller._strategyHWM - controller._queueTotalSize;\n}\nfunction ReadableByteStreamControllerRespond(controller, bytesWritten) {\n    bytesWritten = Number(bytesWritten);\n    if (!IsFiniteNonNegativeNumber(bytesWritten)) {\n        throw new RangeError('bytesWritten must be a finite');\n    }\n    ReadableByteStreamControllerRespondInternal(controller, bytesWritten);\n}\nfunction ReadableByteStreamControllerRespondWithNewView(controller, view) {\n    const firstDescriptor = controller._pendingPullIntos.peek();\n    if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {\n        throw new RangeError('The region specified by view does not match byobRequest');\n    }\n    if (firstDescriptor.byteLength !== view.byteLength) {\n        throw new RangeError('The buffer of view has different capacity than byobRequest');\n    }\n    firstDescriptor.buffer = view.buffer;\n    ReadableByteStreamControllerRespondInternal(controller, view.byteLength);\n}\nfunction SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize) {\n    controller._controlledReadableByteStream = stream;\n    controller._pullAgain = false;\n    controller._pulling = false;\n    controller._byobRequest = null;\n    // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n    controller._queue = controller._queueTotalSize = undefined;\n    ResetQueue(controller);\n    controller._closeRequested = false;\n    controller._started = false;\n    controller._strategyHWM = highWaterMark;\n    controller._pullAlgorithm = pullAlgorithm;\n    controller._cancelAlgorithm = cancelAlgorithm;\n    controller._autoAllocateChunkSize = autoAllocateChunkSize;\n    controller._pendingPullIntos = new SimpleQueue();\n    stream._readableStreamController = controller;\n    const startResult = startAlgorithm();\n    uponPromise(promiseResolvedWith(startResult), () => {\n        controller._started = true;\n        ReadableByteStreamControllerCallPullIfNeeded(controller);\n    }, r => {\n        ReadableByteStreamControllerError(controller, r);\n    });\n}\nfunction SetUpReadableByteStreamControllerFromUnderlyingSource(stream, underlyingByteSource, highWaterMark) {\n    const controller = Object.create(ReadableByteStreamController.prototype);\n    let startAlgorithm = () => undefined;\n    let pullAlgorithm = () => promiseResolvedWith(undefined);\n    let cancelAlgorithm = () => promiseResolvedWith(undefined);\n    if (underlyingByteSource.start !== undefined) {\n        startAlgorithm = () => underlyingByteSource.start(controller);\n    }\n    if (underlyingByteSource.pull !== undefined) {\n        pullAlgorithm = () => underlyingByteSource.pull(controller);\n    }\n    if (underlyingByteSource.cancel !== undefined) {\n        cancelAlgorithm = reason => underlyingByteSource.cancel(reason);\n    }\n    const autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;\n    if (autoAllocateChunkSize === 0) {\n        throw new TypeError('autoAllocateChunkSize must be greater than 0');\n    }\n    SetUpReadableByteStreamController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, autoAllocateChunkSize);\n}\nfunction SetUpReadableStreamBYOBRequest(request, controller, view) {\n    request._associatedReadableByteStreamController = controller;\n    request._view = view;\n}\n// Helper functions for the ReadableStreamBYOBRequest.\nfunction byobRequestBrandCheckException(name) {\n    return new TypeError(`ReadableStreamBYOBRequest.prototype.${name} can only be used on a ReadableStreamBYOBRequest`);\n}\n// Helper functions for the ReadableByteStreamController.\nfunction byteStreamControllerBrandCheckException(name) {\n    return new TypeError(`ReadableByteStreamController.prototype.${name} can only be used on a ReadableByteStreamController`);\n}\n\n// Abstract operations for the ReadableStream.\nfunction AcquireReadableStreamBYOBReader(stream) {\n    return new ReadableStreamBYOBReader(stream);\n}\n// ReadableStream API exposed for controllers.\nfunction ReadableStreamAddReadIntoRequest(stream, readIntoRequest) {\n    stream._reader._readIntoRequests.push(readIntoRequest);\n}\nfunction ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {\n    const reader = stream._reader;\n    const readIntoRequest = reader._readIntoRequests.shift();\n    if (done) {\n        readIntoRequest._closeSteps(chunk);\n    }\n    else {\n        readIntoRequest._chunkSteps(chunk);\n    }\n}\nfunction ReadableStreamGetNumReadIntoRequests(stream) {\n    return stream._reader._readIntoRequests.length;\n}\nfunction ReadableStreamHasBYOBReader(stream) {\n    const reader = stream._reader;\n    if (reader === undefined) {\n        return false;\n    }\n    if (!IsReadableStreamBYOBReader(reader)) {\n        return false;\n    }\n    return true;\n}\n/**\n * A BYOB reader vended by a {@link ReadableStream}.\n *\n * @public\n */\nclass ReadableStreamBYOBReader {\n    constructor(stream) {\n        assertRequiredArgument(stream, 1, 'ReadableStreamBYOBReader');\n        assertReadableStream(stream, 'First parameter');\n        if (IsReadableStreamLocked(stream)) {\n            throw new TypeError('This stream has already been locked for exclusive reading by another reader');\n        }\n        if (!IsReadableByteStreamController(stream._readableStreamController)) {\n            throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' +\n                'source');\n        }\n        ReadableStreamReaderGenericInitialize(this, stream);\n        this._readIntoRequests = new SimpleQueue();\n    }\n    /**\n     * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n     * the reader's lock is released before the stream finishes closing.\n     */\n    get closed() {\n        if (!IsReadableStreamBYOBReader(this)) {\n            return promiseRejectedWith(byobReaderBrandCheckException('closed'));\n        }\n        return this._closedPromise;\n    }\n    /**\n     * If the reader is active, behaves the same as {@link ReadableStream.cancel | stream.cancel(reason)}.\n     */\n    cancel(reason = undefined) {\n        if (!IsReadableStreamBYOBReader(this)) {\n            return promiseRejectedWith(byobReaderBrandCheckException('cancel'));\n        }\n        if (this._ownerReadableStream === undefined) {\n            return promiseRejectedWith(readerLockException('cancel'));\n        }\n        return ReadableStreamReaderGenericCancel(this, reason);\n    }\n    /**\n     * Attempts to reads bytes into view, and returns a promise resolved with the result.\n     *\n     * If reading a chunk causes the queue to become empty, more data will be pulled from the underlying source.\n     */\n    read(view) {\n        if (!IsReadableStreamBYOBReader(this)) {\n            return promiseRejectedWith(byobReaderBrandCheckException('read'));\n        }\n        if (!ArrayBuffer.isView(view)) {\n            return promiseRejectedWith(new TypeError('view must be an array buffer view'));\n        }\n        if (view.byteLength === 0) {\n            return promiseRejectedWith(new TypeError('view must have non-zero byteLength'));\n        }\n        if (view.buffer.byteLength === 0) {\n            return promiseRejectedWith(new TypeError(`view's buffer must have non-zero byteLength`));\n        }\n        if (this._ownerReadableStream === undefined) {\n            return promiseRejectedWith(readerLockException('read from'));\n        }\n        let resolvePromise;\n        let rejectPromise;\n        const promise = newPromise((resolve, reject) => {\n            resolvePromise = resolve;\n            rejectPromise = reject;\n        });\n        const readIntoRequest = {\n            _chunkSteps: chunk => resolvePromise({ value: chunk, done: false }),\n            _closeSteps: chunk => resolvePromise({ value: chunk, done: true }),\n            _errorSteps: e => rejectPromise(e)\n        };\n        ReadableStreamBYOBReaderRead(this, view, readIntoRequest);\n        return promise;\n    }\n    /**\n     * Releases the reader's lock on the corresponding stream. After the lock is released, the reader is no longer active.\n     * If the associated stream is errored when the lock is released, the reader will appear errored in the same way\n     * from now on; otherwise, the reader will appear closed.\n     *\n     * A reader's lock cannot be released while it still has a pending read request, i.e., if a promise returned by\n     * the reader's {@link ReadableStreamBYOBReader.read | read()} method has not yet been settled. Attempting to\n     * do so will throw a `TypeError` and leave the reader locked to the stream.\n     */\n    releaseLock() {\n        if (!IsReadableStreamBYOBReader(this)) {\n            throw byobReaderBrandCheckException('releaseLock');\n        }\n        if (this._ownerReadableStream === undefined) {\n            return;\n        }\n        if (this._readIntoRequests.length > 0) {\n            throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');\n        }\n        ReadableStreamReaderGenericRelease(this);\n    }\n}\nObject.defineProperties(ReadableStreamBYOBReader.prototype, {\n    cancel: { enumerable: true },\n    read: { enumerable: true },\n    releaseLock: { enumerable: true },\n    closed: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(ReadableStreamBYOBReader.prototype, SymbolPolyfill.toStringTag, {\n        value: 'ReadableStreamBYOBReader',\n        configurable: true\n    });\n}\n// Abstract operations for the readers.\nfunction IsReadableStreamBYOBReader(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {\n        return false;\n    }\n    return true;\n}\nfunction ReadableStreamBYOBReaderRead(reader, view, readIntoRequest) {\n    const stream = reader._ownerReadableStream;\n    stream._disturbed = true;\n    if (stream._state === 'errored') {\n        readIntoRequest._errorSteps(stream._storedError);\n    }\n    else {\n        ReadableByteStreamControllerPullInto(stream._readableStreamController, view, readIntoRequest);\n    }\n}\n// Helper functions for the ReadableStreamBYOBReader.\nfunction byobReaderBrandCheckException(name) {\n    return new TypeError(`ReadableStreamBYOBReader.prototype.${name} can only be used on a ReadableStreamBYOBReader`);\n}\n\nfunction ExtractHighWaterMark(strategy, defaultHWM) {\n    const { highWaterMark } = strategy;\n    if (highWaterMark === undefined) {\n        return defaultHWM;\n    }\n    if (NumberIsNaN(highWaterMark) || highWaterMark < 0) {\n        throw new RangeError('Invalid highWaterMark');\n    }\n    return highWaterMark;\n}\nfunction ExtractSizeAlgorithm(strategy) {\n    const { size } = strategy;\n    if (!size) {\n        return () => 1;\n    }\n    return size;\n}\n\nfunction convertQueuingStrategy(init, context) {\n    assertDictionary(init, context);\n    const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n    const size = init === null || init === void 0 ? void 0 : init.size;\n    return {\n        highWaterMark: highWaterMark === undefined ? undefined : convertUnrestrictedDouble(highWaterMark),\n        size: size === undefined ? undefined : convertQueuingStrategySize(size, `${context} has member 'size' that`)\n    };\n}\nfunction convertQueuingStrategySize(fn, context) {\n    assertFunction(fn, context);\n    return chunk => convertUnrestrictedDouble(fn(chunk));\n}\n\nfunction convertUnderlyingSink(original, context) {\n    assertDictionary(original, context);\n    const abort = original === null || original === void 0 ? void 0 : original.abort;\n    const close = original === null || original === void 0 ? void 0 : original.close;\n    const start = original === null || original === void 0 ? void 0 : original.start;\n    const type = original === null || original === void 0 ? void 0 : original.type;\n    const write = original === null || original === void 0 ? void 0 : original.write;\n    return {\n        abort: abort === undefined ?\n            undefined :\n            convertUnderlyingSinkAbortCallback(abort, original, `${context} has member 'abort' that`),\n        close: close === undefined ?\n            undefined :\n            convertUnderlyingSinkCloseCallback(close, original, `${context} has member 'close' that`),\n        start: start === undefined ?\n            undefined :\n            convertUnderlyingSinkStartCallback(start, original, `${context} has member 'start' that`),\n        write: write === undefined ?\n            undefined :\n            convertUnderlyingSinkWriteCallback(write, original, `${context} has member 'write' that`),\n        type\n    };\n}\nfunction convertUnderlyingSinkAbortCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (reason) => promiseCall(fn, original, [reason]);\n}\nfunction convertUnderlyingSinkCloseCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return () => promiseCall(fn, original, []);\n}\nfunction convertUnderlyingSinkStartCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (controller) => reflectCall(fn, original, [controller]);\n}\nfunction convertUnderlyingSinkWriteCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);\n}\n\nfunction assertWritableStream(x, context) {\n    if (!IsWritableStream(x)) {\n        throw new TypeError(`${context} is not a WritableStream.`);\n    }\n}\n\n/**\n * A writable stream represents a destination for data, into which you can write.\n *\n * @public\n */\nclass WritableStream {\n    constructor(rawUnderlyingSink = {}, rawStrategy = {}) {\n        if (rawUnderlyingSink === undefined) {\n            rawUnderlyingSink = null;\n        }\n        else {\n            assertObject(rawUnderlyingSink, 'First parameter');\n        }\n        const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n        const underlyingSink = convertUnderlyingSink(rawUnderlyingSink, 'First parameter');\n        InitializeWritableStream(this);\n        const type = underlyingSink.type;\n        if (type !== undefined) {\n            throw new RangeError('Invalid type is specified');\n        }\n        const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n        const highWaterMark = ExtractHighWaterMark(strategy, 1);\n        SetUpWritableStreamDefaultControllerFromUnderlyingSink(this, underlyingSink, highWaterMark, sizeAlgorithm);\n    }\n    /**\n     * Returns whether or not the writable stream is locked to a writer.\n     */\n    get locked() {\n        if (!IsWritableStream(this)) {\n            throw streamBrandCheckException$2('locked');\n        }\n        return IsWritableStreamLocked(this);\n    }\n    /**\n     * Aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be\n     * immediately moved to an errored state, with any queued-up writes discarded. This will also execute any abort\n     * mechanism of the underlying sink.\n     *\n     * The returned promise will fulfill if the stream shuts down successfully, or reject if the underlying sink signaled\n     * that there was an error doing so. Additionally, it will reject with a `TypeError` (without attempting to cancel\n     * the stream) if the stream is currently locked.\n     */\n    abort(reason = undefined) {\n        if (!IsWritableStream(this)) {\n            return promiseRejectedWith(streamBrandCheckException$2('abort'));\n        }\n        if (IsWritableStreamLocked(this)) {\n            return promiseRejectedWith(new TypeError('Cannot abort a stream that already has a writer'));\n        }\n        return WritableStreamAbort(this, reason);\n    }\n    /**\n     * Closes the stream. The underlying sink will finish processing any previously-written chunks, before invoking its\n     * close behavior. During this time any further attempts to write will fail (without erroring the stream).\n     *\n     * The method returns a promise that will fulfill if all remaining chunks are successfully written and the stream\n     * successfully closes, or rejects if an error is encountered during this process. Additionally, it will reject with\n     * a `TypeError` (without attempting to cancel the stream) if the stream is currently locked.\n     */\n    close() {\n        if (!IsWritableStream(this)) {\n            return promiseRejectedWith(streamBrandCheckException$2('close'));\n        }\n        if (IsWritableStreamLocked(this)) {\n            return promiseRejectedWith(new TypeError('Cannot close a stream that already has a writer'));\n        }\n        if (WritableStreamCloseQueuedOrInFlight(this)) {\n            return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n        }\n        return WritableStreamClose(this);\n    }\n    /**\n     * Creates a {@link WritableStreamDefaultWriter | writer} and locks the stream to the new writer. While the stream\n     * is locked, no other writer can be acquired until this one is released.\n     *\n     * This functionality is especially useful for creating abstractions that desire the ability to write to a stream\n     * without interruption or interleaving. By getting a writer for the stream, you can ensure nobody else can write at\n     * the same time, which would cause the resulting written data to be unpredictable and probably useless.\n     */\n    getWriter() {\n        if (!IsWritableStream(this)) {\n            throw streamBrandCheckException$2('getWriter');\n        }\n        return AcquireWritableStreamDefaultWriter(this);\n    }\n}\nObject.defineProperties(WritableStream.prototype, {\n    abort: { enumerable: true },\n    close: { enumerable: true },\n    getWriter: { enumerable: true },\n    locked: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(WritableStream.prototype, SymbolPolyfill.toStringTag, {\n        value: 'WritableStream',\n        configurable: true\n    });\n}\n// Abstract operations for the WritableStream.\nfunction AcquireWritableStreamDefaultWriter(stream) {\n    return new WritableStreamDefaultWriter(stream);\n}\n// Throws if and only if startAlgorithm throws.\nfunction CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {\n    const stream = Object.create(WritableStream.prototype);\n    InitializeWritableStream(stream);\n    const controller = Object.create(WritableStreamDefaultController.prototype);\n    SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n    return stream;\n}\nfunction InitializeWritableStream(stream) {\n    stream._state = 'writable';\n    // The error that will be reported by new method calls once the state becomes errored. Only set when [[state]] is\n    // 'erroring' or 'errored'. May be set to an undefined value.\n    stream._storedError = undefined;\n    stream._writer = undefined;\n    // Initialize to undefined first because the constructor of the controller checks this\n    // variable to validate the caller.\n    stream._writableStreamController = undefined;\n    // This queue is placed here instead of the writer class in order to allow for passing a writer to the next data\n    // producer without waiting for the queued writes to finish.\n    stream._writeRequests = new SimpleQueue();\n    // Write requests are removed from _writeRequests when write() is called on the underlying sink. This prevents\n    // them from being erroneously rejected on error. If a write() call is in-flight, the request is stored here.\n    stream._inFlightWriteRequest = undefined;\n    // The promise that was returned from writer.close(). Stored here because it may be fulfilled after the writer\n    // has been detached.\n    stream._closeRequest = undefined;\n    // Close request is removed from _closeRequest when close() is called on the underlying sink. This prevents it\n    // from being erroneously rejected on error. If a close() call is in-flight, the request is stored here.\n    stream._inFlightCloseRequest = undefined;\n    // The promise that was returned from writer.abort(). This may also be fulfilled after the writer has detached.\n    stream._pendingAbortRequest = undefined;\n    // The backpressure signal set by the controller.\n    stream._backpressure = false;\n}\nfunction IsWritableStream(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {\n        return false;\n    }\n    return true;\n}\nfunction IsWritableStreamLocked(stream) {\n    if (stream._writer === undefined) {\n        return false;\n    }\n    return true;\n}\nfunction WritableStreamAbort(stream, reason) {\n    const state = stream._state;\n    if (state === 'closed' || state === 'errored') {\n        return promiseResolvedWith(undefined);\n    }\n    if (stream._pendingAbortRequest !== undefined) {\n        return stream._pendingAbortRequest._promise;\n    }\n    let wasAlreadyErroring = false;\n    if (state === 'erroring') {\n        wasAlreadyErroring = true;\n        // reason will not be used, so don't keep a reference to it.\n        reason = undefined;\n    }\n    const promise = newPromise((resolve, reject) => {\n        stream._pendingAbortRequest = {\n            _promise: undefined,\n            _resolve: resolve,\n            _reject: reject,\n            _reason: reason,\n            _wasAlreadyErroring: wasAlreadyErroring\n        };\n    });\n    stream._pendingAbortRequest._promise = promise;\n    if (!wasAlreadyErroring) {\n        WritableStreamStartErroring(stream, reason);\n    }\n    return promise;\n}\nfunction WritableStreamClose(stream) {\n    const state = stream._state;\n    if (state === 'closed' || state === 'errored') {\n        return promiseRejectedWith(new TypeError(`The stream (in ${state} state) is not in the writable state and cannot be closed`));\n    }\n    const promise = newPromise((resolve, reject) => {\n        const closeRequest = {\n            _resolve: resolve,\n            _reject: reject\n        };\n        stream._closeRequest = closeRequest;\n    });\n    const writer = stream._writer;\n    if (writer !== undefined && stream._backpressure && state === 'writable') {\n        defaultWriterReadyPromiseResolve(writer);\n    }\n    WritableStreamDefaultControllerClose(stream._writableStreamController);\n    return promise;\n}\n// WritableStream API exposed for controllers.\nfunction WritableStreamAddWriteRequest(stream) {\n    const promise = newPromise((resolve, reject) => {\n        const writeRequest = {\n            _resolve: resolve,\n            _reject: reject\n        };\n        stream._writeRequests.push(writeRequest);\n    });\n    return promise;\n}\nfunction WritableStreamDealWithRejection(stream, error) {\n    const state = stream._state;\n    if (state === 'writable') {\n        WritableStreamStartErroring(stream, error);\n        return;\n    }\n    WritableStreamFinishErroring(stream);\n}\nfunction WritableStreamStartErroring(stream, reason) {\n    const controller = stream._writableStreamController;\n    stream._state = 'erroring';\n    stream._storedError = reason;\n    const writer = stream._writer;\n    if (writer !== undefined) {\n        WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);\n    }\n    if (!WritableStreamHasOperationMarkedInFlight(stream) && controller._started) {\n        WritableStreamFinishErroring(stream);\n    }\n}\nfunction WritableStreamFinishErroring(stream) {\n    stream._state = 'errored';\n    stream._writableStreamController[ErrorSteps]();\n    const storedError = stream._storedError;\n    stream._writeRequests.forEach(writeRequest => {\n        writeRequest._reject(storedError);\n    });\n    stream._writeRequests = new SimpleQueue();\n    if (stream._pendingAbortRequest === undefined) {\n        WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n        return;\n    }\n    const abortRequest = stream._pendingAbortRequest;\n    stream._pendingAbortRequest = undefined;\n    if (abortRequest._wasAlreadyErroring) {\n        abortRequest._reject(storedError);\n        WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n        return;\n    }\n    const promise = stream._writableStreamController[AbortSteps](abortRequest._reason);\n    uponPromise(promise, () => {\n        abortRequest._resolve();\n        WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n    }, (reason) => {\n        abortRequest._reject(reason);\n        WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);\n    });\n}\nfunction WritableStreamFinishInFlightWrite(stream) {\n    stream._inFlightWriteRequest._resolve(undefined);\n    stream._inFlightWriteRequest = undefined;\n}\nfunction WritableStreamFinishInFlightWriteWithError(stream, error) {\n    stream._inFlightWriteRequest._reject(error);\n    stream._inFlightWriteRequest = undefined;\n    WritableStreamDealWithRejection(stream, error);\n}\nfunction WritableStreamFinishInFlightClose(stream) {\n    stream._inFlightCloseRequest._resolve(undefined);\n    stream._inFlightCloseRequest = undefined;\n    const state = stream._state;\n    if (state === 'erroring') {\n        // The error was too late to do anything, so it is ignored.\n        stream._storedError = undefined;\n        if (stream._pendingAbortRequest !== undefined) {\n            stream._pendingAbortRequest._resolve();\n            stream._pendingAbortRequest = undefined;\n        }\n    }\n    stream._state = 'closed';\n    const writer = stream._writer;\n    if (writer !== undefined) {\n        defaultWriterClosedPromiseResolve(writer);\n    }\n}\nfunction WritableStreamFinishInFlightCloseWithError(stream, error) {\n    stream._inFlightCloseRequest._reject(error);\n    stream._inFlightCloseRequest = undefined;\n    // Never execute sink abort() after sink close().\n    if (stream._pendingAbortRequest !== undefined) {\n        stream._pendingAbortRequest._reject(error);\n        stream._pendingAbortRequest = undefined;\n    }\n    WritableStreamDealWithRejection(stream, error);\n}\n// TODO(ricea): Fix alphabetical order.\nfunction WritableStreamCloseQueuedOrInFlight(stream) {\n    if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {\n        return false;\n    }\n    return true;\n}\nfunction WritableStreamHasOperationMarkedInFlight(stream) {\n    if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {\n        return false;\n    }\n    return true;\n}\nfunction WritableStreamMarkCloseRequestInFlight(stream) {\n    stream._inFlightCloseRequest = stream._closeRequest;\n    stream._closeRequest = undefined;\n}\nfunction WritableStreamMarkFirstWriteRequestInFlight(stream) {\n    stream._inFlightWriteRequest = stream._writeRequests.shift();\n}\nfunction WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {\n    if (stream._closeRequest !== undefined) {\n        stream._closeRequest._reject(stream._storedError);\n        stream._closeRequest = undefined;\n    }\n    const writer = stream._writer;\n    if (writer !== undefined) {\n        defaultWriterClosedPromiseReject(writer, stream._storedError);\n    }\n}\nfunction WritableStreamUpdateBackpressure(stream, backpressure) {\n    const writer = stream._writer;\n    if (writer !== undefined && backpressure !== stream._backpressure) {\n        if (backpressure) {\n            defaultWriterReadyPromiseReset(writer);\n        }\n        else {\n            defaultWriterReadyPromiseResolve(writer);\n        }\n    }\n    stream._backpressure = backpressure;\n}\n/**\n * A default writer vended by a {@link WritableStream}.\n *\n * @public\n */\nclass WritableStreamDefaultWriter {\n    constructor(stream) {\n        assertRequiredArgument(stream, 1, 'WritableStreamDefaultWriter');\n        assertWritableStream(stream, 'First parameter');\n        if (IsWritableStreamLocked(stream)) {\n            throw new TypeError('This stream has already been locked for exclusive writing by another writer');\n        }\n        this._ownerWritableStream = stream;\n        stream._writer = this;\n        const state = stream._state;\n        if (state === 'writable') {\n            if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._backpressure) {\n                defaultWriterReadyPromiseInitialize(this);\n            }\n            else {\n                defaultWriterReadyPromiseInitializeAsResolved(this);\n            }\n            defaultWriterClosedPromiseInitialize(this);\n        }\n        else if (state === 'erroring') {\n            defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);\n            defaultWriterClosedPromiseInitialize(this);\n        }\n        else if (state === 'closed') {\n            defaultWriterReadyPromiseInitializeAsResolved(this);\n            defaultWriterClosedPromiseInitializeAsResolved(this);\n        }\n        else {\n            const storedError = stream._storedError;\n            defaultWriterReadyPromiseInitializeAsRejected(this, storedError);\n            defaultWriterClosedPromiseInitializeAsRejected(this, storedError);\n        }\n    }\n    /**\n     * Returns a promise that will be fulfilled when the stream becomes closed, or rejected if the stream ever errors or\n     * the writer’s lock is released before the stream finishes closing.\n     */\n    get closed() {\n        if (!IsWritableStreamDefaultWriter(this)) {\n            return promiseRejectedWith(defaultWriterBrandCheckException('closed'));\n        }\n        return this._closedPromise;\n    }\n    /**\n     * Returns the desired size to fill the stream’s internal queue. It can be negative, if the queue is over-full.\n     * A producer can use this information to determine the right amount of data to write.\n     *\n     * It will be `null` if the stream cannot be successfully written to (due to either being errored, or having an abort\n     * queued up). It will return zero if the stream is closed. And the getter will throw an exception if invoked when\n     * the writer’s lock is released.\n     */\n    get desiredSize() {\n        if (!IsWritableStreamDefaultWriter(this)) {\n            throw defaultWriterBrandCheckException('desiredSize');\n        }\n        if (this._ownerWritableStream === undefined) {\n            throw defaultWriterLockException('desiredSize');\n        }\n        return WritableStreamDefaultWriterGetDesiredSize(this);\n    }\n    /**\n     * Returns a promise that will be fulfilled when the desired size to fill the stream’s internal queue transitions\n     * from non-positive to positive, signaling that it is no longer applying backpressure. Once the desired size dips\n     * back to zero or below, the getter will return a new promise that stays pending until the next transition.\n     *\n     * If the stream becomes errored or aborted, or the writer’s lock is released, the returned promise will become\n     * rejected.\n     */\n    get ready() {\n        if (!IsWritableStreamDefaultWriter(this)) {\n            return promiseRejectedWith(defaultWriterBrandCheckException('ready'));\n        }\n        return this._readyPromise;\n    }\n    /**\n     * If the reader is active, behaves the same as {@link WritableStream.abort | stream.abort(reason)}.\n     */\n    abort(reason = undefined) {\n        if (!IsWritableStreamDefaultWriter(this)) {\n            return promiseRejectedWith(defaultWriterBrandCheckException('abort'));\n        }\n        if (this._ownerWritableStream === undefined) {\n            return promiseRejectedWith(defaultWriterLockException('abort'));\n        }\n        return WritableStreamDefaultWriterAbort(this, reason);\n    }\n    /**\n     * If the reader is active, behaves the same as {@link WritableStream.close | stream.close()}.\n     */\n    close() {\n        if (!IsWritableStreamDefaultWriter(this)) {\n            return promiseRejectedWith(defaultWriterBrandCheckException('close'));\n        }\n        const stream = this._ownerWritableStream;\n        if (stream === undefined) {\n            return promiseRejectedWith(defaultWriterLockException('close'));\n        }\n        if (WritableStreamCloseQueuedOrInFlight(stream)) {\n            return promiseRejectedWith(new TypeError('Cannot close an already-closing stream'));\n        }\n        return WritableStreamDefaultWriterClose(this);\n    }\n    /**\n     * Releases the writer’s lock on the corresponding stream. After the lock is released, the writer is no longer active.\n     * If the associated stream is errored when the lock is released, the writer will appear errored in the same way from\n     * now on; otherwise, the writer will appear closed.\n     *\n     * Note that the lock can still be released even if some ongoing writes have not yet finished (i.e. even if the\n     * promises returned from previous calls to {@link WritableStreamDefaultWriter.write | write()} have not yet settled).\n     * It’s not necessary to hold the lock on the writer for the duration of the write; the lock instead simply prevents\n     * other producers from writing in an interleaved manner.\n     */\n    releaseLock() {\n        if (!IsWritableStreamDefaultWriter(this)) {\n            throw defaultWriterBrandCheckException('releaseLock');\n        }\n        const stream = this._ownerWritableStream;\n        if (stream === undefined) {\n            return;\n        }\n        WritableStreamDefaultWriterRelease(this);\n    }\n    write(chunk = undefined) {\n        if (!IsWritableStreamDefaultWriter(this)) {\n            return promiseRejectedWith(defaultWriterBrandCheckException('write'));\n        }\n        if (this._ownerWritableStream === undefined) {\n            return promiseRejectedWith(defaultWriterLockException('write to'));\n        }\n        return WritableStreamDefaultWriterWrite(this, chunk);\n    }\n}\nObject.defineProperties(WritableStreamDefaultWriter.prototype, {\n    abort: { enumerable: true },\n    close: { enumerable: true },\n    releaseLock: { enumerable: true },\n    write: { enumerable: true },\n    closed: { enumerable: true },\n    desiredSize: { enumerable: true },\n    ready: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(WritableStreamDefaultWriter.prototype, SymbolPolyfill.toStringTag, {\n        value: 'WritableStreamDefaultWriter',\n        configurable: true\n    });\n}\n// Abstract operations for the WritableStreamDefaultWriter.\nfunction IsWritableStreamDefaultWriter(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {\n        return false;\n    }\n    return true;\n}\n// A client of WritableStreamDefaultWriter may use these functions directly to bypass state check.\nfunction WritableStreamDefaultWriterAbort(writer, reason) {\n    const stream = writer._ownerWritableStream;\n    return WritableStreamAbort(stream, reason);\n}\nfunction WritableStreamDefaultWriterClose(writer) {\n    const stream = writer._ownerWritableStream;\n    return WritableStreamClose(stream);\n}\nfunction WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {\n    const stream = writer._ownerWritableStream;\n    const state = stream._state;\n    if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n        return promiseResolvedWith(undefined);\n    }\n    if (state === 'errored') {\n        return promiseRejectedWith(stream._storedError);\n    }\n    return WritableStreamDefaultWriterClose(writer);\n}\nfunction WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {\n    if (writer._closedPromiseState === 'pending') {\n        defaultWriterClosedPromiseReject(writer, error);\n    }\n    else {\n        defaultWriterClosedPromiseResetToRejected(writer, error);\n    }\n}\nfunction WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {\n    if (writer._readyPromiseState === 'pending') {\n        defaultWriterReadyPromiseReject(writer, error);\n    }\n    else {\n        defaultWriterReadyPromiseResetToRejected(writer, error);\n    }\n}\nfunction WritableStreamDefaultWriterGetDesiredSize(writer) {\n    const stream = writer._ownerWritableStream;\n    const state = stream._state;\n    if (state === 'errored' || state === 'erroring') {\n        return null;\n    }\n    if (state === 'closed') {\n        return 0;\n    }\n    return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);\n}\nfunction WritableStreamDefaultWriterRelease(writer) {\n    const stream = writer._ownerWritableStream;\n    const releasedError = new TypeError(`Writer was released and can no longer be used to monitor the stream's closedness`);\n    WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);\n    // The state transitions to \"errored\" before the sink abort() method runs, but the writer.closed promise is not\n    // rejected until afterwards. This means that simply testing state will not work.\n    WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);\n    stream._writer = undefined;\n    writer._ownerWritableStream = undefined;\n}\nfunction WritableStreamDefaultWriterWrite(writer, chunk) {\n    const stream = writer._ownerWritableStream;\n    const controller = stream._writableStreamController;\n    const chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);\n    if (stream !== writer._ownerWritableStream) {\n        return promiseRejectedWith(defaultWriterLockException('write to'));\n    }\n    const state = stream._state;\n    if (state === 'errored') {\n        return promiseRejectedWith(stream._storedError);\n    }\n    if (WritableStreamCloseQueuedOrInFlight(stream) || state === 'closed') {\n        return promiseRejectedWith(new TypeError('The stream is closing or closed and cannot be written to'));\n    }\n    if (state === 'erroring') {\n        return promiseRejectedWith(stream._storedError);\n    }\n    const promise = WritableStreamAddWriteRequest(stream);\n    WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);\n    return promise;\n}\nconst closeSentinel = {};\n/**\n * Allows control of a {@link WritableStream | writable stream}'s state and internal queue.\n *\n * @public\n */\nclass WritableStreamDefaultController {\n    constructor() {\n        throw new TypeError('Illegal constructor');\n    }\n    /**\n     * Closes the controlled writable stream, making all future interactions with it fail with the given error `e`.\n     *\n     * This method is rarely used, since usually it suffices to return a rejected promise from one of the underlying\n     * sink's methods. However, it can be useful for suddenly shutting down a stream in response to an event outside the\n     * normal lifecycle of interactions with the underlying sink.\n     */\n    error(e = undefined) {\n        if (!IsWritableStreamDefaultController(this)) {\n            throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');\n        }\n        const state = this._controlledWritableStream._state;\n        if (state !== 'writable') {\n            // The stream is closed, errored or will be soon. The sink can't do anything useful if it gets an error here, so\n            // just treat it as a no-op.\n            return;\n        }\n        WritableStreamDefaultControllerError(this, e);\n    }\n    /** @internal */\n    [AbortSteps](reason) {\n        const result = this._abortAlgorithm(reason);\n        WritableStreamDefaultControllerClearAlgorithms(this);\n        return result;\n    }\n    /** @internal */\n    [ErrorSteps]() {\n        ResetQueue(this);\n    }\n}\nObject.defineProperties(WritableStreamDefaultController.prototype, {\n    error: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(WritableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n        value: 'WritableStreamDefaultController',\n        configurable: true\n    });\n}\n// Abstract operations implementing interface required by the WritableStream.\nfunction IsWritableStreamDefaultController(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_controlledWritableStream')) {\n        return false;\n    }\n    return true;\n}\nfunction SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm) {\n    controller._controlledWritableStream = stream;\n    stream._writableStreamController = controller;\n    // Need to set the slots so that the assert doesn't fire. In the spec the slots already exist implicitly.\n    controller._queue = undefined;\n    controller._queueTotalSize = undefined;\n    ResetQueue(controller);\n    controller._started = false;\n    controller._strategySizeAlgorithm = sizeAlgorithm;\n    controller._strategyHWM = highWaterMark;\n    controller._writeAlgorithm = writeAlgorithm;\n    controller._closeAlgorithm = closeAlgorithm;\n    controller._abortAlgorithm = abortAlgorithm;\n    const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n    WritableStreamUpdateBackpressure(stream, backpressure);\n    const startResult = startAlgorithm();\n    const startPromise = promiseResolvedWith(startResult);\n    uponPromise(startPromise, () => {\n        controller._started = true;\n        WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n    }, r => {\n        controller._started = true;\n        WritableStreamDealWithRejection(stream, r);\n    });\n}\nfunction SetUpWritableStreamDefaultControllerFromUnderlyingSink(stream, underlyingSink, highWaterMark, sizeAlgorithm) {\n    const controller = Object.create(WritableStreamDefaultController.prototype);\n    let startAlgorithm = () => undefined;\n    let writeAlgorithm = () => promiseResolvedWith(undefined);\n    let closeAlgorithm = () => promiseResolvedWith(undefined);\n    let abortAlgorithm = () => promiseResolvedWith(undefined);\n    if (underlyingSink.start !== undefined) {\n        startAlgorithm = () => underlyingSink.start(controller);\n    }\n    if (underlyingSink.write !== undefined) {\n        writeAlgorithm = chunk => underlyingSink.write(chunk, controller);\n    }\n    if (underlyingSink.close !== undefined) {\n        closeAlgorithm = () => underlyingSink.close();\n    }\n    if (underlyingSink.abort !== undefined) {\n        abortAlgorithm = reason => underlyingSink.abort(reason);\n    }\n    SetUpWritableStreamDefaultController(stream, controller, startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, highWaterMark, sizeAlgorithm);\n}\n// ClearAlgorithms may be called twice. Erroring the same stream in multiple ways will often result in redundant calls.\nfunction WritableStreamDefaultControllerClearAlgorithms(controller) {\n    controller._writeAlgorithm = undefined;\n    controller._closeAlgorithm = undefined;\n    controller._abortAlgorithm = undefined;\n    controller._strategySizeAlgorithm = undefined;\n}\nfunction WritableStreamDefaultControllerClose(controller) {\n    EnqueueValueWithSize(controller, closeSentinel, 0);\n    WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\nfunction WritableStreamDefaultControllerGetChunkSize(controller, chunk) {\n    try {\n        return controller._strategySizeAlgorithm(chunk);\n    }\n    catch (chunkSizeE) {\n        WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);\n        return 1;\n    }\n}\nfunction WritableStreamDefaultControllerGetDesiredSize(controller) {\n    return controller._strategyHWM - controller._queueTotalSize;\n}\nfunction WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {\n    try {\n        EnqueueValueWithSize(controller, chunk, chunkSize);\n    }\n    catch (enqueueE) {\n        WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);\n        return;\n    }\n    const stream = controller._controlledWritableStream;\n    if (!WritableStreamCloseQueuedOrInFlight(stream) && stream._state === 'writable') {\n        const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n        WritableStreamUpdateBackpressure(stream, backpressure);\n    }\n    WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n}\n// Abstract operations for the WritableStreamDefaultController.\nfunction WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {\n    const stream = controller._controlledWritableStream;\n    if (!controller._started) {\n        return;\n    }\n    if (stream._inFlightWriteRequest !== undefined) {\n        return;\n    }\n    const state = stream._state;\n    if (state === 'erroring') {\n        WritableStreamFinishErroring(stream);\n        return;\n    }\n    if (controller._queue.length === 0) {\n        return;\n    }\n    const value = PeekQueueValue(controller);\n    if (value === closeSentinel) {\n        WritableStreamDefaultControllerProcessClose(controller);\n    }\n    else {\n        WritableStreamDefaultControllerProcessWrite(controller, value);\n    }\n}\nfunction WritableStreamDefaultControllerErrorIfNeeded(controller, error) {\n    if (controller._controlledWritableStream._state === 'writable') {\n        WritableStreamDefaultControllerError(controller, error);\n    }\n}\nfunction WritableStreamDefaultControllerProcessClose(controller) {\n    const stream = controller._controlledWritableStream;\n    WritableStreamMarkCloseRequestInFlight(stream);\n    DequeueValue(controller);\n    const sinkClosePromise = controller._closeAlgorithm();\n    WritableStreamDefaultControllerClearAlgorithms(controller);\n    uponPromise(sinkClosePromise, () => {\n        WritableStreamFinishInFlightClose(stream);\n    }, reason => {\n        WritableStreamFinishInFlightCloseWithError(stream, reason);\n    });\n}\nfunction WritableStreamDefaultControllerProcessWrite(controller, chunk) {\n    const stream = controller._controlledWritableStream;\n    WritableStreamMarkFirstWriteRequestInFlight(stream);\n    const sinkWritePromise = controller._writeAlgorithm(chunk);\n    uponPromise(sinkWritePromise, () => {\n        WritableStreamFinishInFlightWrite(stream);\n        const state = stream._state;\n        DequeueValue(controller);\n        if (!WritableStreamCloseQueuedOrInFlight(stream) && state === 'writable') {\n            const backpressure = WritableStreamDefaultControllerGetBackpressure(controller);\n            WritableStreamUpdateBackpressure(stream, backpressure);\n        }\n        WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);\n    }, reason => {\n        if (stream._state === 'writable') {\n            WritableStreamDefaultControllerClearAlgorithms(controller);\n        }\n        WritableStreamFinishInFlightWriteWithError(stream, reason);\n    });\n}\nfunction WritableStreamDefaultControllerGetBackpressure(controller) {\n    const desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);\n    return desiredSize <= 0;\n}\n// A client of WritableStreamDefaultController may use these functions directly to bypass state check.\nfunction WritableStreamDefaultControllerError(controller, error) {\n    const stream = controller._controlledWritableStream;\n    WritableStreamDefaultControllerClearAlgorithms(controller);\n    WritableStreamStartErroring(stream, error);\n}\n// Helper functions for the WritableStream.\nfunction streamBrandCheckException$2(name) {\n    return new TypeError(`WritableStream.prototype.${name} can only be used on a WritableStream`);\n}\n// Helper functions for the WritableStreamDefaultWriter.\nfunction defaultWriterBrandCheckException(name) {\n    return new TypeError(`WritableStreamDefaultWriter.prototype.${name} can only be used on a WritableStreamDefaultWriter`);\n}\nfunction defaultWriterLockException(name) {\n    return new TypeError('Cannot ' + name + ' a stream using a released writer');\n}\nfunction defaultWriterClosedPromiseInitialize(writer) {\n    writer._closedPromise = newPromise((resolve, reject) => {\n        writer._closedPromise_resolve = resolve;\n        writer._closedPromise_reject = reject;\n        writer._closedPromiseState = 'pending';\n    });\n}\nfunction defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {\n    defaultWriterClosedPromiseInitialize(writer);\n    defaultWriterClosedPromiseReject(writer, reason);\n}\nfunction defaultWriterClosedPromiseInitializeAsResolved(writer) {\n    defaultWriterClosedPromiseInitialize(writer);\n    defaultWriterClosedPromiseResolve(writer);\n}\nfunction defaultWriterClosedPromiseReject(writer, reason) {\n    if (writer._closedPromise_reject === undefined) {\n        return;\n    }\n    setPromiseIsHandledToTrue(writer._closedPromise);\n    writer._closedPromise_reject(reason);\n    writer._closedPromise_resolve = undefined;\n    writer._closedPromise_reject = undefined;\n    writer._closedPromiseState = 'rejected';\n}\nfunction defaultWriterClosedPromiseResetToRejected(writer, reason) {\n    defaultWriterClosedPromiseInitializeAsRejected(writer, reason);\n}\nfunction defaultWriterClosedPromiseResolve(writer) {\n    if (writer._closedPromise_resolve === undefined) {\n        return;\n    }\n    writer._closedPromise_resolve(undefined);\n    writer._closedPromise_resolve = undefined;\n    writer._closedPromise_reject = undefined;\n    writer._closedPromiseState = 'resolved';\n}\nfunction defaultWriterReadyPromiseInitialize(writer) {\n    writer._readyPromise = newPromise((resolve, reject) => {\n        writer._readyPromise_resolve = resolve;\n        writer._readyPromise_reject = reject;\n    });\n    writer._readyPromiseState = 'pending';\n}\nfunction defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {\n    defaultWriterReadyPromiseInitialize(writer);\n    defaultWriterReadyPromiseReject(writer, reason);\n}\nfunction defaultWriterReadyPromiseInitializeAsResolved(writer) {\n    defaultWriterReadyPromiseInitialize(writer);\n    defaultWriterReadyPromiseResolve(writer);\n}\nfunction defaultWriterReadyPromiseReject(writer, reason) {\n    if (writer._readyPromise_reject === undefined) {\n        return;\n    }\n    setPromiseIsHandledToTrue(writer._readyPromise);\n    writer._readyPromise_reject(reason);\n    writer._readyPromise_resolve = undefined;\n    writer._readyPromise_reject = undefined;\n    writer._readyPromiseState = 'rejected';\n}\nfunction defaultWriterReadyPromiseReset(writer) {\n    defaultWriterReadyPromiseInitialize(writer);\n}\nfunction defaultWriterReadyPromiseResetToRejected(writer, reason) {\n    defaultWriterReadyPromiseInitializeAsRejected(writer, reason);\n}\nfunction defaultWriterReadyPromiseResolve(writer) {\n    if (writer._readyPromise_resolve === undefined) {\n        return;\n    }\n    writer._readyPromise_resolve(undefined);\n    writer._readyPromise_resolve = undefined;\n    writer._readyPromise_reject = undefined;\n    writer._readyPromiseState = 'fulfilled';\n}\n\nfunction isAbortSignal(value) {\n    if (typeof value !== 'object' || value === null) {\n        return false;\n    }\n    try {\n        return typeof value.aborted === 'boolean';\n    }\n    catch (_a) {\n        // AbortSignal.prototype.aborted throws if its brand check fails\n        return false;\n    }\n}\n\n/// <reference lib=\"dom\" />\nconst NativeDOMException = typeof DOMException !== 'undefined' ? DOMException : undefined;\n\n/// <reference types=\"node\" />\nfunction isDOMExceptionConstructor(ctor) {\n    if (!(typeof ctor === 'function' || typeof ctor === 'object')) {\n        return false;\n    }\n    try {\n        new ctor();\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\nfunction createDOMExceptionPolyfill() {\n    // eslint-disable-next-line no-shadow\n    const ctor = function DOMException(message, name) {\n        this.message = message || '';\n        this.name = name || 'Error';\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        }\n    };\n    ctor.prototype = Object.create(Error.prototype);\n    Object.defineProperty(ctor.prototype, 'constructor', { value: ctor, writable: true, configurable: true });\n    return ctor;\n}\n// eslint-disable-next-line no-redeclare\nconst DOMException$1 = isDOMExceptionConstructor(NativeDOMException) ? NativeDOMException : createDOMExceptionPolyfill();\n\nfunction ReadableStreamPipeTo(source, dest, preventClose, preventAbort, preventCancel, signal) {\n    const reader = AcquireReadableStreamDefaultReader(source);\n    const writer = AcquireWritableStreamDefaultWriter(dest);\n    source._disturbed = true;\n    let shuttingDown = false;\n    // This is used to keep track of the spec's requirement that we wait for ongoing writes during shutdown.\n    let currentWrite = promiseResolvedWith(undefined);\n    return newPromise((resolve, reject) => {\n        let abortAlgorithm;\n        if (signal !== undefined) {\n            abortAlgorithm = () => {\n                const error = new DOMException$1('Aborted', 'AbortError');\n                const actions = [];\n                if (!preventAbort) {\n                    actions.push(() => {\n                        if (dest._state === 'writable') {\n                            return WritableStreamAbort(dest, error);\n                        }\n                        return promiseResolvedWith(undefined);\n                    });\n                }\n                if (!preventCancel) {\n                    actions.push(() => {\n                        if (source._state === 'readable') {\n                            return ReadableStreamCancel(source, error);\n                        }\n                        return promiseResolvedWith(undefined);\n                    });\n                }\n                shutdownWithAction(() => Promise.all(actions.map(action => action())), true, error);\n            };\n            if (signal.aborted) {\n                abortAlgorithm();\n                return;\n            }\n            signal.addEventListener('abort', abortAlgorithm);\n        }\n        // Using reader and writer, read all chunks from this and write them to dest\n        // - Backpressure must be enforced\n        // - Shutdown must stop all activity\n        function pipeLoop() {\n            return newPromise((resolveLoop, rejectLoop) => {\n                function next(done) {\n                    if (done) {\n                        resolveLoop();\n                    }\n                    else {\n                        // Use `PerformPromiseThen` instead of `uponPromise` to avoid\n                        // adding unnecessary `.catch(rethrowAssertionErrorRejection)` handlers\n                        PerformPromiseThen(pipeStep(), next, rejectLoop);\n                    }\n                }\n                next(false);\n            });\n        }\n        function pipeStep() {\n            if (shuttingDown) {\n                return promiseResolvedWith(true);\n            }\n            return PerformPromiseThen(writer._readyPromise, () => {\n                return newPromise((resolveRead, rejectRead) => {\n                    ReadableStreamDefaultReaderRead(reader, {\n                        _chunkSteps: chunk => {\n                            currentWrite = PerformPromiseThen(WritableStreamDefaultWriterWrite(writer, chunk), undefined, noop);\n                            resolveRead(false);\n                        },\n                        _closeSteps: () => resolveRead(true),\n                        _errorSteps: rejectRead\n                    });\n                });\n            });\n        }\n        // Errors must be propagated forward\n        isOrBecomesErrored(source, reader._closedPromise, storedError => {\n            if (!preventAbort) {\n                shutdownWithAction(() => WritableStreamAbort(dest, storedError), true, storedError);\n            }\n            else {\n                shutdown(true, storedError);\n            }\n        });\n        // Errors must be propagated backward\n        isOrBecomesErrored(dest, writer._closedPromise, storedError => {\n            if (!preventCancel) {\n                shutdownWithAction(() => ReadableStreamCancel(source, storedError), true, storedError);\n            }\n            else {\n                shutdown(true, storedError);\n            }\n        });\n        // Closing must be propagated forward\n        isOrBecomesClosed(source, reader._closedPromise, () => {\n            if (!preventClose) {\n                shutdownWithAction(() => WritableStreamDefaultWriterCloseWithErrorPropagation(writer));\n            }\n            else {\n                shutdown();\n            }\n        });\n        // Closing must be propagated backward\n        if (WritableStreamCloseQueuedOrInFlight(dest) || dest._state === 'closed') {\n            const destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');\n            if (!preventCancel) {\n                shutdownWithAction(() => ReadableStreamCancel(source, destClosed), true, destClosed);\n            }\n            else {\n                shutdown(true, destClosed);\n            }\n        }\n        setPromiseIsHandledToTrue(pipeLoop());\n        function waitForWritesToFinish() {\n            // Another write may have started while we were waiting on this currentWrite, so we have to be sure to wait\n            // for that too.\n            const oldCurrentWrite = currentWrite;\n            return PerformPromiseThen(currentWrite, () => oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined);\n        }\n        function isOrBecomesErrored(stream, promise, action) {\n            if (stream._state === 'errored') {\n                action(stream._storedError);\n            }\n            else {\n                uponRejection(promise, action);\n            }\n        }\n        function isOrBecomesClosed(stream, promise, action) {\n            if (stream._state === 'closed') {\n                action();\n            }\n            else {\n                uponFulfillment(promise, action);\n            }\n        }\n        function shutdownWithAction(action, originalIsError, originalError) {\n            if (shuttingDown) {\n                return;\n            }\n            shuttingDown = true;\n            if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n                uponFulfillment(waitForWritesToFinish(), doTheRest);\n            }\n            else {\n                doTheRest();\n            }\n            function doTheRest() {\n                uponPromise(action(), () => finalize(originalIsError, originalError), newError => finalize(true, newError));\n            }\n        }\n        function shutdown(isError, error) {\n            if (shuttingDown) {\n                return;\n            }\n            shuttingDown = true;\n            if (dest._state === 'writable' && !WritableStreamCloseQueuedOrInFlight(dest)) {\n                uponFulfillment(waitForWritesToFinish(), () => finalize(isError, error));\n            }\n            else {\n                finalize(isError, error);\n            }\n        }\n        function finalize(isError, error) {\n            WritableStreamDefaultWriterRelease(writer);\n            ReadableStreamReaderGenericRelease(reader);\n            if (signal !== undefined) {\n                signal.removeEventListener('abort', abortAlgorithm);\n            }\n            if (isError) {\n                reject(error);\n            }\n            else {\n                resolve(undefined);\n            }\n        }\n    });\n}\n\n/**\n * Allows control of a {@link ReadableStream | readable stream}'s state and internal queue.\n *\n * @public\n */\nclass ReadableStreamDefaultController {\n    constructor() {\n        throw new TypeError('Illegal constructor');\n    }\n    /**\n     * Returns the desired size to fill the controlled stream's internal queue. It can be negative, if the queue is\n     * over-full. An underlying source ought to use this information to determine when and how to apply backpressure.\n     */\n    get desiredSize() {\n        if (!IsReadableStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException$1('desiredSize');\n        }\n        return ReadableStreamDefaultControllerGetDesiredSize(this);\n    }\n    /**\n     * Closes the controlled readable stream. Consumers will still be able to read any previously-enqueued chunks from\n     * the stream, but once those are read, the stream will become closed.\n     */\n    close() {\n        if (!IsReadableStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException$1('close');\n        }\n        if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n            throw new TypeError('The stream is not in a state that permits close');\n        }\n        ReadableStreamDefaultControllerClose(this);\n    }\n    enqueue(chunk = undefined) {\n        if (!IsReadableStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException$1('enqueue');\n        }\n        if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(this)) {\n            throw new TypeError('The stream is not in a state that permits enqueue');\n        }\n        return ReadableStreamDefaultControllerEnqueue(this, chunk);\n    }\n    /**\n     * Errors the controlled readable stream, making all future interactions with it fail with the given error `e`.\n     */\n    error(e = undefined) {\n        if (!IsReadableStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException$1('error');\n        }\n        ReadableStreamDefaultControllerError(this, e);\n    }\n    /** @internal */\n    [CancelSteps](reason) {\n        ResetQueue(this);\n        const result = this._cancelAlgorithm(reason);\n        ReadableStreamDefaultControllerClearAlgorithms(this);\n        return result;\n    }\n    /** @internal */\n    [PullSteps](readRequest) {\n        const stream = this._controlledReadableStream;\n        if (this._queue.length > 0) {\n            const chunk = DequeueValue(this);\n            if (this._closeRequested && this._queue.length === 0) {\n                ReadableStreamDefaultControllerClearAlgorithms(this);\n                ReadableStreamClose(stream);\n            }\n            else {\n                ReadableStreamDefaultControllerCallPullIfNeeded(this);\n            }\n            readRequest._chunkSteps(chunk);\n        }\n        else {\n            ReadableStreamAddReadRequest(stream, readRequest);\n            ReadableStreamDefaultControllerCallPullIfNeeded(this);\n        }\n    }\n}\nObject.defineProperties(ReadableStreamDefaultController.prototype, {\n    close: { enumerable: true },\n    enqueue: { enumerable: true },\n    error: { enumerable: true },\n    desiredSize: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(ReadableStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n        value: 'ReadableStreamDefaultController',\n        configurable: true\n    });\n}\n// Abstract operations for the ReadableStreamDefaultController.\nfunction IsReadableStreamDefaultController(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_controlledReadableStream')) {\n        return false;\n    }\n    return true;\n}\nfunction ReadableStreamDefaultControllerCallPullIfNeeded(controller) {\n    const shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);\n    if (!shouldPull) {\n        return;\n    }\n    if (controller._pulling) {\n        controller._pullAgain = true;\n        return;\n    }\n    controller._pulling = true;\n    const pullPromise = controller._pullAlgorithm();\n    uponPromise(pullPromise, () => {\n        controller._pulling = false;\n        if (controller._pullAgain) {\n            controller._pullAgain = false;\n            ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n        }\n    }, e => {\n        ReadableStreamDefaultControllerError(controller, e);\n    });\n}\nfunction ReadableStreamDefaultControllerShouldCallPull(controller) {\n    const stream = controller._controlledReadableStream;\n    if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n        return false;\n    }\n    if (!controller._started) {\n        return false;\n    }\n    if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n        return true;\n    }\n    const desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);\n    if (desiredSize > 0) {\n        return true;\n    }\n    return false;\n}\nfunction ReadableStreamDefaultControllerClearAlgorithms(controller) {\n    controller._pullAlgorithm = undefined;\n    controller._cancelAlgorithm = undefined;\n    controller._strategySizeAlgorithm = undefined;\n}\n// A client of ReadableStreamDefaultController may use these functions directly to bypass state check.\nfunction ReadableStreamDefaultControllerClose(controller) {\n    if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n        return;\n    }\n    const stream = controller._controlledReadableStream;\n    controller._closeRequested = true;\n    if (controller._queue.length === 0) {\n        ReadableStreamDefaultControllerClearAlgorithms(controller);\n        ReadableStreamClose(stream);\n    }\n}\nfunction ReadableStreamDefaultControllerEnqueue(controller, chunk) {\n    if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(controller)) {\n        return;\n    }\n    const stream = controller._controlledReadableStream;\n    if (IsReadableStreamLocked(stream) && ReadableStreamGetNumReadRequests(stream) > 0) {\n        ReadableStreamFulfillReadRequest(stream, chunk, false);\n    }\n    else {\n        let chunkSize;\n        try {\n            chunkSize = controller._strategySizeAlgorithm(chunk);\n        }\n        catch (chunkSizeE) {\n            ReadableStreamDefaultControllerError(controller, chunkSizeE);\n            throw chunkSizeE;\n        }\n        try {\n            EnqueueValueWithSize(controller, chunk, chunkSize);\n        }\n        catch (enqueueE) {\n            ReadableStreamDefaultControllerError(controller, enqueueE);\n            throw enqueueE;\n        }\n    }\n    ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n}\nfunction ReadableStreamDefaultControllerError(controller, e) {\n    const stream = controller._controlledReadableStream;\n    if (stream._state !== 'readable') {\n        return;\n    }\n    ResetQueue(controller);\n    ReadableStreamDefaultControllerClearAlgorithms(controller);\n    ReadableStreamError(stream, e);\n}\nfunction ReadableStreamDefaultControllerGetDesiredSize(controller) {\n    const state = controller._controlledReadableStream._state;\n    if (state === 'errored') {\n        return null;\n    }\n    if (state === 'closed') {\n        return 0;\n    }\n    return controller._strategyHWM - controller._queueTotalSize;\n}\n// This is used in the implementation of TransformStream.\nfunction ReadableStreamDefaultControllerHasBackpressure(controller) {\n    if (ReadableStreamDefaultControllerShouldCallPull(controller)) {\n        return false;\n    }\n    return true;\n}\nfunction ReadableStreamDefaultControllerCanCloseOrEnqueue(controller) {\n    const state = controller._controlledReadableStream._state;\n    if (!controller._closeRequested && state === 'readable') {\n        return true;\n    }\n    return false;\n}\nfunction SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm) {\n    controller._controlledReadableStream = stream;\n    controller._queue = undefined;\n    controller._queueTotalSize = undefined;\n    ResetQueue(controller);\n    controller._started = false;\n    controller._closeRequested = false;\n    controller._pullAgain = false;\n    controller._pulling = false;\n    controller._strategySizeAlgorithm = sizeAlgorithm;\n    controller._strategyHWM = highWaterMark;\n    controller._pullAlgorithm = pullAlgorithm;\n    controller._cancelAlgorithm = cancelAlgorithm;\n    stream._readableStreamController = controller;\n    const startResult = startAlgorithm();\n    uponPromise(promiseResolvedWith(startResult), () => {\n        controller._started = true;\n        ReadableStreamDefaultControllerCallPullIfNeeded(controller);\n    }, r => {\n        ReadableStreamDefaultControllerError(controller, r);\n    });\n}\nfunction SetUpReadableStreamDefaultControllerFromUnderlyingSource(stream, underlyingSource, highWaterMark, sizeAlgorithm) {\n    const controller = Object.create(ReadableStreamDefaultController.prototype);\n    let startAlgorithm = () => undefined;\n    let pullAlgorithm = () => promiseResolvedWith(undefined);\n    let cancelAlgorithm = () => promiseResolvedWith(undefined);\n    if (underlyingSource.start !== undefined) {\n        startAlgorithm = () => underlyingSource.start(controller);\n    }\n    if (underlyingSource.pull !== undefined) {\n        pullAlgorithm = () => underlyingSource.pull(controller);\n    }\n    if (underlyingSource.cancel !== undefined) {\n        cancelAlgorithm = reason => underlyingSource.cancel(reason);\n    }\n    SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n}\n// Helper functions for the ReadableStreamDefaultController.\nfunction defaultControllerBrandCheckException$1(name) {\n    return new TypeError(`ReadableStreamDefaultController.prototype.${name} can only be used on a ReadableStreamDefaultController`);\n}\n\nfunction ReadableStreamTee(stream, cloneForBranch2) {\n    const reader = AcquireReadableStreamDefaultReader(stream);\n    let reading = false;\n    let canceled1 = false;\n    let canceled2 = false;\n    let reason1;\n    let reason2;\n    let branch1;\n    let branch2;\n    let resolveCancelPromise;\n    const cancelPromise = newPromise(resolve => {\n        resolveCancelPromise = resolve;\n    });\n    function pullAlgorithm() {\n        if (reading) {\n            return promiseResolvedWith(undefined);\n        }\n        reading = true;\n        const readRequest = {\n            _chunkSteps: value => {\n                // This needs to be delayed a microtask because it takes at least a microtask to detect errors (using\n                // reader._closedPromise below), and we want errors in stream to error both branches immediately. We cannot let\n                // successful synchronously-available reads get ahead of asynchronously-available errors.\n                queueMicrotask(() => {\n                    reading = false;\n                    const value1 = value;\n                    const value2 = value;\n                    // There is no way to access the cloning code right now in the reference implementation.\n                    // If we add one then we'll need an implementation for serializable objects.\n                    // if (!canceled2 && cloneForBranch2) {\n                    //   value2 = StructuredDeserialize(StructuredSerialize(value2));\n                    // }\n                    if (!canceled1) {\n                        ReadableStreamDefaultControllerEnqueue(branch1._readableStreamController, value1);\n                    }\n                    if (!canceled2) {\n                        ReadableStreamDefaultControllerEnqueue(branch2._readableStreamController, value2);\n                    }\n                });\n            },\n            _closeSteps: () => {\n                reading = false;\n                if (!canceled1) {\n                    ReadableStreamDefaultControllerClose(branch1._readableStreamController);\n                }\n                if (!canceled2) {\n                    ReadableStreamDefaultControllerClose(branch2._readableStreamController);\n                }\n                if (!canceled1 || !canceled2) {\n                    resolveCancelPromise(undefined);\n                }\n            },\n            _errorSteps: () => {\n                reading = false;\n            }\n        };\n        ReadableStreamDefaultReaderRead(reader, readRequest);\n        return promiseResolvedWith(undefined);\n    }\n    function cancel1Algorithm(reason) {\n        canceled1 = true;\n        reason1 = reason;\n        if (canceled2) {\n            const compositeReason = CreateArrayFromList([reason1, reason2]);\n            const cancelResult = ReadableStreamCancel(stream, compositeReason);\n            resolveCancelPromise(cancelResult);\n        }\n        return cancelPromise;\n    }\n    function cancel2Algorithm(reason) {\n        canceled2 = true;\n        reason2 = reason;\n        if (canceled1) {\n            const compositeReason = CreateArrayFromList([reason1, reason2]);\n            const cancelResult = ReadableStreamCancel(stream, compositeReason);\n            resolveCancelPromise(cancelResult);\n        }\n        return cancelPromise;\n    }\n    function startAlgorithm() {\n        // do nothing\n    }\n    branch1 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel1Algorithm);\n    branch2 = CreateReadableStream(startAlgorithm, pullAlgorithm, cancel2Algorithm);\n    uponRejection(reader._closedPromise, (r) => {\n        ReadableStreamDefaultControllerError(branch1._readableStreamController, r);\n        ReadableStreamDefaultControllerError(branch2._readableStreamController, r);\n        if (!canceled1 || !canceled2) {\n            resolveCancelPromise(undefined);\n        }\n    });\n    return [branch1, branch2];\n}\n\nfunction convertUnderlyingDefaultOrByteSource(source, context) {\n    assertDictionary(source, context);\n    const original = source;\n    const autoAllocateChunkSize = original === null || original === void 0 ? void 0 : original.autoAllocateChunkSize;\n    const cancel = original === null || original === void 0 ? void 0 : original.cancel;\n    const pull = original === null || original === void 0 ? void 0 : original.pull;\n    const start = original === null || original === void 0 ? void 0 : original.start;\n    const type = original === null || original === void 0 ? void 0 : original.type;\n    return {\n        autoAllocateChunkSize: autoAllocateChunkSize === undefined ?\n            undefined :\n            convertUnsignedLongLongWithEnforceRange(autoAllocateChunkSize, `${context} has member 'autoAllocateChunkSize' that`),\n        cancel: cancel === undefined ?\n            undefined :\n            convertUnderlyingSourceCancelCallback(cancel, original, `${context} has member 'cancel' that`),\n        pull: pull === undefined ?\n            undefined :\n            convertUnderlyingSourcePullCallback(pull, original, `${context} has member 'pull' that`),\n        start: start === undefined ?\n            undefined :\n            convertUnderlyingSourceStartCallback(start, original, `${context} has member 'start' that`),\n        type: type === undefined ? undefined : convertReadableStreamType(type, `${context} has member 'type' that`)\n    };\n}\nfunction convertUnderlyingSourceCancelCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (reason) => promiseCall(fn, original, [reason]);\n}\nfunction convertUnderlyingSourcePullCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (controller) => promiseCall(fn, original, [controller]);\n}\nfunction convertUnderlyingSourceStartCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (controller) => reflectCall(fn, original, [controller]);\n}\nfunction convertReadableStreamType(type, context) {\n    type = `${type}`;\n    if (type !== 'bytes') {\n        throw new TypeError(`${context} '${type}' is not a valid enumeration value for ReadableStreamType`);\n    }\n    return type;\n}\n\nfunction convertReaderOptions(options, context) {\n    assertDictionary(options, context);\n    const mode = options === null || options === void 0 ? void 0 : options.mode;\n    return {\n        mode: mode === undefined ? undefined : convertReadableStreamReaderMode(mode, `${context} has member 'mode' that`)\n    };\n}\nfunction convertReadableStreamReaderMode(mode, context) {\n    mode = `${mode}`;\n    if (mode !== 'byob') {\n        throw new TypeError(`${context} '${mode}' is not a valid enumeration value for ReadableStreamReaderMode`);\n    }\n    return mode;\n}\n\nfunction convertIteratorOptions(options, context) {\n    assertDictionary(options, context);\n    const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n    return { preventCancel: Boolean(preventCancel) };\n}\n\nfunction convertPipeOptions(options, context) {\n    assertDictionary(options, context);\n    const preventAbort = options === null || options === void 0 ? void 0 : options.preventAbort;\n    const preventCancel = options === null || options === void 0 ? void 0 : options.preventCancel;\n    const preventClose = options === null || options === void 0 ? void 0 : options.preventClose;\n    const signal = options === null || options === void 0 ? void 0 : options.signal;\n    if (signal !== undefined) {\n        assertAbortSignal(signal, `${context} has member 'signal' that`);\n    }\n    return {\n        preventAbort: Boolean(preventAbort),\n        preventCancel: Boolean(preventCancel),\n        preventClose: Boolean(preventClose),\n        signal\n    };\n}\nfunction assertAbortSignal(signal, context) {\n    if (!isAbortSignal(signal)) {\n        throw new TypeError(`${context} is not an AbortSignal.`);\n    }\n}\n\nfunction convertReadableWritablePair(pair, context) {\n    assertDictionary(pair, context);\n    const readable = pair === null || pair === void 0 ? void 0 : pair.readable;\n    assertRequiredField(readable, 'readable', 'ReadableWritablePair');\n    assertReadableStream(readable, `${context} has member 'readable' that`);\n    const writable = pair === null || pair === void 0 ? void 0 : pair.writable;\n    assertRequiredField(writable, 'writable', 'ReadableWritablePair');\n    assertWritableStream(writable, `${context} has member 'writable' that`);\n    return { readable, writable };\n}\n\n/**\n * A readable stream represents a source of data, from which you can read.\n *\n * @public\n */\nclass ReadableStream {\n    constructor(rawUnderlyingSource = {}, rawStrategy = {}) {\n        if (rawUnderlyingSource === undefined) {\n            rawUnderlyingSource = null;\n        }\n        else {\n            assertObject(rawUnderlyingSource, 'First parameter');\n        }\n        const strategy = convertQueuingStrategy(rawStrategy, 'Second parameter');\n        const underlyingSource = convertUnderlyingDefaultOrByteSource(rawUnderlyingSource, 'First parameter');\n        InitializeReadableStream(this);\n        if (underlyingSource.type === 'bytes') {\n            if (strategy.size !== undefined) {\n                throw new RangeError('The strategy for a byte stream cannot have a size function');\n            }\n            const highWaterMark = ExtractHighWaterMark(strategy, 0);\n            SetUpReadableByteStreamControllerFromUnderlyingSource(this, underlyingSource, highWaterMark);\n        }\n        else {\n            const sizeAlgorithm = ExtractSizeAlgorithm(strategy);\n            const highWaterMark = ExtractHighWaterMark(strategy, 1);\n            SetUpReadableStreamDefaultControllerFromUnderlyingSource(this, underlyingSource, highWaterMark, sizeAlgorithm);\n        }\n    }\n    /**\n     * Whether or not the readable stream is locked to a {@link ReadableStreamDefaultReader | reader}.\n     */\n    get locked() {\n        if (!IsReadableStream(this)) {\n            throw streamBrandCheckException$1('locked');\n        }\n        return IsReadableStreamLocked(this);\n    }\n    /**\n     * Cancels the stream, signaling a loss of interest in the stream by a consumer.\n     *\n     * The supplied `reason` argument will be given to the underlying source's {@link UnderlyingSource.cancel | cancel()}\n     * method, which might or might not use it.\n     */\n    cancel(reason = undefined) {\n        if (!IsReadableStream(this)) {\n            return promiseRejectedWith(streamBrandCheckException$1('cancel'));\n        }\n        if (IsReadableStreamLocked(this)) {\n            return promiseRejectedWith(new TypeError('Cannot cancel a stream that already has a reader'));\n        }\n        return ReadableStreamCancel(this, reason);\n    }\n    getReader(rawOptions = undefined) {\n        if (!IsReadableStream(this)) {\n            throw streamBrandCheckException$1('getReader');\n        }\n        const options = convertReaderOptions(rawOptions, 'First parameter');\n        if (options.mode === undefined) {\n            return AcquireReadableStreamDefaultReader(this);\n        }\n        return AcquireReadableStreamBYOBReader(this);\n    }\n    pipeThrough(rawTransform, rawOptions = {}) {\n        if (!IsReadableStream(this)) {\n            throw streamBrandCheckException$1('pipeThrough');\n        }\n        assertRequiredArgument(rawTransform, 1, 'pipeThrough');\n        const transform = convertReadableWritablePair(rawTransform, 'First parameter');\n        const options = convertPipeOptions(rawOptions, 'Second parameter');\n        if (IsReadableStreamLocked(this)) {\n            throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked ReadableStream');\n        }\n        if (IsWritableStreamLocked(transform.writable)) {\n            throw new TypeError('ReadableStream.prototype.pipeThrough cannot be used on a locked WritableStream');\n        }\n        const promise = ReadableStreamPipeTo(this, transform.writable, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n        setPromiseIsHandledToTrue(promise);\n        return transform.readable;\n    }\n    pipeTo(destination, rawOptions = {}) {\n        if (!IsReadableStream(this)) {\n            return promiseRejectedWith(streamBrandCheckException$1('pipeTo'));\n        }\n        if (destination === undefined) {\n            return promiseRejectedWith(`Parameter 1 is required in 'pipeTo'.`);\n        }\n        if (!IsWritableStream(destination)) {\n            return promiseRejectedWith(new TypeError(`ReadableStream.prototype.pipeTo's first argument must be a WritableStream`));\n        }\n        let options;\n        try {\n            options = convertPipeOptions(rawOptions, 'Second parameter');\n        }\n        catch (e) {\n            return promiseRejectedWith(e);\n        }\n        if (IsReadableStreamLocked(this)) {\n            return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));\n        }\n        if (IsWritableStreamLocked(destination)) {\n            return promiseRejectedWith(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));\n        }\n        return ReadableStreamPipeTo(this, destination, options.preventClose, options.preventAbort, options.preventCancel, options.signal);\n    }\n    /**\n     * Tees this readable stream, returning a two-element array containing the two resulting branches as\n     * new {@link ReadableStream} instances.\n     *\n     * Teeing a stream will lock it, preventing any other consumer from acquiring a reader.\n     * To cancel the stream, cancel both of the resulting branches; a composite cancellation reason will then be\n     * propagated to the stream's underlying source.\n     *\n     * Note that the chunks seen in each branch will be the same object. If the chunks are not immutable,\n     * this could allow interference between the two branches.\n     */\n    tee() {\n        if (!IsReadableStream(this)) {\n            throw streamBrandCheckException$1('tee');\n        }\n        const branches = ReadableStreamTee(this);\n        return CreateArrayFromList(branches);\n    }\n    values(rawOptions = undefined) {\n        if (!IsReadableStream(this)) {\n            throw streamBrandCheckException$1('values');\n        }\n        const options = convertIteratorOptions(rawOptions, 'First parameter');\n        return AcquireReadableStreamAsyncIterator(this, options.preventCancel);\n    }\n}\nObject.defineProperties(ReadableStream.prototype, {\n    cancel: { enumerable: true },\n    getReader: { enumerable: true },\n    pipeThrough: { enumerable: true },\n    pipeTo: { enumerable: true },\n    tee: { enumerable: true },\n    values: { enumerable: true },\n    locked: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.toStringTag, {\n        value: 'ReadableStream',\n        configurable: true\n    });\n}\nif (typeof SymbolPolyfill.asyncIterator === 'symbol') {\n    Object.defineProperty(ReadableStream.prototype, SymbolPolyfill.asyncIterator, {\n        value: ReadableStream.prototype.values,\n        writable: true,\n        configurable: true\n    });\n}\n// Abstract operations for the ReadableStream.\n// Throws if and only if startAlgorithm throws.\nfunction CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark = 1, sizeAlgorithm = () => 1) {\n    const stream = Object.create(ReadableStream.prototype);\n    InitializeReadableStream(stream);\n    const controller = Object.create(ReadableStreamDefaultController.prototype);\n    SetUpReadableStreamDefaultController(stream, controller, startAlgorithm, pullAlgorithm, cancelAlgorithm, highWaterMark, sizeAlgorithm);\n    return stream;\n}\nfunction InitializeReadableStream(stream) {\n    stream._state = 'readable';\n    stream._reader = undefined;\n    stream._storedError = undefined;\n    stream._disturbed = false;\n}\nfunction IsReadableStream(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {\n        return false;\n    }\n    return true;\n}\nfunction IsReadableStreamLocked(stream) {\n    if (stream._reader === undefined) {\n        return false;\n    }\n    return true;\n}\n// ReadableStream API exposed for controllers.\nfunction ReadableStreamCancel(stream, reason) {\n    stream._disturbed = true;\n    if (stream._state === 'closed') {\n        return promiseResolvedWith(undefined);\n    }\n    if (stream._state === 'errored') {\n        return promiseRejectedWith(stream._storedError);\n    }\n    ReadableStreamClose(stream);\n    const sourceCancelPromise = stream._readableStreamController[CancelSteps](reason);\n    return transformPromiseWith(sourceCancelPromise, noop);\n}\nfunction ReadableStreamClose(stream) {\n    stream._state = 'closed';\n    const reader = stream._reader;\n    if (reader === undefined) {\n        return;\n    }\n    defaultReaderClosedPromiseResolve(reader);\n    if (IsReadableStreamDefaultReader(reader)) {\n        reader._readRequests.forEach(readRequest => {\n            readRequest._closeSteps();\n        });\n        reader._readRequests = new SimpleQueue();\n    }\n}\nfunction ReadableStreamError(stream, e) {\n    stream._state = 'errored';\n    stream._storedError = e;\n    const reader = stream._reader;\n    if (reader === undefined) {\n        return;\n    }\n    defaultReaderClosedPromiseReject(reader, e);\n    if (IsReadableStreamDefaultReader(reader)) {\n        reader._readRequests.forEach(readRequest => {\n            readRequest._errorSteps(e);\n        });\n        reader._readRequests = new SimpleQueue();\n    }\n    else {\n        reader._readIntoRequests.forEach(readIntoRequest => {\n            readIntoRequest._errorSteps(e);\n        });\n        reader._readIntoRequests = new SimpleQueue();\n    }\n}\n// Helper functions for the ReadableStream.\nfunction streamBrandCheckException$1(name) {\n    return new TypeError(`ReadableStream.prototype.${name} can only be used on a ReadableStream`);\n}\n\nfunction convertQueuingStrategyInit(init, context) {\n    assertDictionary(init, context);\n    const highWaterMark = init === null || init === void 0 ? void 0 : init.highWaterMark;\n    assertRequiredField(highWaterMark, 'highWaterMark', 'QueuingStrategyInit');\n    return {\n        highWaterMark: convertUnrestrictedDouble(highWaterMark)\n    };\n}\n\nconst byteLengthSizeFunction = function size(chunk) {\n    return chunk.byteLength;\n};\n/**\n * A queuing strategy that counts the number of bytes in each chunk.\n *\n * @public\n */\nclass ByteLengthQueuingStrategy {\n    constructor(options) {\n        assertRequiredArgument(options, 1, 'ByteLengthQueuingStrategy');\n        options = convertQueuingStrategyInit(options, 'First parameter');\n        this._byteLengthQueuingStrategyHighWaterMark = options.highWaterMark;\n    }\n    /**\n     * Returns the high water mark provided to the constructor.\n     */\n    get highWaterMark() {\n        if (!IsByteLengthQueuingStrategy(this)) {\n            throw byteLengthBrandCheckException('highWaterMark');\n        }\n        return this._byteLengthQueuingStrategyHighWaterMark;\n    }\n    /**\n     * Measures the size of `chunk` by returning the value of its `byteLength` property.\n     */\n    get size() {\n        if (!IsByteLengthQueuingStrategy(this)) {\n            throw byteLengthBrandCheckException('size');\n        }\n        return byteLengthSizeFunction;\n    }\n}\nObject.defineProperties(ByteLengthQueuingStrategy.prototype, {\n    highWaterMark: { enumerable: true },\n    size: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(ByteLengthQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n        value: 'ByteLengthQueuingStrategy',\n        configurable: true\n    });\n}\n// Helper functions for the ByteLengthQueuingStrategy.\nfunction byteLengthBrandCheckException(name) {\n    return new TypeError(`ByteLengthQueuingStrategy.prototype.${name} can only be used on a ByteLengthQueuingStrategy`);\n}\nfunction IsByteLengthQueuingStrategy(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_byteLengthQueuingStrategyHighWaterMark')) {\n        return false;\n    }\n    return true;\n}\n\nconst countSizeFunction = function size() {\n    return 1;\n};\n/**\n * A queuing strategy that counts the number of chunks.\n *\n * @public\n */\nclass CountQueuingStrategy {\n    constructor(options) {\n        assertRequiredArgument(options, 1, 'CountQueuingStrategy');\n        options = convertQueuingStrategyInit(options, 'First parameter');\n        this._countQueuingStrategyHighWaterMark = options.highWaterMark;\n    }\n    /**\n     * Returns the high water mark provided to the constructor.\n     */\n    get highWaterMark() {\n        if (!IsCountQueuingStrategy(this)) {\n            throw countBrandCheckException('highWaterMark');\n        }\n        return this._countQueuingStrategyHighWaterMark;\n    }\n    /**\n     * Measures the size of `chunk` by always returning 1.\n     * This ensures that the total queue size is a count of the number of chunks in the queue.\n     */\n    get size() {\n        if (!IsCountQueuingStrategy(this)) {\n            throw countBrandCheckException('size');\n        }\n        return countSizeFunction;\n    }\n}\nObject.defineProperties(CountQueuingStrategy.prototype, {\n    highWaterMark: { enumerable: true },\n    size: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(CountQueuingStrategy.prototype, SymbolPolyfill.toStringTag, {\n        value: 'CountQueuingStrategy',\n        configurable: true\n    });\n}\n// Helper functions for the CountQueuingStrategy.\nfunction countBrandCheckException(name) {\n    return new TypeError(`CountQueuingStrategy.prototype.${name} can only be used on a CountQueuingStrategy`);\n}\nfunction IsCountQueuingStrategy(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_countQueuingStrategyHighWaterMark')) {\n        return false;\n    }\n    return true;\n}\n\nfunction convertTransformer(original, context) {\n    assertDictionary(original, context);\n    const flush = original === null || original === void 0 ? void 0 : original.flush;\n    const readableType = original === null || original === void 0 ? void 0 : original.readableType;\n    const start = original === null || original === void 0 ? void 0 : original.start;\n    const transform = original === null || original === void 0 ? void 0 : original.transform;\n    const writableType = original === null || original === void 0 ? void 0 : original.writableType;\n    return {\n        flush: flush === undefined ?\n            undefined :\n            convertTransformerFlushCallback(flush, original, `${context} has member 'flush' that`),\n        readableType,\n        start: start === undefined ?\n            undefined :\n            convertTransformerStartCallback(start, original, `${context} has member 'start' that`),\n        transform: transform === undefined ?\n            undefined :\n            convertTransformerTransformCallback(transform, original, `${context} has member 'transform' that`),\n        writableType\n    };\n}\nfunction convertTransformerFlushCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (controller) => promiseCall(fn, original, [controller]);\n}\nfunction convertTransformerStartCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (controller) => reflectCall(fn, original, [controller]);\n}\nfunction convertTransformerTransformCallback(fn, original, context) {\n    assertFunction(fn, context);\n    return (chunk, controller) => promiseCall(fn, original, [chunk, controller]);\n}\n\n// Class TransformStream\n/**\n * A transform stream consists of a pair of streams: a {@link WritableStream | writable stream},\n * known as its writable side, and a {@link ReadableStream | readable stream}, known as its readable side.\n * In a manner specific to the transform stream in question, writes to the writable side result in new data being\n * made available for reading from the readable side.\n *\n * @public\n */\nclass TransformStream {\n    constructor(rawTransformer = {}, rawWritableStrategy = {}, rawReadableStrategy = {}) {\n        if (rawTransformer === undefined) {\n            rawTransformer = null;\n        }\n        const writableStrategy = convertQueuingStrategy(rawWritableStrategy, 'Second parameter');\n        const readableStrategy = convertQueuingStrategy(rawReadableStrategy, 'Third parameter');\n        const transformer = convertTransformer(rawTransformer, 'First parameter');\n        if (transformer.readableType !== undefined) {\n            throw new RangeError('Invalid readableType specified');\n        }\n        if (transformer.writableType !== undefined) {\n            throw new RangeError('Invalid writableType specified');\n        }\n        const readableHighWaterMark = ExtractHighWaterMark(readableStrategy, 0);\n        const readableSizeAlgorithm = ExtractSizeAlgorithm(readableStrategy);\n        const writableHighWaterMark = ExtractHighWaterMark(writableStrategy, 1);\n        const writableSizeAlgorithm = ExtractSizeAlgorithm(writableStrategy);\n        let startPromise_resolve;\n        const startPromise = newPromise(resolve => {\n            startPromise_resolve = resolve;\n        });\n        InitializeTransformStream(this, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n        SetUpTransformStreamDefaultControllerFromTransformer(this, transformer);\n        if (transformer.start !== undefined) {\n            startPromise_resolve(transformer.start(this._transformStreamController));\n        }\n        else {\n            startPromise_resolve(undefined);\n        }\n    }\n    /**\n     * The readable side of the transform stream.\n     */\n    get readable() {\n        if (!IsTransformStream(this)) {\n            throw streamBrandCheckException('readable');\n        }\n        return this._readable;\n    }\n    /**\n     * The writable side of the transform stream.\n     */\n    get writable() {\n        if (!IsTransformStream(this)) {\n            throw streamBrandCheckException('writable');\n        }\n        return this._writable;\n    }\n}\nObject.defineProperties(TransformStream.prototype, {\n    readable: { enumerable: true },\n    writable: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(TransformStream.prototype, SymbolPolyfill.toStringTag, {\n        value: 'TransformStream',\n        configurable: true\n    });\n}\nfunction InitializeTransformStream(stream, startPromise, writableHighWaterMark, writableSizeAlgorithm, readableHighWaterMark, readableSizeAlgorithm) {\n    function startAlgorithm() {\n        return startPromise;\n    }\n    function writeAlgorithm(chunk) {\n        return TransformStreamDefaultSinkWriteAlgorithm(stream, chunk);\n    }\n    function abortAlgorithm(reason) {\n        return TransformStreamDefaultSinkAbortAlgorithm(stream, reason);\n    }\n    function closeAlgorithm() {\n        return TransformStreamDefaultSinkCloseAlgorithm(stream);\n    }\n    stream._writable = CreateWritableStream(startAlgorithm, writeAlgorithm, closeAlgorithm, abortAlgorithm, writableHighWaterMark, writableSizeAlgorithm);\n    function pullAlgorithm() {\n        return TransformStreamDefaultSourcePullAlgorithm(stream);\n    }\n    function cancelAlgorithm(reason) {\n        TransformStreamErrorWritableAndUnblockWrite(stream, reason);\n        return promiseResolvedWith(undefined);\n    }\n    stream._readable = CreateReadableStream(startAlgorithm, pullAlgorithm, cancelAlgorithm, readableHighWaterMark, readableSizeAlgorithm);\n    // The [[backpressure]] slot is set to undefined so that it can be initialised by TransformStreamSetBackpressure.\n    stream._backpressure = undefined;\n    stream._backpressureChangePromise = undefined;\n    stream._backpressureChangePromise_resolve = undefined;\n    TransformStreamSetBackpressure(stream, true);\n    stream._transformStreamController = undefined;\n}\nfunction IsTransformStream(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {\n        return false;\n    }\n    return true;\n}\n// This is a no-op if both sides are already errored.\nfunction TransformStreamError(stream, e) {\n    ReadableStreamDefaultControllerError(stream._readable._readableStreamController, e);\n    TransformStreamErrorWritableAndUnblockWrite(stream, e);\n}\nfunction TransformStreamErrorWritableAndUnblockWrite(stream, e) {\n    TransformStreamDefaultControllerClearAlgorithms(stream._transformStreamController);\n    WritableStreamDefaultControllerErrorIfNeeded(stream._writable._writableStreamController, e);\n    if (stream._backpressure) {\n        // Pretend that pull() was called to permit any pending write() calls to complete. TransformStreamSetBackpressure()\n        // cannot be called from enqueue() or pull() once the ReadableStream is errored, so this will will be the final time\n        // _backpressure is set.\n        TransformStreamSetBackpressure(stream, false);\n    }\n}\nfunction TransformStreamSetBackpressure(stream, backpressure) {\n    // Passes also when called during construction.\n    if (stream._backpressureChangePromise !== undefined) {\n        stream._backpressureChangePromise_resolve();\n    }\n    stream._backpressureChangePromise = newPromise(resolve => {\n        stream._backpressureChangePromise_resolve = resolve;\n    });\n    stream._backpressure = backpressure;\n}\n// Class TransformStreamDefaultController\n/**\n * Allows control of the {@link ReadableStream} and {@link WritableStream} of the associated {@link TransformStream}.\n *\n * @public\n */\nclass TransformStreamDefaultController {\n    constructor() {\n        throw new TypeError('Illegal constructor');\n    }\n    /**\n     * Returns the desired size to fill the readable side’s internal queue. It can be negative, if the queue is over-full.\n     */\n    get desiredSize() {\n        if (!IsTransformStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException('desiredSize');\n        }\n        const readableController = this._controlledTransformStream._readable._readableStreamController;\n        return ReadableStreamDefaultControllerGetDesiredSize(readableController);\n    }\n    enqueue(chunk = undefined) {\n        if (!IsTransformStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException('enqueue');\n        }\n        TransformStreamDefaultControllerEnqueue(this, chunk);\n    }\n    /**\n     * Errors both the readable side and the writable side of the controlled transform stream, making all future\n     * interactions with it fail with the given error `e`. Any chunks queued for transformation will be discarded.\n     */\n    error(reason = undefined) {\n        if (!IsTransformStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException('error');\n        }\n        TransformStreamDefaultControllerError(this, reason);\n    }\n    /**\n     * Closes the readable side and errors the writable side of the controlled transform stream. This is useful when the\n     * transformer only needs to consume a portion of the chunks written to the writable side.\n     */\n    terminate() {\n        if (!IsTransformStreamDefaultController(this)) {\n            throw defaultControllerBrandCheckException('terminate');\n        }\n        TransformStreamDefaultControllerTerminate(this);\n    }\n}\nObject.defineProperties(TransformStreamDefaultController.prototype, {\n    enqueue: { enumerable: true },\n    error: { enumerable: true },\n    terminate: { enumerable: true },\n    desiredSize: { enumerable: true }\n});\nif (typeof SymbolPolyfill.toStringTag === 'symbol') {\n    Object.defineProperty(TransformStreamDefaultController.prototype, SymbolPolyfill.toStringTag, {\n        value: 'TransformStreamDefaultController',\n        configurable: true\n    });\n}\n// Transform Stream Default Controller Abstract Operations\nfunction IsTransformStreamDefaultController(x) {\n    if (!typeIsObject(x)) {\n        return false;\n    }\n    if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {\n        return false;\n    }\n    return true;\n}\nfunction SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm) {\n    controller._controlledTransformStream = stream;\n    stream._transformStreamController = controller;\n    controller._transformAlgorithm = transformAlgorithm;\n    controller._flushAlgorithm = flushAlgorithm;\n}\nfunction SetUpTransformStreamDefaultControllerFromTransformer(stream, transformer) {\n    const controller = Object.create(TransformStreamDefaultController.prototype);\n    let transformAlgorithm = (chunk) => {\n        try {\n            TransformStreamDefaultControllerEnqueue(controller, chunk);\n            return promiseResolvedWith(undefined);\n        }\n        catch (transformResultE) {\n            return promiseRejectedWith(transformResultE);\n        }\n    };\n    let flushAlgorithm = () => promiseResolvedWith(undefined);\n    if (transformer.transform !== undefined) {\n        transformAlgorithm = chunk => transformer.transform(chunk, controller);\n    }\n    if (transformer.flush !== undefined) {\n        flushAlgorithm = () => transformer.flush(controller);\n    }\n    SetUpTransformStreamDefaultController(stream, controller, transformAlgorithm, flushAlgorithm);\n}\nfunction TransformStreamDefaultControllerClearAlgorithms(controller) {\n    controller._transformAlgorithm = undefined;\n    controller._flushAlgorithm = undefined;\n}\nfunction TransformStreamDefaultControllerEnqueue(controller, chunk) {\n    const stream = controller._controlledTransformStream;\n    const readableController = stream._readable._readableStreamController;\n    if (!ReadableStreamDefaultControllerCanCloseOrEnqueue(readableController)) {\n        throw new TypeError('Readable side is not in a state that permits enqueue');\n    }\n    // We throttle transform invocations based on the backpressure of the ReadableStream, but we still\n    // accept TransformStreamDefaultControllerEnqueue() calls.\n    try {\n        ReadableStreamDefaultControllerEnqueue(readableController, chunk);\n    }\n    catch (e) {\n        // This happens when readableStrategy.size() throws.\n        TransformStreamErrorWritableAndUnblockWrite(stream, e);\n        throw stream._readable._storedError;\n    }\n    const backpressure = ReadableStreamDefaultControllerHasBackpressure(readableController);\n    if (backpressure !== stream._backpressure) {\n        TransformStreamSetBackpressure(stream, true);\n    }\n}\nfunction TransformStreamDefaultControllerError(controller, e) {\n    TransformStreamError(controller._controlledTransformStream, e);\n}\nfunction TransformStreamDefaultControllerPerformTransform(controller, chunk) {\n    const transformPromise = controller._transformAlgorithm(chunk);\n    return transformPromiseWith(transformPromise, undefined, r => {\n        TransformStreamError(controller._controlledTransformStream, r);\n        throw r;\n    });\n}\nfunction TransformStreamDefaultControllerTerminate(controller) {\n    const stream = controller._controlledTransformStream;\n    const readableController = stream._readable._readableStreamController;\n    ReadableStreamDefaultControllerClose(readableController);\n    const error = new TypeError('TransformStream terminated');\n    TransformStreamErrorWritableAndUnblockWrite(stream, error);\n}\n// TransformStreamDefaultSink Algorithms\nfunction TransformStreamDefaultSinkWriteAlgorithm(stream, chunk) {\n    const controller = stream._transformStreamController;\n    if (stream._backpressure) {\n        const backpressureChangePromise = stream._backpressureChangePromise;\n        return transformPromiseWith(backpressureChangePromise, () => {\n            const writable = stream._writable;\n            const state = writable._state;\n            if (state === 'erroring') {\n                throw writable._storedError;\n            }\n            return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n        });\n    }\n    return TransformStreamDefaultControllerPerformTransform(controller, chunk);\n}\nfunction TransformStreamDefaultSinkAbortAlgorithm(stream, reason) {\n    // abort() is not called synchronously, so it is possible for abort() to be called when the stream is already\n    // errored.\n    TransformStreamError(stream, reason);\n    return promiseResolvedWith(undefined);\n}\nfunction TransformStreamDefaultSinkCloseAlgorithm(stream) {\n    // stream._readable cannot change after construction, so caching it across a call to user code is safe.\n    const readable = stream._readable;\n    const controller = stream._transformStreamController;\n    const flushPromise = controller._flushAlgorithm();\n    TransformStreamDefaultControllerClearAlgorithms(controller);\n    // Return a promise that is fulfilled with undefined on success.\n    return transformPromiseWith(flushPromise, () => {\n        if (readable._state === 'errored') {\n            throw readable._storedError;\n        }\n        ReadableStreamDefaultControllerClose(readable._readableStreamController);\n    }, r => {\n        TransformStreamError(stream, r);\n        throw readable._storedError;\n    });\n}\n// TransformStreamDefaultSource Algorithms\nfunction TransformStreamDefaultSourcePullAlgorithm(stream) {\n    // Invariant. Enforced by the promises returned by start() and pull().\n    TransformStreamSetBackpressure(stream, false);\n    // Prevent the next pull() call until there is backpressure.\n    return stream._backpressureChangePromise;\n}\n// Helper functions for the TransformStreamDefaultController.\nfunction defaultControllerBrandCheckException(name) {\n    return new TypeError(`TransformStreamDefaultController.prototype.${name} can only be used on a TransformStreamDefaultController`);\n}\n// Helper functions for the TransformStream.\nfunction streamBrandCheckException(name) {\n    return new TypeError(`TransformStream.prototype.${name} can only be used on a TransformStream`);\n}\n\nexport { ByteLengthQueuingStrategy, CountQueuingStrategy, ReadableByteStreamController, ReadableStream, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableStreamDefaultController, ReadableStreamDefaultReader, TransformStream, TransformStreamDefaultController, WritableStream, WritableStreamDefaultController, WritableStreamDefaultWriter };\n//# sourceMappingURL=ponyfill.es6.mjs.map\n","/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise */\n\nvar extendStatics = function(d, b) {\n    extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n    return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n    if (typeof b !== \"function\" && b !== null)\n        throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n    extendStatics(d, b);\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nfunction assert(test) {\n    if (!test) {\n        throw new TypeError('Assertion failed');\n    }\n}\n\nfunction noop() {\n    return;\n}\nfunction typeIsObject(x) {\n    return (typeof x === 'object' && x !== null) || typeof x === 'function';\n}\n\nfunction isStreamConstructor(ctor) {\n    if (typeof ctor !== 'function') {\n        return false;\n    }\n    var startCalled = false;\n    try {\n        new ctor({\n            start: function () {\n                startCalled = true;\n            }\n        });\n    }\n    catch (e) {\n        // ignore\n    }\n    return startCalled;\n}\nfunction isReadableStream(readable) {\n    if (!typeIsObject(readable)) {\n        return false;\n    }\n    if (typeof readable.getReader !== 'function') {\n        return false;\n    }\n    return true;\n}\nfunction isReadableStreamConstructor(ctor) {\n    if (!isStreamConstructor(ctor)) {\n        return false;\n    }\n    if (!isReadableStream(new ctor())) {\n        return false;\n    }\n    return true;\n}\nfunction isWritableStream(writable) {\n    if (!typeIsObject(writable)) {\n        return false;\n    }\n    if (typeof writable.getWriter !== 'function') {\n        return false;\n    }\n    return true;\n}\nfunction isWritableStreamConstructor(ctor) {\n    if (!isStreamConstructor(ctor)) {\n        return false;\n    }\n    if (!isWritableStream(new ctor())) {\n        return false;\n    }\n    return true;\n}\nfunction isTransformStream(transform) {\n    if (!typeIsObject(transform)) {\n        return false;\n    }\n    if (!isReadableStream(transform.readable)) {\n        return false;\n    }\n    if (!isWritableStream(transform.writable)) {\n        return false;\n    }\n    return true;\n}\nfunction isTransformStreamConstructor(ctor) {\n    if (!isStreamConstructor(ctor)) {\n        return false;\n    }\n    if (!isTransformStream(new ctor())) {\n        return false;\n    }\n    return true;\n}\nfunction supportsByobReader(readable) {\n    try {\n        var reader = readable.getReader({ mode: 'byob' });\n        reader.releaseLock();\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\nfunction supportsByteSource(ctor) {\n    try {\n        new ctor({ type: 'bytes' });\n        return true;\n    }\n    catch (_a) {\n        return false;\n    }\n}\n\nfunction createReadableStreamWrapper(ctor) {\n    assert(isReadableStreamConstructor(ctor));\n    var byteSourceSupported = supportsByteSource(ctor);\n    return function (readable, _a) {\n        var _b = _a === void 0 ? {} : _a, type = _b.type;\n        type = parseReadableType(type);\n        if (type === 'bytes' && !byteSourceSupported) {\n            type = undefined;\n        }\n        if (readable.constructor === ctor) {\n            if (type !== 'bytes' || supportsByobReader(readable)) {\n                return readable;\n            }\n        }\n        if (type === 'bytes') {\n            var source = createWrappingReadableSource(readable, { type: type });\n            return new ctor(source);\n        }\n        else {\n            var source = createWrappingReadableSource(readable);\n            return new ctor(source);\n        }\n    };\n}\nfunction createWrappingReadableSource(readable, _a) {\n    var _b = _a === void 0 ? {} : _a, type = _b.type;\n    assert(isReadableStream(readable));\n    assert(readable.locked === false);\n    type = parseReadableType(type);\n    var source;\n    if (type === 'bytes') {\n        source = new WrappingReadableByteStreamSource(readable);\n    }\n    else {\n        source = new WrappingReadableStreamDefaultSource(readable);\n    }\n    return source;\n}\nfunction parseReadableType(type) {\n    var typeString = String(type);\n    if (typeString === 'bytes') {\n        return typeString;\n    }\n    else if (type === undefined) {\n        return type;\n    }\n    else {\n        throw new RangeError('Invalid type is specified');\n    }\n}\nvar AbstractWrappingReadableStreamSource = /** @class */ (function () {\n    function AbstractWrappingReadableStreamSource(underlyingStream) {\n        this._underlyingReader = undefined;\n        this._readerMode = undefined;\n        this._readableStreamController = undefined;\n        this._pendingRead = undefined;\n        this._underlyingStream = underlyingStream;\n        // always keep a reader attached to detect close/error\n        this._attachDefaultReader();\n    }\n    AbstractWrappingReadableStreamSource.prototype.start = function (controller) {\n        this._readableStreamController = controller;\n    };\n    AbstractWrappingReadableStreamSource.prototype.cancel = function (reason) {\n        assert(this._underlyingReader !== undefined);\n        return this._underlyingReader.cancel(reason);\n    };\n    AbstractWrappingReadableStreamSource.prototype._attachDefaultReader = function () {\n        if (this._readerMode === \"default\" /* DEFAULT */) {\n            return;\n        }\n        this._detachReader();\n        var reader = this._underlyingStream.getReader();\n        this._readerMode = \"default\" /* DEFAULT */;\n        this._attachReader(reader);\n    };\n    AbstractWrappingReadableStreamSource.prototype._attachReader = function (reader) {\n        var _this = this;\n        assert(this._underlyingReader === undefined);\n        this._underlyingReader = reader;\n        var closed = this._underlyingReader.closed;\n        if (!closed) {\n            return;\n        }\n        closed\n            .then(function () { return _this._finishPendingRead(); })\n            .then(function () {\n            if (reader === _this._underlyingReader) {\n                _this._readableStreamController.close();\n            }\n        }, function (reason) {\n            if (reader === _this._underlyingReader) {\n                _this._readableStreamController.error(reason);\n            }\n        })\n            .catch(noop);\n    };\n    AbstractWrappingReadableStreamSource.prototype._detachReader = function () {\n        if (this._underlyingReader === undefined) {\n            return;\n        }\n        this._underlyingReader.releaseLock();\n        this._underlyingReader = undefined;\n        this._readerMode = undefined;\n    };\n    AbstractWrappingReadableStreamSource.prototype._pullWithDefaultReader = function () {\n        var _this = this;\n        this._attachDefaultReader();\n        // TODO Backpressure?\n        var read = this._underlyingReader.read()\n            .then(function (result) {\n            var controller = _this._readableStreamController;\n            if (result.done) {\n                _this._tryClose();\n            }\n            else {\n                controller.enqueue(result.value);\n            }\n        });\n        this._setPendingRead(read);\n        return read;\n    };\n    AbstractWrappingReadableStreamSource.prototype._tryClose = function () {\n        try {\n            this._readableStreamController.close();\n        }\n        catch (_a) {\n            // already errored or closed\n        }\n    };\n    AbstractWrappingReadableStreamSource.prototype._setPendingRead = function (readPromise) {\n        var _this = this;\n        var pendingRead;\n        var finishRead = function () {\n            if (_this._pendingRead === pendingRead) {\n                _this._pendingRead = undefined;\n            }\n        };\n        this._pendingRead = pendingRead = readPromise.then(finishRead, finishRead);\n    };\n    AbstractWrappingReadableStreamSource.prototype._finishPendingRead = function () {\n        var _this = this;\n        if (!this._pendingRead) {\n            return undefined;\n        }\n        var afterRead = function () { return _this._finishPendingRead(); };\n        return this._pendingRead.then(afterRead, afterRead);\n    };\n    return AbstractWrappingReadableStreamSource;\n}());\nvar WrappingReadableStreamDefaultSource = /** @class */ (function (_super) {\n    __extends(WrappingReadableStreamDefaultSource, _super);\n    function WrappingReadableStreamDefaultSource() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    WrappingReadableStreamDefaultSource.prototype.pull = function () {\n        return this._pullWithDefaultReader();\n    };\n    return WrappingReadableStreamDefaultSource;\n}(AbstractWrappingReadableStreamSource));\nfunction toUint8Array(view) {\n    return new Uint8Array(view.buffer, view.byteOffset, view.byteLength);\n}\nfunction copyArrayBufferView(from, to) {\n    var fromArray = toUint8Array(from);\n    var toArray = toUint8Array(to);\n    toArray.set(fromArray, 0);\n}\nvar WrappingReadableByteStreamSource = /** @class */ (function (_super) {\n    __extends(WrappingReadableByteStreamSource, _super);\n    function WrappingReadableByteStreamSource(underlyingStream) {\n        var _this = this;\n        var supportsByob = supportsByobReader(underlyingStream);\n        _this = _super.call(this, underlyingStream) || this;\n        _this._supportsByob = supportsByob;\n        return _this;\n    }\n    Object.defineProperty(WrappingReadableByteStreamSource.prototype, \"type\", {\n        get: function () {\n            return 'bytes';\n        },\n        enumerable: false,\n        configurable: true\n    });\n    WrappingReadableByteStreamSource.prototype._attachByobReader = function () {\n        if (this._readerMode === \"byob\" /* BYOB */) {\n            return;\n        }\n        assert(this._supportsByob);\n        this._detachReader();\n        var reader = this._underlyingStream.getReader({ mode: 'byob' });\n        this._readerMode = \"byob\" /* BYOB */;\n        this._attachReader(reader);\n    };\n    WrappingReadableByteStreamSource.prototype.pull = function () {\n        if (this._supportsByob) {\n            var byobRequest = this._readableStreamController.byobRequest;\n            if (byobRequest) {\n                return this._pullWithByobRequest(byobRequest);\n            }\n        }\n        return this._pullWithDefaultReader();\n    };\n    WrappingReadableByteStreamSource.prototype._pullWithByobRequest = function (byobRequest) {\n        var _this = this;\n        this._attachByobReader();\n        // reader.read(view) detaches the input view, therefore we cannot pass byobRequest.view directly\n        // create a separate buffer to read into, then copy that to byobRequest.view\n        var buffer = new Uint8Array(byobRequest.view.byteLength);\n        // TODO Backpressure?\n        var read = this._underlyingReader.read(buffer)\n            .then(function (result) {\n            _this._readableStreamController;\n            if (result.done) {\n                _this._tryClose();\n                byobRequest.respond(0);\n            }\n            else {\n                copyArrayBufferView(result.value, byobRequest.view);\n                byobRequest.respond(result.value.byteLength);\n            }\n        });\n        this._setPendingRead(read);\n        return read;\n    };\n    return WrappingReadableByteStreamSource;\n}(AbstractWrappingReadableStreamSource));\n\nfunction createWritableStreamWrapper(ctor) {\n    assert(isWritableStreamConstructor(ctor));\n    return function (writable) {\n        if (writable.constructor === ctor) {\n            return writable;\n        }\n        var sink = createWrappingWritableSink(writable);\n        return new ctor(sink);\n    };\n}\nfunction createWrappingWritableSink(writable) {\n    assert(isWritableStream(writable));\n    assert(writable.locked === false);\n    var writer = writable.getWriter();\n    return new WrappingWritableStreamSink(writer);\n}\nvar WrappingWritableStreamSink = /** @class */ (function () {\n    function WrappingWritableStreamSink(underlyingWriter) {\n        var _this = this;\n        this._writableStreamController = undefined;\n        this._pendingWrite = undefined;\n        this._state = \"writable\" /* WRITABLE */;\n        this._storedError = undefined;\n        this._underlyingWriter = underlyingWriter;\n        this._errorPromise = new Promise(function (resolve, reject) {\n            _this._errorPromiseReject = reject;\n        });\n        this._errorPromise.catch(noop);\n    }\n    WrappingWritableStreamSink.prototype.start = function (controller) {\n        var _this = this;\n        this._writableStreamController = controller;\n        this._underlyingWriter.closed\n            .then(function () {\n            _this._state = \"closed\" /* CLOSED */;\n        })\n            .catch(function (reason) { return _this._finishErroring(reason); });\n    };\n    WrappingWritableStreamSink.prototype.write = function (chunk) {\n        var _this = this;\n        var writer = this._underlyingWriter;\n        // Detect past errors\n        if (writer.desiredSize === null) {\n            return writer.ready;\n        }\n        var writeRequest = writer.write(chunk);\n        // Detect future errors\n        writeRequest.catch(function (reason) { return _this._finishErroring(reason); });\n        writer.ready.catch(function (reason) { return _this._startErroring(reason); });\n        // Reject write when errored\n        var write = Promise.race([writeRequest, this._errorPromise]);\n        this._setPendingWrite(write);\n        return write;\n    };\n    WrappingWritableStreamSink.prototype.close = function () {\n        var _this = this;\n        if (this._pendingWrite === undefined) {\n            return this._underlyingWriter.close();\n        }\n        return this._finishPendingWrite().then(function () { return _this.close(); });\n    };\n    WrappingWritableStreamSink.prototype.abort = function (reason) {\n        if (this._state === \"errored\" /* ERRORED */) {\n            return undefined;\n        }\n        var writer = this._underlyingWriter;\n        return writer.abort(reason);\n    };\n    WrappingWritableStreamSink.prototype._setPendingWrite = function (writePromise) {\n        var _this = this;\n        var pendingWrite;\n        var finishWrite = function () {\n            if (_this._pendingWrite === pendingWrite) {\n                _this._pendingWrite = undefined;\n            }\n        };\n        this._pendingWrite = pendingWrite = writePromise.then(finishWrite, finishWrite);\n    };\n    WrappingWritableStreamSink.prototype._finishPendingWrite = function () {\n        var _this = this;\n        if (this._pendingWrite === undefined) {\n            return Promise.resolve();\n        }\n        var afterWrite = function () { return _this._finishPendingWrite(); };\n        return this._pendingWrite.then(afterWrite, afterWrite);\n    };\n    WrappingWritableStreamSink.prototype._startErroring = function (reason) {\n        var _this = this;\n        if (this._state === \"writable\" /* WRITABLE */) {\n            this._state = \"erroring\" /* ERRORING */;\n            this._storedError = reason;\n            var afterWrite = function () { return _this._finishErroring(reason); };\n            if (this._pendingWrite === undefined) {\n                afterWrite();\n            }\n            else {\n                this._finishPendingWrite().then(afterWrite, afterWrite);\n            }\n            this._writableStreamController.error(reason);\n        }\n    };\n    WrappingWritableStreamSink.prototype._finishErroring = function (reason) {\n        if (this._state === \"writable\" /* WRITABLE */) {\n            this._startErroring(reason);\n        }\n        if (this._state === \"erroring\" /* ERRORING */) {\n            this._state = \"errored\" /* ERRORED */;\n            this._errorPromiseReject(this._storedError);\n        }\n    };\n    return WrappingWritableStreamSink;\n}());\n\nfunction createTransformStreamWrapper(ctor) {\n    assert(isTransformStreamConstructor(ctor));\n    return function (transform) {\n        if (transform.constructor === ctor) {\n            return transform;\n        }\n        var transformer = createWrappingTransformer(transform);\n        return new ctor(transformer);\n    };\n}\nfunction createWrappingTransformer(transform) {\n    assert(isTransformStream(transform));\n    var readable = transform.readable, writable = transform.writable;\n    assert(readable.locked === false);\n    assert(writable.locked === false);\n    var reader = readable.getReader();\n    var writer;\n    try {\n        writer = writable.getWriter();\n    }\n    catch (e) {\n        reader.releaseLock(); // do not leak reader\n        throw e;\n    }\n    return new WrappingTransformStreamTransformer(reader, writer);\n}\nvar WrappingTransformStreamTransformer = /** @class */ (function () {\n    function WrappingTransformStreamTransformer(reader, writer) {\n        var _this = this;\n        this._transformStreamController = undefined;\n        this._onRead = function (result) {\n            if (result.done) {\n                return;\n            }\n            _this._transformStreamController.enqueue(result.value);\n            return _this._reader.read().then(_this._onRead);\n        };\n        this._onError = function (reason) {\n            _this._flushReject(reason);\n            _this._transformStreamController.error(reason);\n            _this._reader.cancel(reason).catch(noop);\n            _this._writer.abort(reason).catch(noop);\n        };\n        this._onTerminate = function () {\n            _this._flushResolve();\n            _this._transformStreamController.terminate();\n            var error = new TypeError('TransformStream terminated');\n            _this._writer.abort(error).catch(noop);\n        };\n        this._reader = reader;\n        this._writer = writer;\n        this._flushPromise = new Promise(function (resolve, reject) {\n            _this._flushResolve = resolve;\n            _this._flushReject = reject;\n        });\n    }\n    WrappingTransformStreamTransformer.prototype.start = function (controller) {\n        this._transformStreamController = controller;\n        this._reader.read()\n            .then(this._onRead)\n            .then(this._onTerminate, this._onError);\n        var readerClosed = this._reader.closed;\n        if (readerClosed) {\n            readerClosed\n                .then(this._onTerminate, this._onError);\n        }\n    };\n    WrappingTransformStreamTransformer.prototype.transform = function (chunk) {\n        return this._writer.write(chunk);\n    };\n    WrappingTransformStreamTransformer.prototype.flush = function () {\n        var _this = this;\n        return this._writer.close()\n            .then(function () { return _this._flushPromise; });\n    };\n    return WrappingTransformStreamTransformer;\n}());\n\nexport { createReadableStreamWrapper, createTransformStreamWrapper, createWrappingReadableSource, createWrappingTransformer, createWrappingWritableSink, createWritableStreamWrapper };\n//# sourceMappingURL=web-streams-adapter.mjs.map\n","(function (module, exports) {\n  'use strict';\n\n  // Utils\n  function assert (val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  }\n\n  // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n  function inherits (ctor, superCtor) {\n    ctor.super_ = superCtor;\n    var TempCtor = function () {};\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  }\n\n  // BN\n\n  function BN (number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0;\n\n    // Reduction context\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n  if (typeof module === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n\n  var Buffer;\n  try {\n    Buffer = require('buffer').Buffer;\n  } catch (e) {\n  }\n\n  BN.isBN = function isBN (num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && typeof num === 'object' &&\n      num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max (left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min (left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init (number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (typeof number === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n    if (number[0] === '-') {\n      start++;\n    }\n\n    if (base === 16) {\n      this._parseHex(number, start);\n    } else {\n      this._parseBase(number, base, start);\n    }\n\n    if (number[0] === '-') {\n      this.negative = 1;\n    }\n\n    this.strip();\n\n    if (endian !== 'le') return;\n\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initNumber = function _initNumber (number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n    if (number < 0x4000000) {\n      this.words = [ number & 0x3ffffff ];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff\n      ];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n      this.words = [\n        number & 0x3ffffff,\n        (number / 0x4000000) & 0x3ffffff,\n        1\n      ];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return;\n\n    // Reverse the bytes\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray (number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n    if (number.length <= 0) {\n      this.words = [ 0 ];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n        this.words[j] |= (w << off) & 0x3ffffff;\n        this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n        off += 24;\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n    return this.strip();\n  };\n\n  function parseHex (str, start, end) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r <<= 4;\n\n      // 'a' - 'f'\n      if (c >= 49 && c <= 54) {\n        r |= c - 49 + 0xa;\n\n      // 'A' - 'F'\n      } else if (c >= 17 && c <= 22) {\n        r |= c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r |= c & 0xf;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex (number, start) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    // Scan 24-bit chunks and add them to the number\n    var off = 0;\n    for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n      w = parseHex(number, i, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n      off += 24;\n      if (off >= 26) {\n        off -= 26;\n        j++;\n      }\n    }\n    if (i + 6 !== start) {\n      w = parseHex(number, start, i + 6);\n      this.words[j] |= (w << off) & 0x3ffffff;\n      this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\n    }\n    this.strip();\n  };\n\n  function parseBase (str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n\n      r *= mul;\n\n      // 'a'\n      if (c >= 49) {\n        r += c - 49 + 0xa;\n\n      // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa;\n\n      // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase (number, base, start) {\n    // Initialize as zero\n    this.words = [ 0 ];\n    this.length = 1;\n\n    // Find length of limb in base\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n    limbLen--;\n    limbPow = (limbPow / base) | 0;\n\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n\n    var word = 0;\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n\n      this.imuln(limbPow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n  };\n\n  BN.prototype.copy = function copy (dest) {\n    dest.words = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone () {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand (size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n    return this;\n  };\n\n  // Remove leading `0` from `this`\n  BN.prototype.strip = function strip () {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign () {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect () {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n\n  /*\n\n  var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n\n  var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n\n  */\n\n  var zeros = [\n    '',\n    '0',\n    '00',\n    '000',\n    '0000',\n    '00000',\n    '000000',\n    '0000000',\n    '00000000',\n    '000000000',\n    '0000000000',\n    '00000000000',\n    '000000000000',\n    '0000000000000',\n    '00000000000000',\n    '000000000000000',\n    '0000000000000000',\n    '00000000000000000',\n    '000000000000000000',\n    '0000000000000000000',\n    '00000000000000000000',\n    '000000000000000000000',\n    '0000000000000000000000',\n    '00000000000000000000000',\n    '000000000000000000000000',\n    '0000000000000000000000000'\n  ];\n\n  var groupSizes = [\n    0, 0,\n    25, 16, 12, 11, 10, 9, 8,\n    8, 7, 7, 7, 7, 6, 6,\n    6, 6, 6, 6, 6, 5, 5,\n    5, 5, 5, 5, 5, 5, 5,\n    5, 5, 5, 5, 5, 5, 5\n  ];\n\n  var groupBases = [\n    0, 0,\n    33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n    43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n    16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n    6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n    24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n  ];\n\n  BN.prototype.toString = function toString (base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n\n    var out;\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = (((w << off) | carry) & 0xffffff).toString(16);\n        carry = (w >>> (24 - off)) & 0xffffff;\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n        off += 2;\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base];\n      // var groupBase = Math.pow(base, groupSize);\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber () {\n    var ret = this.words[0];\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n    return (this.negative !== 0) ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON () {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer (endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray (endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n\n    var b, i;\n    var q = this.clone();\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits (w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits (w) {\n      var t = w;\n      var r = 0;\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits (w) {\n    // Short-cut\n    if (w === 0) return 26;\n\n    var t = w;\n    var r = 0;\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n    return r;\n  };\n\n  // Return number of used bits in a BN\n  BN.prototype.bitLength = function bitLength () {\n    var w = this.words[this.length - 1];\n    var hi = this._countBits(w);\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray (num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = (bit / 26) | 0;\n      var wbit = bit % 26;\n\n      w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n    }\n\n    return w;\n  }\n\n  // Number of trailing zero bits\n  BN.prototype.zeroBits = function zeroBits () {\n    if (this.isZero()) return 0;\n\n    var r = 0;\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n      r += b;\n      if (b !== 26) break;\n    }\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength () {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos (width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos (width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg () {\n    return this.negative !== 0;\n  };\n\n  // Return negative clone of `this`\n  BN.prototype.neg = function neg () {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg () {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  };\n\n  // Or `num` with `this` in-place\n  BN.prototype.iuor = function iuor (num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  };\n\n  // Or `num` with `this`\n  BN.prototype.or = function or (num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor (num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  };\n\n  // And `num` with `this` in-place\n  BN.prototype.iuand = function iuand (num) {\n    // b = min-length(num, this)\n    var b;\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  };\n\n  // And `num` with `this`\n  BN.prototype.and = function and (num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand (num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  };\n\n  // Xor `num` with `this` in-place\n  BN.prototype.iuxor = function iuxor (num) {\n    // a.length > b.length\n    var a;\n    var b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor (num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  };\n\n  // Xor `num` with `this`\n  BN.prototype.xor = function xor (num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor (num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  };\n\n  // Not ``this`` with ``width`` bitwidth\n  BN.prototype.inotn = function inotn (width) {\n    assert(typeof width === 'number' && width >= 0);\n\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26;\n\n    // Extend the buffer with leading zeroes\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    }\n\n    // Handle complete words\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    }\n\n    // Handle the residue\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n    }\n\n    // And remove leading zeroes\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn (width) {\n    return this.clone().inotn(width);\n  };\n\n  // Set `bit` of `this`\n  BN.prototype.setn = function setn (bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n\n    var off = (bit / 26) | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | (1 << wbit);\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  };\n\n  // Add `num` to `this` in-place\n  BN.prototype.iadd = function iadd (num) {\n    var r;\n\n    // negative + positive\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign();\n\n    // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    }\n\n    // a.length > b.length\n    var a, b;\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++;\n    // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  };\n\n  // Add `num` to `this`\n  BN.prototype.add = function add (num) {\n    var res;\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n\n    return num.clone().iadd(this);\n  };\n\n  // Subtract `num` from `this` in-place\n  BN.prototype.isub = function isub (num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign();\n\n    // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    }\n\n    // At this point both numbers are positive\n    var cmp = this.cmp(num);\n\n    // Optimization - zeroify\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    }\n\n    // a > b\n    var a, b;\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    // Copy rest of the words\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  };\n\n  // Subtract `num` from `this`\n  BN.prototype.sub = function sub (num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = (self.length + num.length) | 0;\n    out.length = len;\n    len = (len - 1) | 0;\n\n    // Peel one iteration (compiler can't do it, because of code complexity)\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n\n    var lo = r & 0x3ffffff;\n    var carry = (r / 0x4000000) | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = (k - j) | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += (r / 0x4000000) | 0;\n        rword = r & 0x3ffffff;\n      }\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n  var comb10MulTo = function comb10MulTo (self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = (mid + Math.imul(ah0, bl0)) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = (mid + Math.imul(ah1, bl0)) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = (lo + Math.imul(al0, bl1)) | 0;\n    mid = (mid + Math.imul(al0, bh1)) | 0;\n    mid = (mid + Math.imul(ah0, bl1)) | 0;\n    hi = (hi + Math.imul(ah0, bh1)) | 0;\n    var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = (mid + Math.imul(ah2, bl0)) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = (lo + Math.imul(al1, bl1)) | 0;\n    mid = (mid + Math.imul(al1, bh1)) | 0;\n    mid = (mid + Math.imul(ah1, bl1)) | 0;\n    hi = (hi + Math.imul(ah1, bh1)) | 0;\n    lo = (lo + Math.imul(al0, bl2)) | 0;\n    mid = (mid + Math.imul(al0, bh2)) | 0;\n    mid = (mid + Math.imul(ah0, bl2)) | 0;\n    hi = (hi + Math.imul(ah0, bh2)) | 0;\n    var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = (mid + Math.imul(ah3, bl0)) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = (lo + Math.imul(al2, bl1)) | 0;\n    mid = (mid + Math.imul(al2, bh1)) | 0;\n    mid = (mid + Math.imul(ah2, bl1)) | 0;\n    hi = (hi + Math.imul(ah2, bh1)) | 0;\n    lo = (lo + Math.imul(al1, bl2)) | 0;\n    mid = (mid + Math.imul(al1, bh2)) | 0;\n    mid = (mid + Math.imul(ah1, bl2)) | 0;\n    hi = (hi + Math.imul(ah1, bh2)) | 0;\n    lo = (lo + Math.imul(al0, bl3)) | 0;\n    mid = (mid + Math.imul(al0, bh3)) | 0;\n    mid = (mid + Math.imul(ah0, bl3)) | 0;\n    hi = (hi + Math.imul(ah0, bh3)) | 0;\n    var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = (mid + Math.imul(ah4, bl0)) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = (lo + Math.imul(al3, bl1)) | 0;\n    mid = (mid + Math.imul(al3, bh1)) | 0;\n    mid = (mid + Math.imul(ah3, bl1)) | 0;\n    hi = (hi + Math.imul(ah3, bh1)) | 0;\n    lo = (lo + Math.imul(al2, bl2)) | 0;\n    mid = (mid + Math.imul(al2, bh2)) | 0;\n    mid = (mid + Math.imul(ah2, bl2)) | 0;\n    hi = (hi + Math.imul(ah2, bh2)) | 0;\n    lo = (lo + Math.imul(al1, bl3)) | 0;\n    mid = (mid + Math.imul(al1, bh3)) | 0;\n    mid = (mid + Math.imul(ah1, bl3)) | 0;\n    hi = (hi + Math.imul(ah1, bh3)) | 0;\n    lo = (lo + Math.imul(al0, bl4)) | 0;\n    mid = (mid + Math.imul(al0, bh4)) | 0;\n    mid = (mid + Math.imul(ah0, bl4)) | 0;\n    hi = (hi + Math.imul(ah0, bh4)) | 0;\n    var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = (mid + Math.imul(ah5, bl0)) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = (lo + Math.imul(al4, bl1)) | 0;\n    mid = (mid + Math.imul(al4, bh1)) | 0;\n    mid = (mid + Math.imul(ah4, bl1)) | 0;\n    hi = (hi + Math.imul(ah4, bh1)) | 0;\n    lo = (lo + Math.imul(al3, bl2)) | 0;\n    mid = (mid + Math.imul(al3, bh2)) | 0;\n    mid = (mid + Math.imul(ah3, bl2)) | 0;\n    hi = (hi + Math.imul(ah3, bh2)) | 0;\n    lo = (lo + Math.imul(al2, bl3)) | 0;\n    mid = (mid + Math.imul(al2, bh3)) | 0;\n    mid = (mid + Math.imul(ah2, bl3)) | 0;\n    hi = (hi + Math.imul(ah2, bh3)) | 0;\n    lo = (lo + Math.imul(al1, bl4)) | 0;\n    mid = (mid + Math.imul(al1, bh4)) | 0;\n    mid = (mid + Math.imul(ah1, bl4)) | 0;\n    hi = (hi + Math.imul(ah1, bh4)) | 0;\n    lo = (lo + Math.imul(al0, bl5)) | 0;\n    mid = (mid + Math.imul(al0, bh5)) | 0;\n    mid = (mid + Math.imul(ah0, bl5)) | 0;\n    hi = (hi + Math.imul(ah0, bh5)) | 0;\n    var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = (mid + Math.imul(ah6, bl0)) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = (lo + Math.imul(al5, bl1)) | 0;\n    mid = (mid + Math.imul(al5, bh1)) | 0;\n    mid = (mid + Math.imul(ah5, bl1)) | 0;\n    hi = (hi + Math.imul(ah5, bh1)) | 0;\n    lo = (lo + Math.imul(al4, bl2)) | 0;\n    mid = (mid + Math.imul(al4, bh2)) | 0;\n    mid = (mid + Math.imul(ah4, bl2)) | 0;\n    hi = (hi + Math.imul(ah4, bh2)) | 0;\n    lo = (lo + Math.imul(al3, bl3)) | 0;\n    mid = (mid + Math.imul(al3, bh3)) | 0;\n    mid = (mid + Math.imul(ah3, bl3)) | 0;\n    hi = (hi + Math.imul(ah3, bh3)) | 0;\n    lo = (lo + Math.imul(al2, bl4)) | 0;\n    mid = (mid + Math.imul(al2, bh4)) | 0;\n    mid = (mid + Math.imul(ah2, bl4)) | 0;\n    hi = (hi + Math.imul(ah2, bh4)) | 0;\n    lo = (lo + Math.imul(al1, bl5)) | 0;\n    mid = (mid + Math.imul(al1, bh5)) | 0;\n    mid = (mid + Math.imul(ah1, bl5)) | 0;\n    hi = (hi + Math.imul(ah1, bh5)) | 0;\n    lo = (lo + Math.imul(al0, bl6)) | 0;\n    mid = (mid + Math.imul(al0, bh6)) | 0;\n    mid = (mid + Math.imul(ah0, bl6)) | 0;\n    hi = (hi + Math.imul(ah0, bh6)) | 0;\n    var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = (mid + Math.imul(ah7, bl0)) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = (lo + Math.imul(al6, bl1)) | 0;\n    mid = (mid + Math.imul(al6, bh1)) | 0;\n    mid = (mid + Math.imul(ah6, bl1)) | 0;\n    hi = (hi + Math.imul(ah6, bh1)) | 0;\n    lo = (lo + Math.imul(al5, bl2)) | 0;\n    mid = (mid + Math.imul(al5, bh2)) | 0;\n    mid = (mid + Math.imul(ah5, bl2)) | 0;\n    hi = (hi + Math.imul(ah5, bh2)) | 0;\n    lo = (lo + Math.imul(al4, bl3)) | 0;\n    mid = (mid + Math.imul(al4, bh3)) | 0;\n    mid = (mid + Math.imul(ah4, bl3)) | 0;\n    hi = (hi + Math.imul(ah4, bh3)) | 0;\n    lo = (lo + Math.imul(al3, bl4)) | 0;\n    mid = (mid + Math.imul(al3, bh4)) | 0;\n    mid = (mid + Math.imul(ah3, bl4)) | 0;\n    hi = (hi + Math.imul(ah3, bh4)) | 0;\n    lo = (lo + Math.imul(al2, bl5)) | 0;\n    mid = (mid + Math.imul(al2, bh5)) | 0;\n    mid = (mid + Math.imul(ah2, bl5)) | 0;\n    hi = (hi + Math.imul(ah2, bh5)) | 0;\n    lo = (lo + Math.imul(al1, bl6)) | 0;\n    mid = (mid + Math.imul(al1, bh6)) | 0;\n    mid = (mid + Math.imul(ah1, bl6)) | 0;\n    hi = (hi + Math.imul(ah1, bh6)) | 0;\n    lo = (lo + Math.imul(al0, bl7)) | 0;\n    mid = (mid + Math.imul(al0, bh7)) | 0;\n    mid = (mid + Math.imul(ah0, bl7)) | 0;\n    hi = (hi + Math.imul(ah0, bh7)) | 0;\n    var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = (mid + Math.imul(ah8, bl0)) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = (lo + Math.imul(al7, bl1)) | 0;\n    mid = (mid + Math.imul(al7, bh1)) | 0;\n    mid = (mid + Math.imul(ah7, bl1)) | 0;\n    hi = (hi + Math.imul(ah7, bh1)) | 0;\n    lo = (lo + Math.imul(al6, bl2)) | 0;\n    mid = (mid + Math.imul(al6, bh2)) | 0;\n    mid = (mid + Math.imul(ah6, bl2)) | 0;\n    hi = (hi + Math.imul(ah6, bh2)) | 0;\n    lo = (lo + Math.imul(al5, bl3)) | 0;\n    mid = (mid + Math.imul(al5, bh3)) | 0;\n    mid = (mid + Math.imul(ah5, bl3)) | 0;\n    hi = (hi + Math.imul(ah5, bh3)) | 0;\n    lo = (lo + Math.imul(al4, bl4)) | 0;\n    mid = (mid + Math.imul(al4, bh4)) | 0;\n    mid = (mid + Math.imul(ah4, bl4)) | 0;\n    hi = (hi + Math.imul(ah4, bh4)) | 0;\n    lo = (lo + Math.imul(al3, bl5)) | 0;\n    mid = (mid + Math.imul(al3, bh5)) | 0;\n    mid = (mid + Math.imul(ah3, bl5)) | 0;\n    hi = (hi + Math.imul(ah3, bh5)) | 0;\n    lo = (lo + Math.imul(al2, bl6)) | 0;\n    mid = (mid + Math.imul(al2, bh6)) | 0;\n    mid = (mid + Math.imul(ah2, bl6)) | 0;\n    hi = (hi + Math.imul(ah2, bh6)) | 0;\n    lo = (lo + Math.imul(al1, bl7)) | 0;\n    mid = (mid + Math.imul(al1, bh7)) | 0;\n    mid = (mid + Math.imul(ah1, bl7)) | 0;\n    hi = (hi + Math.imul(ah1, bh7)) | 0;\n    lo = (lo + Math.imul(al0, bl8)) | 0;\n    mid = (mid + Math.imul(al0, bh8)) | 0;\n    mid = (mid + Math.imul(ah0, bl8)) | 0;\n    hi = (hi + Math.imul(ah0, bh8)) | 0;\n    var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = (mid + Math.imul(ah9, bl0)) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = (lo + Math.imul(al8, bl1)) | 0;\n    mid = (mid + Math.imul(al8, bh1)) | 0;\n    mid = (mid + Math.imul(ah8, bl1)) | 0;\n    hi = (hi + Math.imul(ah8, bh1)) | 0;\n    lo = (lo + Math.imul(al7, bl2)) | 0;\n    mid = (mid + Math.imul(al7, bh2)) | 0;\n    mid = (mid + Math.imul(ah7, bl2)) | 0;\n    hi = (hi + Math.imul(ah7, bh2)) | 0;\n    lo = (lo + Math.imul(al6, bl3)) | 0;\n    mid = (mid + Math.imul(al6, bh3)) | 0;\n    mid = (mid + Math.imul(ah6, bl3)) | 0;\n    hi = (hi + Math.imul(ah6, bh3)) | 0;\n    lo = (lo + Math.imul(al5, bl4)) | 0;\n    mid = (mid + Math.imul(al5, bh4)) | 0;\n    mid = (mid + Math.imul(ah5, bl4)) | 0;\n    hi = (hi + Math.imul(ah5, bh4)) | 0;\n    lo = (lo + Math.imul(al4, bl5)) | 0;\n    mid = (mid + Math.imul(al4, bh5)) | 0;\n    mid = (mid + Math.imul(ah4, bl5)) | 0;\n    hi = (hi + Math.imul(ah4, bh5)) | 0;\n    lo = (lo + Math.imul(al3, bl6)) | 0;\n    mid = (mid + Math.imul(al3, bh6)) | 0;\n    mid = (mid + Math.imul(ah3, bl6)) | 0;\n    hi = (hi + Math.imul(ah3, bh6)) | 0;\n    lo = (lo + Math.imul(al2, bl7)) | 0;\n    mid = (mid + Math.imul(al2, bh7)) | 0;\n    mid = (mid + Math.imul(ah2, bl7)) | 0;\n    hi = (hi + Math.imul(ah2, bh7)) | 0;\n    lo = (lo + Math.imul(al1, bl8)) | 0;\n    mid = (mid + Math.imul(al1, bh8)) | 0;\n    mid = (mid + Math.imul(ah1, bl8)) | 0;\n    hi = (hi + Math.imul(ah1, bh8)) | 0;\n    lo = (lo + Math.imul(al0, bl9)) | 0;\n    mid = (mid + Math.imul(al0, bh9)) | 0;\n    mid = (mid + Math.imul(ah0, bl9)) | 0;\n    hi = (hi + Math.imul(ah0, bh9)) | 0;\n    var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = (mid + Math.imul(ah9, bl1)) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = (lo + Math.imul(al8, bl2)) | 0;\n    mid = (mid + Math.imul(al8, bh2)) | 0;\n    mid = (mid + Math.imul(ah8, bl2)) | 0;\n    hi = (hi + Math.imul(ah8, bh2)) | 0;\n    lo = (lo + Math.imul(al7, bl3)) | 0;\n    mid = (mid + Math.imul(al7, bh3)) | 0;\n    mid = (mid + Math.imul(ah7, bl3)) | 0;\n    hi = (hi + Math.imul(ah7, bh3)) | 0;\n    lo = (lo + Math.imul(al6, bl4)) | 0;\n    mid = (mid + Math.imul(al6, bh4)) | 0;\n    mid = (mid + Math.imul(ah6, bl4)) | 0;\n    hi = (hi + Math.imul(ah6, bh4)) | 0;\n    lo = (lo + Math.imul(al5, bl5)) | 0;\n    mid = (mid + Math.imul(al5, bh5)) | 0;\n    mid = (mid + Math.imul(ah5, bl5)) | 0;\n    hi = (hi + Math.imul(ah5, bh5)) | 0;\n    lo = (lo + Math.imul(al4, bl6)) | 0;\n    mid = (mid + Math.imul(al4, bh6)) | 0;\n    mid = (mid + Math.imul(ah4, bl6)) | 0;\n    hi = (hi + Math.imul(ah4, bh6)) | 0;\n    lo = (lo + Math.imul(al3, bl7)) | 0;\n    mid = (mid + Math.imul(al3, bh7)) | 0;\n    mid = (mid + Math.imul(ah3, bl7)) | 0;\n    hi = (hi + Math.imul(ah3, bh7)) | 0;\n    lo = (lo + Math.imul(al2, bl8)) | 0;\n    mid = (mid + Math.imul(al2, bh8)) | 0;\n    mid = (mid + Math.imul(ah2, bl8)) | 0;\n    hi = (hi + Math.imul(ah2, bh8)) | 0;\n    lo = (lo + Math.imul(al1, bl9)) | 0;\n    mid = (mid + Math.imul(al1, bh9)) | 0;\n    mid = (mid + Math.imul(ah1, bl9)) | 0;\n    hi = (hi + Math.imul(ah1, bh9)) | 0;\n    var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = (mid + Math.imul(ah9, bl2)) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = (lo + Math.imul(al8, bl3)) | 0;\n    mid = (mid + Math.imul(al8, bh3)) | 0;\n    mid = (mid + Math.imul(ah8, bl3)) | 0;\n    hi = (hi + Math.imul(ah8, bh3)) | 0;\n    lo = (lo + Math.imul(al7, bl4)) | 0;\n    mid = (mid + Math.imul(al7, bh4)) | 0;\n    mid = (mid + Math.imul(ah7, bl4)) | 0;\n    hi = (hi + Math.imul(ah7, bh4)) | 0;\n    lo = (lo + Math.imul(al6, bl5)) | 0;\n    mid = (mid + Math.imul(al6, bh5)) | 0;\n    mid = (mid + Math.imul(ah6, bl5)) | 0;\n    hi = (hi + Math.imul(ah6, bh5)) | 0;\n    lo = (lo + Math.imul(al5, bl6)) | 0;\n    mid = (mid + Math.imul(al5, bh6)) | 0;\n    mid = (mid + Math.imul(ah5, bl6)) | 0;\n    hi = (hi + Math.imul(ah5, bh6)) | 0;\n    lo = (lo + Math.imul(al4, bl7)) | 0;\n    mid = (mid + Math.imul(al4, bh7)) | 0;\n    mid = (mid + Math.imul(ah4, bl7)) | 0;\n    hi = (hi + Math.imul(ah4, bh7)) | 0;\n    lo = (lo + Math.imul(al3, bl8)) | 0;\n    mid = (mid + Math.imul(al3, bh8)) | 0;\n    mid = (mid + Math.imul(ah3, bl8)) | 0;\n    hi = (hi + Math.imul(ah3, bh8)) | 0;\n    lo = (lo + Math.imul(al2, bl9)) | 0;\n    mid = (mid + Math.imul(al2, bh9)) | 0;\n    mid = (mid + Math.imul(ah2, bl9)) | 0;\n    hi = (hi + Math.imul(ah2, bh9)) | 0;\n    var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = (mid + Math.imul(ah9, bl3)) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = (lo + Math.imul(al8, bl4)) | 0;\n    mid = (mid + Math.imul(al8, bh4)) | 0;\n    mid = (mid + Math.imul(ah8, bl4)) | 0;\n    hi = (hi + Math.imul(ah8, bh4)) | 0;\n    lo = (lo + Math.imul(al7, bl5)) | 0;\n    mid = (mid + Math.imul(al7, bh5)) | 0;\n    mid = (mid + Math.imul(ah7, bl5)) | 0;\n    hi = (hi + Math.imul(ah7, bh5)) | 0;\n    lo = (lo + Math.imul(al6, bl6)) | 0;\n    mid = (mid + Math.imul(al6, bh6)) | 0;\n    mid = (mid + Math.imul(ah6, bl6)) | 0;\n    hi = (hi + Math.imul(ah6, bh6)) | 0;\n    lo = (lo + Math.imul(al5, bl7)) | 0;\n    mid = (mid + Math.imul(al5, bh7)) | 0;\n    mid = (mid + Math.imul(ah5, bl7)) | 0;\n    hi = (hi + Math.imul(ah5, bh7)) | 0;\n    lo = (lo + Math.imul(al4, bl8)) | 0;\n    mid = (mid + Math.imul(al4, bh8)) | 0;\n    mid = (mid + Math.imul(ah4, bl8)) | 0;\n    hi = (hi + Math.imul(ah4, bh8)) | 0;\n    lo = (lo + Math.imul(al3, bl9)) | 0;\n    mid = (mid + Math.imul(al3, bh9)) | 0;\n    mid = (mid + Math.imul(ah3, bl9)) | 0;\n    hi = (hi + Math.imul(ah3, bh9)) | 0;\n    var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = (mid + Math.imul(ah9, bl4)) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = (lo + Math.imul(al8, bl5)) | 0;\n    mid = (mid + Math.imul(al8, bh5)) | 0;\n    mid = (mid + Math.imul(ah8, bl5)) | 0;\n    hi = (hi + Math.imul(ah8, bh5)) | 0;\n    lo = (lo + Math.imul(al7, bl6)) | 0;\n    mid = (mid + Math.imul(al7, bh6)) | 0;\n    mid = (mid + Math.imul(ah7, bl6)) | 0;\n    hi = (hi + Math.imul(ah7, bh6)) | 0;\n    lo = (lo + Math.imul(al6, bl7)) | 0;\n    mid = (mid + Math.imul(al6, bh7)) | 0;\n    mid = (mid + Math.imul(ah6, bl7)) | 0;\n    hi = (hi + Math.imul(ah6, bh7)) | 0;\n    lo = (lo + Math.imul(al5, bl8)) | 0;\n    mid = (mid + Math.imul(al5, bh8)) | 0;\n    mid = (mid + Math.imul(ah5, bl8)) | 0;\n    hi = (hi + Math.imul(ah5, bh8)) | 0;\n    lo = (lo + Math.imul(al4, bl9)) | 0;\n    mid = (mid + Math.imul(al4, bh9)) | 0;\n    mid = (mid + Math.imul(ah4, bl9)) | 0;\n    hi = (hi + Math.imul(ah4, bh9)) | 0;\n    var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = (mid + Math.imul(ah9, bl5)) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = (lo + Math.imul(al8, bl6)) | 0;\n    mid = (mid + Math.imul(al8, bh6)) | 0;\n    mid = (mid + Math.imul(ah8, bl6)) | 0;\n    hi = (hi + Math.imul(ah8, bh6)) | 0;\n    lo = (lo + Math.imul(al7, bl7)) | 0;\n    mid = (mid + Math.imul(al7, bh7)) | 0;\n    mid = (mid + Math.imul(ah7, bl7)) | 0;\n    hi = (hi + Math.imul(ah7, bh7)) | 0;\n    lo = (lo + Math.imul(al6, bl8)) | 0;\n    mid = (mid + Math.imul(al6, bh8)) | 0;\n    mid = (mid + Math.imul(ah6, bl8)) | 0;\n    hi = (hi + Math.imul(ah6, bh8)) | 0;\n    lo = (lo + Math.imul(al5, bl9)) | 0;\n    mid = (mid + Math.imul(al5, bh9)) | 0;\n    mid = (mid + Math.imul(ah5, bl9)) | 0;\n    hi = (hi + Math.imul(ah5, bh9)) | 0;\n    var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = (mid + Math.imul(ah9, bl6)) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = (lo + Math.imul(al8, bl7)) | 0;\n    mid = (mid + Math.imul(al8, bh7)) | 0;\n    mid = (mid + Math.imul(ah8, bl7)) | 0;\n    hi = (hi + Math.imul(ah8, bh7)) | 0;\n    lo = (lo + Math.imul(al7, bl8)) | 0;\n    mid = (mid + Math.imul(al7, bh8)) | 0;\n    mid = (mid + Math.imul(ah7, bl8)) | 0;\n    hi = (hi + Math.imul(ah7, bh8)) | 0;\n    lo = (lo + Math.imul(al6, bl9)) | 0;\n    mid = (mid + Math.imul(al6, bh9)) | 0;\n    mid = (mid + Math.imul(ah6, bl9)) | 0;\n    hi = (hi + Math.imul(ah6, bh9)) | 0;\n    var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = (mid + Math.imul(ah9, bl7)) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = (lo + Math.imul(al8, bl8)) | 0;\n    mid = (mid + Math.imul(al8, bh8)) | 0;\n    mid = (mid + Math.imul(ah8, bl8)) | 0;\n    hi = (hi + Math.imul(ah8, bh8)) | 0;\n    lo = (lo + Math.imul(al7, bl9)) | 0;\n    mid = (mid + Math.imul(al7, bh9)) | 0;\n    mid = (mid + Math.imul(ah7, bl9)) | 0;\n    hi = (hi + Math.imul(ah7, bh9)) | 0;\n    var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = (mid + Math.imul(ah9, bl8)) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = (lo + Math.imul(al8, bl9)) | 0;\n    mid = (mid + Math.imul(al8, bh9)) | 0;\n    mid = (mid + Math.imul(ah8, bl9)) | 0;\n    hi = (hi + Math.imul(ah8, bh9)) | 0;\n    var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = (mid + Math.imul(ah9, bl9)) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n    c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n    return out;\n  };\n\n  // Polyfill comb\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo (self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n\n    var carry = 0;\n    var hncarry = 0;\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n\n        var lo = r & 0x3ffffff;\n        ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n        lo = (lo + rword) | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = (ncarry + (lo >>> 26)) | 0;\n\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo (self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo (num, out) {\n    var res;\n    var len = this.length + num.length;\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  };\n\n  // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n  function FFTM (x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT (N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  };\n\n  // Returns binary-reversed representation of `x`\n  FFTM.prototype.revBin = function revBin (x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n\n    var rb = 0;\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << (l - i - 1);\n      x >>= 1;\n    }\n\n    return rb;\n  };\n\n  // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n  FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n\n          var rx = rtwdf_ * ro - itwdf_ * io;\n\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n\n          /* jshint maxdepth : false */\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n\n      t = iws[i];\n\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n    var carry = 0;\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n        Math.round(ws[2 * i] / N) +\n        carry;\n\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n    var carry = 0;\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n\n      rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n    }\n\n    // Pad with zeroes\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub (N) {\n    var ph = new Array(N);\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp (x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n\n    var rmws = out.words;\n    rmws.length = N;\n\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  };\n\n  // Multiply `this` by `num`\n  BN.prototype.mul = function mul (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  };\n\n  // Multiply employing FFT\n  BN.prototype.mulf = function mulf (num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  };\n\n  // In-place Multiplication\n  BN.prototype.imul = function imul (num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n\n    // Carry\n    var carry = 0;\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += (w / 0x4000000) | 0;\n      // NOTE: lo is 27bit maximum\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln (num) {\n    return this.clone().imuln(num);\n  };\n\n  // `this` * `this`\n  BN.prototype.sqr = function sqr () {\n    return this.mul(this);\n  };\n\n  // `this` * `this` in-place\n  BN.prototype.isqr = function isqr () {\n    return this.imul(this.clone());\n  };\n\n  // Math.pow(`this`, `num`)\n  BN.prototype.pow = function pow (num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1);\n\n    // Skip leading zeroes\n    var res = this;\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  };\n\n  // Shift-left in-place\n  BN.prototype.iushln = function iushln (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = ((this.words[i] | 0) - newCarry) << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> (26 - r);\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln (bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  };\n\n  // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n  BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n    if (hint) {\n      h = (hint - (hint % 26)) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n    var maskedWords = extended;\n\n    h -= s;\n    h = Math.max(0, h);\n\n    // Extended mode, copy masked part\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {\n      // No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = (carry << (26 - r)) | (word >>> r);\n      carry = word & mask;\n    }\n\n    // Push carried bits as a mask\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  };\n\n  // Shift-left\n  BN.prototype.shln = function shln (bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln (bits) {\n    return this.clone().iushln(bits);\n  };\n\n  // Shift-right\n  BN.prototype.shrn = function shrn (bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn (bits) {\n    return this.clone().iushrn(bits);\n  };\n\n  // Test if n bit is set\n  BN.prototype.testn = function testn (bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) return false;\n\n    // Check bit and return\n    var w = this.words[s];\n\n    return !!(w & q);\n  };\n\n  // Return only lowers bits of number (in-place)\n  BN.prototype.imaskn = function imaskn (bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  };\n\n  // Return only lowers bits of number\n  BN.prototype.maskn = function maskn (bits) {\n    return this.clone().imaskn(bits);\n  };\n\n  // Add plain number `num` to `this`\n  BN.prototype.iaddn = function iaddn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num);\n\n    // Possible sign change\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    // Add without checks\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn (num) {\n    this.words[0] += num;\n\n    // Carry\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n    this.length = Math.max(this.length, i + 1);\n\n    return this;\n  };\n\n  // Subtract plain number `num` from `this`\n  BN.prototype.isubn = function isubn (num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn (num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn (num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs () {\n    this.negative = 0;\n\n    return this;\n  };\n\n  BN.prototype.abs = function abs () {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - ((right / 0x4000000) | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip();\n\n    // Subtraction overflow\n    assert(carry === -1);\n    carry = 0;\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n    this.negative = 1;\n\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv (num, mode) {\n    var shift = this.length - num.length;\n\n    var a = this.clone();\n    var b = num;\n\n    // Normalize\n    var bhi = b.words[b.length - 1] | 0;\n    var bhiBits = this._countBits(bhi);\n    shift = 26 - bhiBits;\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    }\n\n    // Initialize quotient\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n    if (diff.negative === 0) {\n      a = diff;\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n        (a.words[b.length + j - 1] | 0);\n\n      // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n      qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n        a._ishlnsubmul(b, 1, j);\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n    if (q) {\n      q.strip();\n    }\n    a.strip();\n\n    // Denormalize\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  };\n\n  // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n  BN.prototype.divmod = function divmod (num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    }\n\n    // Both numbers are positive at this point\n\n    // Strip both numbers to approximate shift value\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    }\n\n    // Very short reduction\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  };\n\n  // Find `this` / `num`\n  BN.prototype.div = function div (num) {\n    return this.divmod(num, 'div', false).div;\n  };\n\n  // Find `this` % `num`\n  BN.prototype.mod = function mod (num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod (num) {\n    return this.divmod(num, 'mod', true).mod;\n  };\n\n  // Find Round(`this` / `num`)\n  BN.prototype.divRound = function divRound (num) {\n    var dm = this.divmod(num);\n\n    // Fast case - exact division\n    if (dm.mod.isZero()) return dm.div;\n\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half);\n\n    // Round down\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n    // Round up\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn (num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n\n    var acc = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  };\n\n  // In-place division by number\n  BN.prototype.idivn = function idivn (num) {\n    assert(num <= 0x3ffffff);\n\n    var carry = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = (w / num) | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn (num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    }\n\n    // A * x + B * y = x\n    var A = new BN(1);\n    var B = new BN(0);\n\n    // C * x + D * y = y\n    var C = new BN(0);\n    var D = new BN(1);\n\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        x.iushrn(i);\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        y.iushrn(j);\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  };\n\n  // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n  BN.prototype._invmp = function _invmp (p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n      if (i > 0) {\n        a.iushrn(i);\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n      if (j > 0) {\n        b.iushrn(j);\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd (num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0;\n\n    // Remove common factor of two\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  };\n\n  // Invert number in the field F(num)\n  BN.prototype.invm = function invm (num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven () {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd () {\n    return (this.words[0] & 1) === 1;\n  };\n\n  // And first word and num\n  BN.prototype.andln = function andln (num) {\n    return this.words[0] & num;\n  };\n\n  // Increment at the bit position in-line\n  BN.prototype.bincn = function bincn (bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r;\n\n    // Fast case: bit is much higher than all existing words\n    if (this.length <= s) {\n      this._expand(s + 1);\n      this.words[s] |= q;\n      return this;\n    }\n\n    // Add bit and propagate, if needed\n    var carry = q;\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero () {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn (num) {\n    var negative = num < 0;\n\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n\n    this.strip();\n\n    var res;\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n  BN.prototype.cmp = function cmp (num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  };\n\n  // Unsigned comparison\n  BN.prototype.ucmp = function ucmp (num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n\n    var res = 0;\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n\n      if (a === b) continue;\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n      break;\n    }\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn (num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt (num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten (num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte (num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn (num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt (num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten (num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte (num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn (num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq (num) {\n    return this.cmp(num) === 0;\n  };\n\n  //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n  BN.red = function red (num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed () {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed (ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed (ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd (num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd (num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub (num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub (num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl (num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul (num) {\n    assert(this.red, 'redMul works only with red numbers');\n    this.red._verify2(this, num);\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr () {\n    assert(this.red, 'redSqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr () {\n    assert(this.red, 'redISqr works only with red numbers');\n    this.red._verify1(this);\n    return this.red.isqr(this);\n  };\n\n  // Square root over p\n  BN.prototype.redSqrt = function redSqrt () {\n    assert(this.red, 'redSqrt works only with red numbers');\n    this.red._verify1(this);\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm () {\n    assert(this.red, 'redInvm works only with red numbers');\n    this.red._verify1(this);\n    return this.red.invm(this);\n  };\n\n  // Return negative clone of `this` % `red modulo`\n  BN.prototype.redNeg = function redNeg () {\n    assert(this.red, 'redNeg works only with red numbers');\n    this.red._verify1(this);\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow (num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n    this.red._verify1(this);\n    return this.red.pow(this, num);\n  };\n\n  // Prime numbers with efficient reduction\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  };\n\n  // Pseudo-Mersenne prime\n  function MPrime (name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp () {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce (num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      r.strip();\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split (input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK (num) {\n    return num.imul(this.k);\n  };\n\n  function K256 () {\n    MPrime.call(\n      this,\n      'k256',\n      'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split (input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n\n    var outLen = Math.min(input.length, 9);\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    }\n\n    // Shift by 9 limbs\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n      prev = next;\n    }\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK (num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2;\n\n    // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n    var lo = 0;\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + ((lo / 0x4000000) | 0);\n    }\n\n    // Fast length reduction\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n    return num;\n  };\n\n  function P224 () {\n    MPrime.call(\n      this,\n      'p224',\n      'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n  inherits(P224, MPrime);\n\n  function P192 () {\n    MPrime.call(\n      this,\n      'p192',\n      'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n  inherits(P192, MPrime);\n\n  function P25519 () {\n    // 2 ^ 255 - 19\n    MPrime.call(\n      this,\n      '25519',\n      '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK (num) {\n    // K = 0x13\n    var carry = 0;\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n\n      num.words[i] = lo;\n      carry = hi;\n    }\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n    return num;\n  };\n\n  // Exported mostly for testing purposes, use plain name instead\n  BN._prime = function prime (name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n\n    var prime;\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n    primes[name] = prime;\n\n    return prime;\n  };\n\n  //\n  // Base reduction engine\n  //\n  function Red (m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1 (a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2 (a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red,\n      'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod (a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg (a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add (a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd (a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.sub = function sub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub (a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n    return res;\n  };\n\n  Red.prototype.shl = function shl (a, num) {\n    this._verify1(a);\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul (a, b) {\n    this._verify2(a, b);\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr (a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr (a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt (a) {\n    if (a.isZero()) return a.clone();\n\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1);\n\n    // Fast case\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    }\n\n    // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n    var q = this.m.subn(1);\n    var s = 0;\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n    assert(!q.isZero());\n\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg();\n\n    // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm (a) {\n    var inv = a._invmp(this.m);\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow (a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = (word >> j) & 1;\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo (num) {\n    var r = num.umod(this.m);\n\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom (num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  };\n\n  //\n  // Montgomery method engine\n  //\n\n  BN.mont = function mont (num) {\n    return new Mont(num);\n  };\n\n  function Mont (m) {\n    Red.call(this, m);\n\n    this.shift = this.m.bitLength();\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - (this.shift % 26);\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo (num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom (num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul (a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul (a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm (a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);\n","import BN from 'bn.js';\n\n/**\n * @fileoverview\n * BigInteger implementation of basic operations\n * Wrapper of bn.js library (wwww.github.com/indutny/bn.js)\n * @module biginteger/bn\n * @private\n */\n\n/**\n * @private\n */\nexport default class BigInteger {\n  /**\n   * Get a BigInteger (input must be big endian for strings and arrays)\n   * @param {Number|String|Uint8Array} n - Value to convert\n   * @throws {Error} on undefined input\n   */\n  constructor(n) {\n    if (n === undefined) {\n      throw new Error('Invalid BigInteger input');\n    }\n\n    this.value = new BN(n);\n  }\n\n  clone() {\n    const clone = new BigInteger(null);\n    this.value.copy(clone.value);\n    return clone;\n  }\n\n  /**\n   * BigInteger increment in place\n   */\n  iinc() {\n    this.value.iadd(new BN(1));\n    return this;\n  }\n\n  /**\n   * BigInteger increment\n   * @returns {BigInteger} this + 1.\n   */\n  inc() {\n    return this.clone().iinc();\n  }\n\n  /**\n   * BigInteger decrement in place\n   */\n  idec() {\n    this.value.isub(new BN(1));\n    return this;\n  }\n\n  /**\n   * BigInteger decrement\n   * @returns {BigInteger} this - 1.\n   */\n  dec() {\n    return this.clone().idec();\n  }\n\n\n  /**\n   * BigInteger addition in place\n   * @param {BigInteger} x - Value to add\n   */\n  iadd(x) {\n    this.value.iadd(x.value);\n    return this;\n  }\n\n  /**\n   * BigInteger addition\n   * @param {BigInteger} x - Value to add\n   * @returns {BigInteger} this + x.\n   */\n  add(x) {\n    return this.clone().iadd(x);\n  }\n\n  /**\n   * BigInteger subtraction in place\n   * @param {BigInteger} x - Value to subtract\n   */\n  isub(x) {\n    this.value.isub(x.value);\n    return this;\n  }\n\n  /**\n   * BigInteger subtraction\n   * @param {BigInteger} x - Value to subtract\n   * @returns {BigInteger} this - x.\n   */\n  sub(x) {\n    return this.clone().isub(x);\n  }\n\n  /**\n   * BigInteger multiplication in place\n   * @param {BigInteger} x - Value to multiply\n   */\n  imul(x) {\n    this.value.imul(x.value);\n    return this;\n  }\n\n  /**\n   * BigInteger multiplication\n   * @param {BigInteger} x - Value to multiply\n   * @returns {BigInteger} this * x.\n   */\n  mul(x) {\n    return this.clone().imul(x);\n  }\n\n  /**\n   * Compute value modulo m, in place\n   * @param {BigInteger} m - Modulo\n   */\n  imod(m) {\n    this.value = this.value.umod(m.value);\n    return this;\n  }\n\n  /**\n   * Compute value modulo m\n   * @param {BigInteger} m - Modulo\n   * @returns {BigInteger} this mod m.\n   */\n  mod(m) {\n    return this.clone().imod(m);\n  }\n\n  /**\n   * Compute modular exponentiation\n   * Much faster than this.exp(e).mod(n)\n   * @param {BigInteger} e - Exponent\n   * @param {BigInteger} n - Modulo\n   * @returns {BigInteger} this ** e mod n.\n   */\n  modExp(e, n) {\n    // We use either Montgomery or normal reduction context\n    // Montgomery requires coprime n and R (montogmery multiplier)\n    //  bn.js picks R as power of 2, so n must be odd\n    const nred = n.isEven() ? BN.red(n.value) : BN.mont(n.value);\n    const x = this.clone();\n    x.value = x.value.toRed(nred).redPow(e.value).fromRed();\n    return x;\n  }\n\n  /**\n   * Compute the inverse of this value modulo n\n   * Note: this and and n must be relatively prime\n   * @param {BigInteger} n - Modulo\n   * @returns {BigInteger} x such that this*x = 1 mod n\n   * @throws {Error} if the inverse does not exist\n   */\n  modInv(n) {\n    // invm returns a wrong result if the inverse does not exist\n    if (!this.gcd(n).isOne()) {\n      throw new Error('Inverse does not exist');\n    }\n    return new BigInteger(this.value.invm(n.value));\n  }\n\n  /**\n   * Compute greatest common divisor between this and n\n   * @param {BigInteger} n - Operand\n   * @returns {BigInteger} gcd\n   */\n  gcd(n) {\n    return new BigInteger(this.value.gcd(n.value));\n  }\n\n  /**\n   * Shift this to the left by x, in place\n   * @param {BigInteger} x - Shift value\n   */\n  ileftShift(x) {\n    this.value.ishln(x.value.toNumber());\n    return this;\n  }\n\n  /**\n   * Shift this to the left by x\n   * @param {BigInteger} x - Shift value\n   * @returns {BigInteger} this << x.\n   */\n  leftShift(x) {\n    return this.clone().ileftShift(x);\n  }\n\n  /**\n   * Shift this to the right by x, in place\n   * @param {BigInteger} x - Shift value\n   */\n  irightShift(x) {\n    this.value.ishrn(x.value.toNumber());\n    return this;\n  }\n\n  /**\n   * Shift this to the right by x\n   * @param {BigInteger} x - Shift value\n   * @returns {BigInteger} this >> x.\n   */\n  rightShift(x) {\n    return this.clone().irightShift(x);\n  }\n\n  /**\n   * Whether this value is equal to x\n   * @param {BigInteger} x\n   * @returns {Boolean}\n   */\n  equal(x) {\n    return this.value.eq(x.value);\n  }\n\n  /**\n   * Whether this value is less than x\n   * @param {BigInteger} x\n   * @returns {Boolean}\n   */\n  lt(x) {\n    return this.value.lt(x.value);\n  }\n\n  /**\n   * Whether this value is less than or equal to x\n   * @param {BigInteger} x\n   * @returns {Boolean}\n   */\n  lte(x) {\n    return this.value.lte(x.value);\n  }\n\n  /**\n   * Whether this value is greater than x\n   * @param {BigInteger} x\n   * @returns {Boolean}\n   */\n  gt(x) {\n    return this.value.gt(x.value);\n  }\n\n  /**\n   * Whether this value is greater than or equal to x\n   * @param {BigInteger} x\n   * @returns {Boolean}\n   */\n  gte(x) {\n    return this.value.gte(x.value);\n  }\n\n  isZero() {\n    return this.value.isZero();\n  }\n\n  isOne() {\n    return this.value.eq(new BN(1));\n  }\n\n  isNegative() {\n    return this.value.isNeg();\n  }\n\n  isEven() {\n    return this.value.isEven();\n  }\n\n  abs() {\n    const res = this.clone();\n    res.value = res.value.abs();\n    return res;\n  }\n\n  /**\n   * Get this value as a string\n   * @returns {String} this value.\n   */\n  toString() {\n    return this.value.toString();\n  }\n\n  /**\n   * Get this value as an exact Number (max 53 bits)\n   * Fails if this value is too large\n   * @returns {Number}\n   */\n  toNumber() {\n    return this.value.toNumber();\n  }\n\n  /**\n   * Get value of i-th bit\n   * @param {Number} i - Bit index\n   * @returns {Number} Bit value.\n   */\n  getBit(i) {\n    return this.value.testn(i) ? 1 : 0;\n  }\n\n  /**\n   * Compute bit length\n   * @returns {Number} Bit length.\n   */\n  bitLength() {\n    return this.value.bitLength();\n  }\n\n  /**\n   * Compute byte length\n   * @returns {Number} Byte length.\n   */\n  byteLength() {\n    return this.value.byteLength();\n  }\n\n  /**\n   * Get Uint8Array representation of this number\n   * @param {String} endian - Endianess of output array (defaults to 'be')\n   * @param {Number} length - Of output array\n   * @returns {Uint8Array}\n   */\n  toUint8Array(endian = 'be', length) {\n    return this.value.toArrayLike(Uint8Array, endian, length);\n  }\n}\n","var r;\n\nmodule.exports = function rand(len) {\n  if (!r)\n    r = new Rand(null);\n\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes)\n    return this.rand.getBytes(n);\n\n  var res = new Uint8Array(n);\n  for (var i = 0; i < res.length; i++)\n    res[i] = this.rand.getByte();\n  return res;\n};\n\nif (typeof self === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    };\n\n  // Safari's WebWorkers do not have `crypto`\n  } else if (typeof window === 'object') {\n    // Old junk\n    Rand.prototype._rand = function() {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n    if (typeof crypto.randomBytes !== 'function')\n      throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {\n  }\n}\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg))\n    return msg.slice();\n  if (!msg)\n    return [];\n  var res = [];\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++)\n      res[i] = msg[i] | 0;\n    return res;\n  }\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0)\n      msg = '0' + msg;\n    for (var i = 0; i < msg.length; i += 2)\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi)\n        res.push(hi, lo);\n      else\n        res.push(lo);\n    }\n  }\n  return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1)\n    return '0' + word;\n  else\n    return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n  for (var i = 0; i < msg.length; i++)\n    res += zero2(msg[i].toString(16));\n  return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex')\n    return toHex(arr);\n  else\n    return arr;\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w) {\n  var naf = [];\n  var ws = 1 << (w + 1);\n  var k = num.clone();\n  while (k.cmpn(1) >= 0) {\n    var z;\n    if (k.isOdd()) {\n      var mod = k.andln(ws - 1);\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    naf.push(z);\n\n    // Optimization, shift by word if possible\n    var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\n    for (var i = 1; i < shift; i++)\n      naf.push(0);\n    k.iushrn(shift);\n  }\n\n  return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n  var jsf = [\n    [],\n    []\n  ];\n\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n\n    // First phase\n    var m14 = (k1.andln(3) + d1) & 3;\n    var m24 = (k2.andln(3) + d2) & 3;\n    if (m14 === 3)\n      m14 = -1;\n    if (m24 === 3)\n      m24 = -1;\n    var u1;\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      var m8 = (k1.andln(7) + d1) & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2)\n        u1 = -m14;\n      else\n        u1 = m14;\n    }\n    jsf[0].push(u1);\n\n    var u2;\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      var m8 = (k2.andln(7) + d2) & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2)\n        u2 = -m24;\n      else\n        u2 = m24;\n    }\n    jsf[1].push(u2);\n\n    // Second phase\n    if (2 * d1 === u1 + 1)\n      d1 = 1 - d1;\n    if (2 * d2 === u2 + 1)\n      d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] :\n           this[key] = computer.call(this);\n  };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n                                     bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'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  // 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);\n  var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3;\n\n  // Translate into more windowed form\n  var repr = [];\n  for (var j = 0; j < naf.length; j += doubles.step) {\n    var nafW = 0;\n    for (var k = j + doubles.step - 1; k >= j; k--)\n      nafW = (nafW << 1) + naf[k];\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n  for (var i = I; i > 0; i--) {\n    for (var j = 0; j < repr.length; j++) {\n      var nafW = repr[j];\n      if (nafW === i)\n        b = b.mixedAdd(doubles.points[j]);\n      else if (nafW === -i)\n        b = b.mixedAdd(doubles.points[j].neg());\n    }\n    a = a.add(b);\n  }\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4;\n\n  // Precompute window\n  var nafPoints = p._getNAFPoints(w);\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points;\n\n  // Get NAF form\n  var naf = getNAF(k, w);\n\n  // Add `this`*(N+1) for every w-NAF index\n  var acc = this.jpoint(null, null, null);\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var k = 0; i >= 0 && naf[i] === 0; i--)\n      k++;\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n\n    if (i < 0)\n      break;\n    var z = naf[i];\n    assert(z !== 0);\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0)\n        acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0)\n        acc = acc.add(wnd[(z - 1) >> 1]);\n      else\n        acc = acc.add(wnd[(-z - 1) >> 1].neg());\n    }\n  }\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n                                                       points,\n                                                       coeffs,\n                                                       len,\n                                                       jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3;\n\n  // Fill all arrays\n  var max = 0;\n  for (var i = 0; i < len; i++) {\n    var p = points[i];\n    var nafPoints = p._getNAFPoints(defW);\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  }\n\n  // Comb small window NAFs\n  for (var i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a]);\n      naf[b] = getNAF(coeffs[b], wndWidth[b]);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [\n      points[a], /* 1 */\n      null, /* 3 */\n      null, /* 5 */\n      points[b] /* 7 */\n    ];\n\n    // Try to avoid Projective points, if possible\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [\n      -3, /* -1 -1 */\n      -1, /* -1 0 */\n      -5, /* -1 1 */\n      -7, /* 0 -1 */\n      0, /* 0 0 */\n      7, /* 0 1 */\n      5, /* 1 -1 */\n      1, /* 1 0 */\n      3  /* 1 1 */\n    ];\n\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n    for (var j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n  for (var i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n      for (var j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0)\n          zero = false;\n      }\n      if (!zero)\n        break;\n      k++;\n      i--;\n    }\n    if (i >= 0)\n      k++;\n    acc = acc.dblp(k);\n    if (i < 0)\n      break;\n\n    for (var j = 0; j < len; j++) {\n      var z = tmp[j];\n      var p;\n      if (z === 0)\n        continue;\n      else if (z > 0)\n        p = wnd[j][(z - 1) >> 1];\n      else if (z < 0)\n        p = wnd[j][(-z - 1) >> 1].neg();\n\n      if (p.type === 'affine')\n        acc = acc.mixedAdd(p);\n      else\n        acc = acc.add(p);\n    }\n  }\n  // Zeroify references\n  for (var i = 0; i < len; i++)\n    wnd[i] = null;\n\n  if (jacobianResult)\n    return acc;\n  else\n    return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n\n  var len = this.p.byteLength();\n\n  // uncompressed, hybrid-odd, hybrid-even\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n      bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06)\n      assert(bytes[bytes.length - 1] % 2 === 0);\n    else if (bytes[0] === 0x07)\n      assert(bytes[bytes.length - 1] % 2 === 1);\n\n    var res =  this.point(bytes.slice(1, 1 + len),\n                          bytes.slice(1 + len, 1 + 2 * len));\n\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n              bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n\n  if (compact)\n    return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n  return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed)\n    return this;\n\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed)\n    return false;\n\n  var doubles = this.precomputed.doubles;\n  if (!doubles)\n    return false;\n\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles)\n    return this.precomputed.doubles;\n\n  var doubles = [ this ];\n  var acc = this;\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++)\n      acc = acc.dbl();\n    doubles.push(acc);\n  }\n  return {\n    step: step,\n    points: doubles\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf)\n    return this.precomputed.naf;\n\n  var res = [ this ];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n  for (var i = 1; i < max; i++)\n    res[i] = res[i - 1].add(dbl);\n  return {\n    wnd: wnd,\n    points: res\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n  for (var i = 0; i < k; i++)\n    r = r.dbl();\n  return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n  // If the curve is endomorphic, precalculate beta and lambda\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n    return;\n\n  // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n  var beta;\n  var lambda;\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p);\n    // Choose the smallest beta\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  }\n\n  // Get basis vectors, used for balanced length-two representation\n  var basis;\n  if (conf.basis) {\n    basis = conf.basis.map(function(vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16)\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n  // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1);\n\n  // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n  var a0;\n  var b0;\n  // First vector\n  var a1;\n  var b1;\n  // Second vector\n  var a2;\n  var b2;\n\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n    prevR = r;\n\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n  a2 = r.neg();\n  b2 = x;\n\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  }\n\n  // Normalize signs\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [\n    { a: a1, b: b1 },\n    { a: a2, b: b2 }\n  ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b);\n\n  // Calculate answer\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf)\n    return true;\n\n  var x = point.x;\n  var y = point.y;\n\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n    function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n  var npoints = this._endoWnafT1;\n  var ncoeffs = this._endoWnafT2;\n  for (var i = 0; i < points.length; i++) {\n    var split = this._endoSplit(coeffs[i]);\n    var p = points[i];\n    var beta = p._getBeta();\n\n    if (split.k1.negative) {\n      split.k1.ineg();\n      p = p.neg(true);\n    }\n    if (split.k2.negative) {\n      split.k2.ineg();\n      beta = beta.neg(true);\n    }\n\n    npoints[i * 2] = p;\n    npoints[i * 2 + 1] = beta;\n    ncoeffs[i * 2] = split.k1;\n    ncoeffs[i * 2 + 1] = split.k2;\n  }\n  var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n  // Clean-up references to points and coefficients\n  for (var j = 0; j < i * 2; j++) {\n    npoints[j] = null;\n    ncoeffs[j] = null;\n  }\n  return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    // Force redgomery representation when loading from JSON\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo)\n    return;\n\n  var pre = this.precomputed;\n  if (pre && pre.beta)\n    return pre.beta;\n\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n  if (pre) {\n    var curve = this.curve;\n    var endoMul = function(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul)\n      }\n    };\n  }\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed)\n    return [ this.x, this.y ];\n\n  return [ this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1)\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1)\n    }\n  } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string')\n    obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2])\n    return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [ res ].concat(pre.doubles.points.map(obj2point))\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [ res ].concat(pre.naf.points.map(obj2point))\n    }\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf)\n    return p;\n\n  // P + O = P\n  if (p.inf)\n    return this;\n\n  // P + P = 2P\n  if (this.eq(p))\n    return this.dbl();\n\n  // P + (-P) = O\n  if (this.neg().eq(p))\n    return this.curve.point(null, null);\n\n  // P + Q = O\n  if (this.x.cmp(p.x) === 0)\n    return this.curve.point(null, null);\n\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0)\n    c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf)\n    return this;\n\n  // 2P = O\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0)\n    return this.curve.point(null, null);\n\n  var a = this.curve.a;\n\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this.isInfinity())\n    return this;\n  else if (this._hasDoubles(k))\n    return this.curve._fixedNafMul(this, k);\n  else if (this.curve.endo)\n    return this.curve._endoWnafMulAdd([ this ], [ k ]);\n  else\n    return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [ this, p2 ];\n  var coeffs = [ k1, k2 ];\n  if (this.curve.endo)\n    return this.curve._endoWnafMulAdd(points, coeffs, true);\n  else\n    return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p ||\n         this.inf === p.inf &&\n             (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf)\n    return this;\n\n  var res = this.curve.point(this.x, this.y.redNeg());\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n    var negate = function(p) {\n      return p.neg();\n    };\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate)\n      }\n    };\n  }\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf)\n    return this.curve.jpoint(null, null, null);\n\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n  if (!this.x.red)\n    this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red)\n    this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red)\n    this.z = this.z.toRed(this.curve.red);\n\n  this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity())\n    return this.curve.point(null, null);\n\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p;\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 12M + 4S + 7A\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity())\n    return p.toJ();\n\n  // P + O = P\n  if (p.isInfinity())\n    return this;\n\n  // 8M + 3S + 7A\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0)\n      return this.curve.jpoint(null, null, null);\n    else\n      return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0)\n    return this;\n  if (this.isInfinity())\n    return this;\n  if (!pow)\n    return this.dbl();\n\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n    for (var i = 0; i < pow; i++)\n      r = r.dbl();\n    return r;\n  }\n\n  // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  // Reuse results\n  var jyd = jy.redAdd(jy);\n  for (var i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow)\n      jz4 = jz4.redMul(jyd4);\n\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity())\n    return this;\n\n  if (this.curve.zeroA)\n    return this._zeroDbl();\n  else if (this.curve.threeA)\n    return this._threeDbl();\n  else\n    return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a; a = 0\n    var m = xx.redAdd(xx).redIAdd(xx);\n    // T = M ^ 2 - 2*S\n    var t = m.redSqr().redISub(s).redISub(s);\n\n    // 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2*Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n\n    // A = X1^2\n    var a = this.x.redSqr();\n    // B = Y1^2\n    var b = this.y.redSqr();\n    // C = B^2\n    var c = b.redSqr();\n    // D = 2 * ((X1 + B)^2 - A - C)\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d);\n    // E = 3 * A\n    var e = a.redAdd(a).redIAdd(a);\n    // F = E^2\n    var f = e.redSqr();\n\n    // 8 * C\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8);\n\n    // X3 = F - 2 * D\n    nx = f.redISub(d).redISub(d);\n    // Y3 = E * (D - X3) - 8 * C\n    ny = e.redMul(d.redISub(nx)).redISub(c8);\n    // Z3 = 2 * Y1 * Z1\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz;\n  // Z = 1\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n\n    // XX = X1^2\n    var xx = this.x.redSqr();\n    // YY = Y1^2\n    var yy = this.y.redSqr();\n    // YYYY = YY^2\n    var yyyy = yy.redSqr();\n    // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s);\n    // M = 3 * XX + a\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n    // T = M^2 - 2 * S\n    var t = m.redSqr().redISub(s).redISub(s);\n    // X3 = T\n    nx = t;\n    // Y3 = M * (S - T) - 8 * YYYY\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n    // Z3 = 2 * Y1\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n\n    // delta = Z1^2\n    var delta = this.z.redSqr();\n    // gamma = Y1^2\n    var gamma = this.y.redSqr();\n    // beta = X1 * gamma\n    var beta = this.x.redMul(gamma);\n    // alpha = 3 * (X1 - delta) * (X1 + delta)\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha);\n    // X3 = alpha^2 - 8 * beta\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8);\n    // Z3 = (Y1 + Z1)^2 - gamma - delta\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n    // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a;\n\n  // 4M + 6S + 10A\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA)\n    return this.dbl().add(this);\n\n  // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n\n  // XX = X1^2\n  var xx = this.x.redSqr();\n  // YY = Y1^2\n  var yy = this.y.redSqr();\n  // ZZ = Z1^2\n  var zz = this.z.redSqr();\n  // YYYY = YY^2\n  var yyyy = yy.redSqr();\n  // M = 3 * XX + a * ZZ2; a = 0\n  var m = xx.redAdd(xx).redIAdd(xx);\n  // MM = M^2\n  var mm = m.redSqr();\n  // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm);\n  // EE = E^2\n  var ee = e.redSqr();\n  // T = 16*YYYY\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  // U = (M + E)^2 - MM - EE - T\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n  // X3 = 4 * (X1 * EE - 4 * YY * U)\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx);\n  // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  // Z3 = (Z1 + E)^2 - ZZ - EE\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine')\n    return this.eq(p.toJ());\n\n  if (this === p)\n    return true;\n\n  // x1 * z2^2 == x2 * z1^2\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n    return false;\n\n  // y1 * z2^3 == y2 * z1^3\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0)\n    return true;\n\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0)\n      return false;\n\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0)\n      return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) +\n      ' y: ' + this.y.toString(16, 2) +\n      ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\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  // Note: this implementation is according to the original paper\n  // by P. Montgomery, NOT the one by D. J. Bernstein.\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  var bytes = utils.toArray(bytes, enc);\n\n  // TODO Curve448\n  // Montgomery curve points must be represented in the compressed format\n  // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n  if (bytes.length === 33 && bytes[0] === 0x40)\n    bytes = bytes.slice(1, 33).reverse(); // point must be little-endian\n  if (bytes.length !== 32)\n    throw new Error('Unknown point compression format');\n  return this.point(bytes, 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(compact) {\n  var len = this.curve.p.byteLength();\n\n  // Note: the output should always be little-endian\n  // https://tools.ietf.org/html/draft-ietf-openpgp-rfc4880bis-02#appendix-B\n  if (compact) {\n    return [ 0x40 ].concat(this.getX().toArray('le', len));\n  } else {\n    return this.getX().toArray('be', len);\n  }\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z);\n  // AA = A^2\n  var aa = a.redSqr();\n  // B = X1 - Z1\n  var b = this.x.redSub(this.z);\n  // BB = B^2\n  var bb = b.redSqr();\n  // C = AA - BB\n  var c = aa.redSub(bb);\n  // X3 = AA * BB\n  var nx = aa.redMul(bb);\n  // Z3 = C * (BB + A24 * C)\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z);\n  // B = X2 - Z2\n  var b = this.x.redSub(this.z);\n  // C = X3 + Z3\n  var c = p.x.redAdd(p.z);\n  // D = X3 - Z3\n  var d = p.x.redSub(p.z);\n  // DA = D * A\n  var da = d.redMul(a);\n  // CB = C * B\n  var cb = c.redMul(b);\n  // X5 = Z1 * (DA + CB)^2\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n  // Z5 = X1 * (DA - CB)^2\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n  var b = this.curve.point(null, null); // (N / 2) * Q\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n    bits.push(t.andln(1));\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c);\n      // N * Q = 2 * ((N / 2) * Q + Q))\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c);\n      // N * Q + Q = 2 * ((N / 2) * Q + Q)\n      a = a.dbl();\n    }\n  }\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n\n  return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n\n  Base.call(this, 'edwards', conf);\n\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA)\n    return num.redNeg();\n  else\n    return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC)\n    return num;\n  else\n    return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red)\n    x = x.toRed(this.red);\n\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd)\n    y = y.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red)\n    y = y.toRed(this.red);\n\n  // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd)\n      throw new Error('invalid point');\n    else\n      return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n    throw new Error('invalid point');\n\n  if (x.fromRed().isOdd() !== odd)\n    x = x.redNeg();\n\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity())\n    return true;\n\n  // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n  point.normalize();\n\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red)\n      this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red)\n      this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red)\n      this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red)\n      this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one;\n\n    // Use extended coordinates\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne)\n        this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity())\n    return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n      ' y: ' + this.y.fromRed().toString(16, 2) +\n      ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 &&\n    (this.y.cmp(this.z) === 0 ||\n    (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n\n  // A = X1^2\n  var a = this.x.redSqr();\n  // B = Y1^2\n  var b = this.y.redSqr();\n  // C = 2 * Z1^2\n  var c = this.z.redSqr();\n  c = c.redIAdd(c);\n  // D = a * A\n  var d = this.curve._mulA(a);\n  // E = (X1 + Y1)^2 - A - B\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n  // G = D + B\n  var g = d.redAdd(b);\n  // F = G - C\n  var f = g.redSub(c);\n  // H = D - B\n  var h = d.redSub(b);\n  // X3 = E * F\n  var nx = e.redMul(f);\n  // Y3 = G * H\n  var ny = g.redMul(h);\n  // T3 = E * H\n  var nt = e.redMul(h);\n  // Z3 = F * G\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr();\n  // C = X1^2\n  var c = this.x.redSqr();\n  // D = Y1^2\n  var d = this.y.redSqr();\n\n  var nx;\n  var ny;\n  var nz;\n  if (this.curve.twisted) {\n    // E = a * C\n    var 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      var h = this.z.redSqr();\n      // J = F - 2 * H\n      var 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    var e = c.redAdd(d);\n    // H = (c * Z1)^2\n    var h = this.curve._mulC(this.z).redSqr();\n    // J = E - 2 * H\n    var 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 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\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 assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac))\n    return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize)\n    key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize);\n\n  // Add padding to key\n  for (var i = key.length; i < this.blockSize; i++)\n    key.push(0);\n\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x36;\n  this.inner = new this.Hash().update(key);\n\n  // 0x36 ^ 0x5c = 0x6a\n  for (i = 0; i < key.length; i++)\n    key[i] ^= 0x6a;\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","module.exports = {\n  doubles: {\n    step: 4,\n    points: [\n      [\n        'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n        'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\n      ],\n      [\n        '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n        '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\n      ],\n      [\n        '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n        'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\n      ],\n      [\n        '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n        '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\n      ],\n      [\n        '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n        '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\n      ],\n      [\n        '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n        '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\n      ],\n      [\n        'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n        '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\n      ],\n      [\n        '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n        'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\n      ],\n      [\n        'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n        '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\n      ],\n      [\n        'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n        'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\n      ],\n      [\n        'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n        '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\n      ],\n      [\n        '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n        '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\n      ],\n      [\n        '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n        '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\n      ],\n      [\n        '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n        '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\n      ],\n      [\n        '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n        '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\n      ],\n      [\n        '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n        '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\n      ],\n      [\n        '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n        '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\n      ],\n      [\n        '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n        '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\n      ],\n      [\n        '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n        'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\n      ],\n      [\n        'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n        '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\n      ],\n      [\n        'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n        '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\n      ],\n      [\n        '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n        '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\n      ],\n      [\n        '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n        '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\n      ],\n      [\n        'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n        '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\n      ],\n      [\n        '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n        'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\n      ],\n      [\n        'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n        '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\n      ],\n      [\n        'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n        'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\n      ],\n      [\n        'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n        '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\n      ],\n      [\n        'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n        'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\n      ],\n      [\n        'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n        '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\n      ],\n      [\n        '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n        'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\n      ],\n      [\n        '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n        '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\n      ],\n      [\n        'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n        '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\n      ],\n      [\n        '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n        'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\n      ],\n      [\n        'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n        '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\n      ],\n      [\n        'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n        '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\n      ],\n      [\n        'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n        'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\n      ],\n      [\n        '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n        '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\n      ],\n      [\n        '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n        '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\n      ],\n      [\n        '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n        'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\n      ],\n      [\n        '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n        '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\n      ],\n      [\n        'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n        '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\n      ],\n      [\n        '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n        '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\n      ],\n      [\n        '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n        'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\n      ],\n      [\n        '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n        '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\n      ],\n      [\n        'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n        '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\n      ],\n      [\n        '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n        'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\n      ],\n      [\n        'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n        'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\n      ],\n      [\n        'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n        '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\n      ],\n      [\n        '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n        'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\n      ],\n      [\n        '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n        'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\n      ],\n      [\n        'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n        '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\n      ],\n      [\n        'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n        '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\n      ],\n      [\n        'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n        '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\n      ],\n      [\n        '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n        'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\n      ],\n      [\n        '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n        '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\n      ],\n      [\n        'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n        'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\n      ],\n      [\n        '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n        'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\n      ],\n      [\n        '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n        '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\n      ],\n      [\n        '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n        '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\n      ],\n      [\n        'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n        'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\n      ],\n      [\n        '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n        '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\n      ],\n      [\n        '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n        '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\n      ],\n      [\n        'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n        '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\n      ],\n      [\n        'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n        'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\n      ]\n    ]\n  },\n  naf: {\n    wnd: 7,\n    points: [\n      [\n        'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n        '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\n      ],\n      [\n        '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n        'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\n      ],\n      [\n        '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n        '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\n      ],\n      [\n        'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n        'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\n      ],\n      [\n        '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n        'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\n      ],\n      [\n        'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n        'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\n      ],\n      [\n        'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n        '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\n      ],\n      [\n        'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n        '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\n      ],\n      [\n        '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n        '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\n      ],\n      [\n        '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n        '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\n      ],\n      [\n        '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n        '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\n      ],\n      [\n        '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n        '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\n      ],\n      [\n        'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n        'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\n      ],\n      [\n        'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n        '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\n      ],\n      [\n        '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n        'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\n      ],\n      [\n        '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n        'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\n      ],\n      [\n        '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n        '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\n      ],\n      [\n        '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n        '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\n      ],\n      [\n        '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n        '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\n      ],\n      [\n        '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n        'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\n      ],\n      [\n        'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n        'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\n      ],\n      [\n        '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n        '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\n      ],\n      [\n        '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n        '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\n      ],\n      [\n        'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n        'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\n      ],\n      [\n        '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n        '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\n      ],\n      [\n        'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n        'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\n      ],\n      [\n        'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n        'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\n      ],\n      [\n        '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n        '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\n      ],\n      [\n        '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n        '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\n      ],\n      [\n        '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n        '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\n      ],\n      [\n        'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n        '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\n      ],\n      [\n        '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n        '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\n      ],\n      [\n        'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n        '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\n      ],\n      [\n        '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n        'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\n      ],\n      [\n        '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n        'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\n      ],\n      [\n        'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n        'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\n      ],\n      [\n        '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n        '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\n      ],\n      [\n        '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n        'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\n      ],\n      [\n        'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n        'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\n      ],\n      [\n        '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n        '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\n      ],\n      [\n        '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n        'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\n      ],\n      [\n        '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n        '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\n      ],\n      [\n        '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n        'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\n      ],\n      [\n        'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n        '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\n      ],\n      [\n        '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n        '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\n      ],\n      [\n        '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n        'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\n      ],\n      [\n        '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n        'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\n      ],\n      [\n        'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n        'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\n      ],\n      [\n        'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n        'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\n      ],\n      [\n        '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n        '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\n      ],\n      [\n        '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n        '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\n      ],\n      [\n        'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n        '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\n      ],\n      [\n        'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n        'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\n      ],\n      [\n        '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n        '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\n      ],\n      [\n        '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n        '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\n      ],\n      [\n        'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n        '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\n      ],\n      [\n        '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n        '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\n      ],\n      [\n        'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n        'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\n      ],\n      [\n        '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n        'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\n      ],\n      [\n        '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n        '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\n      ],\n      [\n        'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n        '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\n      ],\n      [\n        'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n        '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\n      ],\n      [\n        '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n        '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\n      ],\n      [\n        '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n        '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\n      ],\n      [\n        '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n        'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\n      ],\n      [\n        '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n        'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\n      ],\n      [\n        '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n        '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\n      ],\n      [\n        '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n        '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\n      ],\n      [\n        '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n        '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\n      ],\n      [\n        '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n        'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\n      ],\n      [\n        'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n        'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\n      ],\n      [\n        '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n        'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\n      ],\n      [\n        'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n        '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\n      ],\n      [\n        'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n        '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\n      ],\n      [\n        'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n        '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\n      ],\n      [\n        'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n        '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\n      ],\n      [\n        '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n        'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\n      ],\n      [\n        '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n        '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\n      ],\n      [\n        '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n        'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\n      ],\n      [\n        'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n        'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\n      ],\n      [\n        'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n        '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\n      ],\n      [\n        'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n        'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\n      ],\n      [\n        'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n        '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\n      ],\n      [\n        '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n        '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\n      ],\n      [\n        'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n        '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\n      ],\n      [\n        'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n        '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\n      ],\n      [\n        '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n        '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\n      ],\n      [\n        '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n        'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\n      ],\n      [\n        'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n        '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\n      ],\n      [\n        'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n        '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\n      ],\n      [\n        'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n        '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\n      ],\n      [\n        '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n        '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\n      ],\n      [\n        'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n        'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\n      ],\n      [\n        '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n        'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\n      ],\n      [\n        'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n        'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\n      ],\n      [\n        'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n        '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\n      ],\n      [\n        '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n        'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\n      ],\n      [\n        'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n        '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\n      ],\n      [\n        'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n        '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\n      ],\n      [\n        'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n        '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\n      ],\n      [\n        '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n        'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\n      ],\n      [\n        '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n        'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\n      ],\n      [\n        'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n        '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\n      ],\n      [\n        '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n        'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\n      ],\n      [\n        '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n        '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\n      ],\n      [\n        '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n        'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\n      ],\n      [\n        'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n        'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\n      ],\n      [\n        '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n        'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\n      ],\n      [\n        '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n        '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\n      ],\n      [\n        '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n        'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\n      ],\n      [\n        '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n        '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\n      ],\n      [\n        'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n        'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\n      ],\n      [\n        '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n        '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\n      ],\n      [\n        'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n        '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\n      ],\n      [\n        '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n        '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\n      ],\n      [\n        'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n        'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\n      ],\n      [\n        'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n        '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\n      ],\n      [\n        'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n        'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\n      ],\n      [\n        '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n        'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\n      ],\n      [\n        '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n        '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\n      ],\n      [\n        '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n        'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\n      ],\n      [\n        '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n        '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\n      ],\n      [\n        '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n        '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\n      ],\n      [\n        '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n        'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\n      ],\n      [\n        '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n        '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\n      ],\n      [\n        '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n        '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\n      ],\n      [\n        '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n        '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\n      ]\n    ]\n  }\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short')\n    this.curve = new curve.short(options);\n  else if (options.type === 'edwards')\n    this.curve = new curve.edwards(options);\n  else if (options.type === 'mont')\n    this.curve = new curve.mont(options);\n  else throw new Error('Unknown curve type.');\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, n*G != 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\n// https://tools.ietf.org/html/rfc7748#section-4.1\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  cofactor: '8',\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  cofactor: '8',\n  hash: hash.sha256,\n  gRed: false,\n  g: [\n    '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n    // 4/5\n    '6666666666666666666666666666666666666666666666666666666666666658'\n  ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.4\ndefineCurve('brainpoolP256r1', {\n  type: 'short',\n  prime: null,\n  p: 'A9FB57DB A1EEA9BC 3E660A90 9D838D72 6E3BF623 D5262028 2013481D 1F6E5377',\n  a: '7D5A0975 FC2C3057 EEF67530 417AFFE7 FB8055C1 26DC5C6C E94A4B44 F330B5D9',\n  b: '26DC5C6C E94A4B44 F330B5D9 BBD77CBF 95841629 5CF7E1CE 6BCCDC18 FF8C07B6',\n  n: 'A9FB57DB A1EEA9BC 3E660A90 9D838D71 8C397AA3 B561A6F7 901E0E82 974856A7',\n  hash: hash.sha256, // or 384, or 512\n  gRed: false,\n  g: [\n    '8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262',\n    '547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997'\n  ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.6\ndefineCurve('brainpoolP384r1', {\n  type: 'short',\n  prime: null,\n  p: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B4 12B1DA19 7FB71123' +\n    'ACD3A729 901D1A71 87470013 3107EC53',\n  a: '7BC382C6 3D8C150C 3C72080A CE05AFA0 C2BEA28E 4FB22787 139165EF BA91F90F' +\n    '8AA5814A 503AD4EB 04A8C7DD 22CE2826',\n  b: '04A8C7DD 22CE2826 8B39B554 16F0447C 2FB77DE1 07DCD2A6 2E880EA5 3EEB62D5' +\n    '7CB43902 95DBC994 3AB78696 FA504C11',\n  n: '8CB91E82 A3386D28 0F5D6F7E 50E641DF 152F7109 ED5456B3 1F166E6C AC0425A7' +\n    'CF3AB6AF 6B7FC310 3B883202 E9046565',\n  hash: hash.sha384, // or 512\n  gRed: false,\n  g: [\n    '1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10' +\n      'E8E826E03436D646AAEF87B2E247D4AF1E',\n    '8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129' +\n      '280E4646217791811142820341263C5315'\n  ]\n});\n\n// https://tools.ietf.org/html/rfc5639#section-3.7\ndefineCurve('brainpoolP512r1', {\n  type: 'short',\n  prime: null,\n  p: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330871' +\n    '7D4D9B00 9BC66842 AECDA12A E6A380E6 2881FF2F 2D82C685 28AA6056 583A48F3',\n  a: '7830A331 8B603B89 E2327145 AC234CC5 94CBDD8D 3DF91610 A83441CA EA9863BC' +\n    '2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7 2BF2C7B9 E7C1AC4D 77FC94CA',\n  b: '3DF91610 A83441CA EA9863BC 2DED5D5A A8253AA1 0A2EF1C9 8B9AC8B5 7F1117A7' +\n    '2BF2C7B9 E7C1AC4D 77FC94CA DC083E67 984050B7 5EBAE5DD 2809BD63 8016F723',\n  n: 'AADD9DB8 DBE9C48B 3FD4E6AE 33C9FC07 CB308DB3 B3C9D20E D6639CCA 70330870' +\n    '553E5C41 4CA92619 41866119 7FAC1047 1DB1D381 085DDADD B5879682 9CA90069',\n  hash: hash.sha512,\n  gRed: false,\n  g: [\n    '81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D009' +\n      '8EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822',\n    '7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F81' +\n      '11B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892'\n  ]\n});\n\n// https://en.bitcoin.it/wiki/Secp256k1\nvar pre;\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [\n    {\n      a: '3086d221a7d46bcde86c90e49284eb15',\n      b: '-e4437ed6010e88286f547fa90abfe4c3'\n    },\n    {\n      a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n      b: '3086d221a7d46bcde86c90e49284eb15'\n    }\n  ],\n\n  gRed: false,\n  g: [\n    '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n    '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n    pre\n  ]\n});\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG))\n    return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n  this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000;  // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac()\n                 .update(this.V)\n                 .update([ 0x00 ]);\n  if (seed)\n    kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed)\n    return;\n\n  this.K = this._hmac()\n               .update(this.V)\n               .update([ 0x01 ])\n               .update(seed)\n               .digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n\n  assert(entropy.length >= (this.minEntropy / 8),\n         'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval)\n    throw new Error('Reseed is required');\n\n  // Optional encoding\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  }\n\n  // Optional additional data\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n    this._update(add);\n  }\n\n  var temp = [];\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n  this._update(add);\n  this._reseed++;\n  return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null;\n\n  // KeyPair(ec, { priv: ..., pub: ... })\n  if (options.priv)\n    this._importPrivate(options.priv, options.privEnc);\n  if (options.pub)\n    this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair)\n    return pub;\n\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair)\n    return priv;\n\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc\n  });\n};\n\n// TODO: should not validate for X25519\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(enc, compact) {\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  // For Curve25519/Curve448 we have a specific procedure.\n  // TODO Curve448\n  if (this.ec.curve.type === 'mont') {\n    var one = this.ec.curve.one;\n    var mask = one.ushln(255 - 3).sub(one).ushln(3);\n    this.priv = this.priv.or(one.ushln(255 - 1));\n    this.priv = this.priv.and(mask);\n  } else\n    // Ensure that the priv won't be bigger than n, otherwise we may fail\n    // in fixed multiplication method\n    this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' ||\n               this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n  this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n  return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n         ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature)\n    return options;\n\n  if (this._importDER(options, enc))\n    return;\n\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined)\n    this.recoveryParam = null;\n  else\n    this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n  var octetLen = initial & 0xf;\n  var val = 0;\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n  }\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n  if (i === 0) {\n    return buf;\n  }\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n  var len = getLength(data, p);\n  if ((len + p.place) !== data.length) {\n    return false;\n  }\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var rlen = getLength(data, p);\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n  var slen = getLength(data, p);\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n  var s = data.slice(p.place, slen + p.place);\n  if (r[0] === 0 && (r[1] & 0x80)) {\n    r = r.slice(1);\n  }\n  if (s[0] === 0 && (s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n  while (--octets) {\n    arr.push((len >>> (octets << 3)) & 0xff);\n  }\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray();\n\n  // Pad values\n  if (r[0] & 0x80)\n    r = [ 0 ].concat(r);\n  // Pad values\n  if (s[0] & 0x80)\n    s = [ 0 ].concat(s);\n\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n  var arr = [ 0x02 ];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [ 0x30 ];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC))\n    return new EC(options);\n\n  // Shortcut `elliptic.ec(curve-name)`\n  if (typeof options === 'string') {\n    assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n\n    options = curves[options];\n  }\n\n  // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n  if (options instanceof curves.PresetCurve)\n    options = { curve: options };\n\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g;\n\n  // Point on curve\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1);\n\n  // Hash 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  // Key generation for curve25519 is simpler\n  if (this.curve.type === 'mont') {\n    var priv = new BN(drbg.generate(32));\n    return this.keyFromPrivate(priv);\n  }\n\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0)\n      continue;\n\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly, bitSize) {\n  bitSize = bitSize || msg.byteLength() * 8;\n  var delta = bitSize - 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.truncateMsg  = function truncateMSG(msg) {\n  // Bit size is only determined correctly for Uint8Arrays and hex strings\n  var bitSize;\n  if (msg instanceof Uint8Array) {\n    bitSize = msg.byteLength * 8;\n    msg = this._truncateToN(new BN(msg, 16), false, bitSize);\n  } else if (typeof msg === 'string') {\n    bitSize = msg.length * 4;\n    msg = this._truncateToN(new BN(msg, 16), false, bitSize);\n  } else {\n    msg = this._truncateToN(new BN(msg, 16));\n  }\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.truncateMsg(msg);\n\n  // Zero-extend key to provide enough entropy\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes);\n\n  // Zero-extend nonce to have the same byte size as N\n  var nonce = msg.toArray('be', bytes);\n\n  // Instantiate Hmac_DRBG\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  });\n\n  // Number of bytes to generate\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ?\n        options.k(iter) :\n        new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n      continue;\n\n    var kp = this.g.mul(k);\n    if (kp.isInfinity())\n      continue;\n\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0)\n      continue;\n\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0)\n      continue;\n\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n                        (kpX.cmp(r) !== 0 ? 2 : 0);\n\n    // Use complement of `s`, if it is > `n / 2`\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex');\n  // Fallback to the old code\n  var ret = this._verify(this.truncateMsg(msg), signature, key) ||\n  this._verify(this._truncateToN(new BN(msg, 16)), signature, key);\n  return ret;\n};\n\nEC.prototype._verify = function _verify(msg, signature, key) {\n  // Perform primitive values validation\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n    return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n    return false;\n\n  // Validate signature\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity())\n      return false;\n\n    return p.getX().umod(this.n).cmp(r) === 0;\n  }\n\n  // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity())\n    return false;\n\n  // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s;\n\n  // A set LSB signifies that the y-coordinate is odd\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n    throw new Error('Unable to find sencond key candinate');\n\n  // 1.1. Let x = r + jn.\n  if (isSecondKey)\n    r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n  else\n    r = this.curve.pointFromX(r, isYOdd);\n\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n);\n\n  // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null)\n    return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q))\n      return i;\n  }\n  throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  if (params.hasOwnProperty('secret'))\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    if (this._pubBytes && this._pubBytes.length === 33 &&\n        this._pubBytes[0] === 0x40)\n      this._pubBytes = this._pubBytes.slice(1, 33);\n    if (this._pubBytes && this._pubBytes.length !== 32)\n      throw new Error('Unknown point compression format');\n  }\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  // https://tools.ietf.org/html/rfc8032#section-5.1.5\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, compact) {\n  return utils.encode((compact ? [ 0x40 ] : []).concat(this.pubBytes()), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n\n  if (typeof sig !== 'object')\n    sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength)\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n\n  if (eddsa.isPoint(sig.R))\n    this._R = sig.R;\n  if (sig.S instanceof BN)\n    this._S = sig.S;\n\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","'use strict';\n\nvar hash = require('hash.js');\nvar HmacDRBG = require('hmac-drbg');\nvar rand = require('brorand');\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  var 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.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\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.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.curve.n.toArray()\n  });\n\n  return this.keyFromSecret(drbg.generate(32));\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature)\n    return sig;\n  return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.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","// GPG4Browsers - An OpenPGP implementation in javascript\n// Copyright (C) 2011 Recurity Labs GmbH\n//\n// This library is free software; you can redistribute it and/or\n// modify it under the terms of the GNU Lesser General Public\n// License as published by the Free Software Foundation; either\n// version 3.0 of the License, or (at your option) any later version.\n//\n// This library is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n// Lesser General Public License for more details.\n//\n// You should have received a copy of the GNU Lesser General Public\n// License along with this library; if not, write to the Free Software\n// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nimport enums from '../enums';\n\n/**\n * Implementation of the strange \"Marker packet\" (Tag 10)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.8|RFC4880 5.8}:\n * An experimental version of PGP used this packet as the Literal\n * packet, but no released version of PGP generated Literal packets with this\n * tag. With PGP 5.x, this packet has been reassigned and is reserved for use as\n * the Marker packet.\n *\n * The body of this packet consists of:\n *   The three octets 0x50, 0x47, 0x50 (which spell \"PGP\" in UTF-8).\n *\n * Such a packet MUST be ignored when received. It may be placed at the\n * beginning of a message that uses features not available in PGP\n * version 2.6 in order to cause that version to report that newer\n * software is necessary to process the message.\n */\nclass MarkerPacket {\n  static get tag() {\n    return enums.packet.marker;\n  }\n\n  /**\n   * Parsing function for a marker data packet (tag 10).\n   * @param {Uint8Array} bytes - Payload of a tag 10 packet\n   * @returns {Boolean} whether the packet payload contains \"PGP\"\n   */\n  read(bytes) {\n    if (bytes[0] === 0x50 && // P\n        bytes[1] === 0x47 && // G\n        bytes[2] === 0x50) { // P\n      return true;\n    }\n    return false;\n  }\n\n  write() {\n    return new Uint8Array([0x50, 0x47, 0x50]);\n  }\n}\n\nexport default MarkerPacket;\n","import enums from '../enums';\nimport { UnsupportedError } from './packet';\n\n/**\n * Implementation of the Trust Packet (Tag 12)\n *\n * {@link https://tools.ietf.org/html/rfc4880#section-5.10|RFC4880 5.10}:\n * The Trust packet is used only within keyrings and is not normally\n * exported.  Trust packets contain data that record the user's\n * specifications of which key holders are trustworthy introducers,\n * along with other information that implementing software uses for\n * trust information.  The format of Trust packets is defined by a given\n * implementation.\n *\n * Trust packets SHOULD NOT be emitted to output streams that are\n * transferred to other users, and they SHOULD be ignored on any input\n * other than local keyring files.\n */\nclass TrustPacket {\n  static get tag() {\n    return enums.packet.trust;\n  }\n\n  /**\n   * Parsing function for a trust packet (tag 12).\n   * Currently not implemented as we ignore trust packets\n   */\n  read() {\n    throw new UnsupportedError('Trust packets are not supported');\n  }\n\n  write() {\n    throw new UnsupportedError('Trust packets are not supported');\n  }\n}\n\nexport default TrustPacket;\n"],"names":["doneWritingPromise","Symbol","doneWritingResolve","doneWritingReject","readingIndex","ArrayStream","Array","constructor","super","this","Promise","resolve","reject","catch","isArrayStream","input","getReader","isArray","Writer","writer","getWriter","releaseLock","closed","call","stream","prototype","undefined","read","async","length","value","done","readToEnd","join","result","slice","clone","then","push","write","chunk","close","abort","reason","isNode","globalThis","process","versions","NodeReadableStream","require$$0","Readable","isStream","ReadableStream","isPrototypeOf","streams.ReadableStream","isUint8Array","Uint8Array","concatUint8Array","arrays","totalLength","i","Error","pos","forEach","element","set","NodeBuffer","Buffer","require$$1","nodeToWeb","webToNode","nodeStream","canceled","start","controller","pause","on","isBuffer","buffer","byteOffset","byteLength","enqueue","e","error","pull","resume","cancel","destroy","NodeReadable","webStream","options","_reader","streams.getReader","size","callback","doneReadingSet","WeakSet","externalBuffer","Reader","streams.isArrayStream","reader","_read","bind","_releaseLock","_cancel","streamType","streams.isStream","streams.nodeToWeb","doneReading","has","add","shift","readLine","returnVal","streams.concat","lineEndIndex","indexOf","concat","substr","unshift","readByte","byte","streams.slice","readBytes","bufferLength","bufferConcat","peekBytes","bytes","values","filter","toPonyfillReadable","toNativeReadable","WritableStream","TransformStream","loadStreamsPonyfill","ponyfill","adapter","all","createReadableStreamWrapper","toStream","toArrayStream","list","some","map","transform","transformWithCancel","transforms","prev","transformPair","readable","writable","pipe","preventClose","concatStream","concatArrayStream","target","preventAbort","preventCancel","ready","pipeTo","transformRaw","transformStream","customCancel","backpressureChangePromiseResolve","backpressureChangePromiseReject","outputController","pulled","cancelled","highWaterMark","finish","output","data","result1","result2","fn","incomingTransformController","incoming","pipeDonePromise","outgoing","setTimeout","parse","returnValue","transformed","remainder","teed","tee","overwrite","passiveClone","Object","entries","getOwnPropertyDescriptors","name","descriptor","get","defineProperty","begin","end","Infinity","bytesRead","Math","max","terminate","lastBytes","console","warn","fromAsync","subarray","arrayStream","BigInteger","n","hex","hexByte","toString","BigInt","iinc","inc","idec","dec","iadd","x","isub","sub","imul","mul","imod","m","isNegative","mod","modExp","isZero","isOne","exp","r","lsb","rx","modInv","gcd","_egcd","b","y","xPrev","yPrev","a","q","tmp","ileftShift","leftShift","irightShift","rightShift","equal","lt","lte","gt","gte","isEven","abs","res","toNumber","number","Number","MAX_SAFE_INTEGER","getBit","bitLength","zero","one","negOne","bitlen","eight","len","toUint8Array","endian","rawLength","offset","parseInt","reverse","detectBigInt","byValue","curve","p256","secp256r1","prime256v1","p384","secp384r1","p521","secp521r1","secp256k1","ed25519Legacy","ED25519","ed25519","Ed25519","curve25519Legacy","X25519","cv25519","curve25519","Curve25519","brainpoolP256r1","brainpoolP384r1","brainpoolP512r1","s2k","simple","salted","iterated","gnu","publicKey","rsaEncryptSign","rsaEncrypt","rsaSign","elgamal","dsa","ecdh","ecdsa","eddsaLegacy","eddsa","aedh","aedsa","x25519","x448","ed448","symmetric","plaintext","idea","tripledes","cast5","blowfish","aes128","aes192","aes256","twofish","compression","uncompressed","zip","zlib","bzip2","hash","md5","sha1","ripemd","sha256","sha384","sha512","sha224","webHash","aead","eax","ocb","experimentalGCM","packet","publicKeyEncryptedSessionKey","signature","symEncryptedSessionKey","onePassSignature","secretKey","secretSubkey","compressedData","symmetricallyEncryptedData","marker","literalData","trust","userID","publicSubkey","userAttribute","symEncryptedIntegrityProtectedData","modificationDetectionCode","aeadEncryptedData","literal","binary","text","utf8","mime","standalone","certGeneric","certPersona","certCasual","certPositive","certRevocation","subkeyBinding","keyBinding","key","keyRevocation","subkeyRevocation","timestamp","thirdParty","signatureSubpacket","signatureCreationTime","signatureExpirationTime","exportableCertification","trustSignature","regularExpression","revocable","keyExpirationTime","placeholderBackwardsCompatibility","preferredSymmetricAlgorithms","revocationKey","issuer","notationData","preferredHashAlgorithms","preferredCompressionAlgorithms","keyServerPreferences","preferredKeyServer","primaryUserID","policyURI","keyFlags","signersUserID","reasonForRevocation","features","signatureTarget","embeddedSignature","issuerFingerprint","preferredAEADAlgorithms","certifyKeys","signData","encryptCommunication","encryptStorage","splitPrivateKey","authentication","sharedPrivateKey","armor","multipartSection","multipartLast","signed","message","privateKey","noReason","keySuperseded","keyCompromised","keyRetired","userIDInvalid","modificationDetection","v5Keys","type","debugMode","env","NODE_ENV","util","isString","String","stream.isUint8Array","stream.isStream","readNumber","writeNumber","readDate","Date","writeDate","time","numeric","floor","getTime","normalizeDate","now","readMPI","bytelen","leftPad","padded","uint8ArrayToMPI","bin","bitSize","uint8ArrayBitLength","stripped","ceil","prefix","nbits","hexToUint8Array","k","uint8ArrayToHex","h","c","stringToUint8Array","str","stream.transform","charCodeAt","uint8ArrayToString","bs","j","fromCharCode","apply","encodeUTF8","encoder","TextEncoder","lastChunk","encode","decodeUTF8","decoder","TextDecoder","decode","stream.concat","stream.concatUint8Array","equalsUint8Array","array1","array2","writeChecksum","s","printDebug","log","printDebugError","t","double","doubleVar","last","shiftRight","array","bits","getWebCrypto","crypto","subtle","getBigInteger","default","getNodeCrypto","getNodeZlib","getNodeBuffer","require$$2","getHardwareConcurrency","navigator","hardwareConcurrency","require$$3","cpus","isEmailAddress","test","canonicalizeEOL","carryOverCR","index","indices","normalized","nativeEOL","copyWithin","removeTrailingSpaces","split","line","wrapError","constructAllowedPackets","allowedClasses","PacketClass","tag","anyPromise","promises","exception","promise","selectUint8Array","cond","selectUint8","isAES","cipherAlgo","enums","encodeChunk","decodeChunk","buf","lines","encoded","spaces","spacechars","spacechar","includes","decoded","b64ToUint8Array","base64","replace","uint8ArrayToB64","url","from","btoa","atob","preferredHashAlgorithm","preferredSymmetricAlgorithm","preferredCompressionAlgorithm","deflateLevel","aeadProtect","preferredAEADAlgorithm","aeadChunkSizeByte","s2kIterationCountByte","allowUnauthenticatedMessages","allowUnauthenticatedStream","checksumRequired","minRSABits","passwordCollisionCheck","revocationsExpire","allowInsecureDecryptionWithSigningKeys","allowInsecureVerificationWithReformattedKeys","constantTimePKCS1Decryption","constantTimePKCS1DecryptionSupportedSymmetricAlgorithms","Set","minBytesForWebCrypto","ignoreUnsupportedPackets","ignoreMalformedPackets","additionalAllowedPackets","showVersion","showComment","versionString","commentString","maxUserIDLength","knownNotations","useIndutnyElliptic","rejectHashAlgorithms","rejectMessageHashAlgorithms","rejectPublicKeyAlgorithms","rejectCurves","getType","header","match","addheader","customComment","config","getCheckSum","base64.encode","crc","len32","isLittleEndian","arr32","Uint32Array","crc_table","createcrc24","ArrayBuffer","DataView","setInt16","Int16Array","verifyHeaders","headers","splitChecksum","body","checksum","lastEquals","lastIndexOf","unarmor","defaultConfig","reSplit","reEmptyLine","headersDone","textDone","lastHeaders","base64.decode","stream.transformPair","stream.getReader","stream.getWriter","parts","checksumVerified","stream.readToEnd","stream.passiveClone","stream.pipe","checksumVerifiedString","stream.isArrayStream","messageType","partIndex","partTotal","bodyClone","KeyID","toHex","equals","keyID","matchWildcard","isWildcard","isNull","static","AES_asm","gexp3","glog3","ginit_done","gmul","aes_sbox","aes_sinv","aes_enc","aes_dec","aes_init_done","aes_init","_s","ginv","d","ginit","wrapper","foreign","heap","asm","stdlib","S0","S1","S2","S3","I0","I1","I2","I3","N0","N1","N2","N3","M0","M1","M2","M3","H0","H1","H2","H3","R","HEAP","DATA","_core","x0","x1","x2","x3","t1","t2","t3","y0","y1","y2","y3","_ecb_enc","_ecb_dec","_cbc_enc","_cbc_dec","_cfb_enc","_cfb_dec","_ofb","_ctr","_gcm_mac","z0","z1","z2","z3","set_rounds","set_state","s0","s1","s2","s3","set_iv","i0","i1","i2","i3","set_nonce","n0","n1","n2","n3","set_mask","m0","m1","m2","m3","set_counter","c0","c1","c2","c3","get_state","get_iv","gcm_init","cipher","mode","ret","_cipher_modes","mac","_mac_modes","set_key","ks","k0","k1","k2","k3","k4","k5","k6","k7","ekeys","dkeys","rcon","jj","ENC","ECB","CBC","CFB","OFB","CTR","DEC","MAC","GCM","HEAP_DATA","is_bytes","_heap_init","heapSize","_heap_write","hpos","dpos","dlen","hlen","wlen","joinBytes","arg","totalLenght","reduce","sum","curr","cursor","IllegalStateError","args","IllegalArgumentError","SecurityError","heap_pool","asm_pool","AES","iv","padding","acquire_asm","pop","reset","release_asm","keylen","keyview","getUint32","ivview","AES_Encrypt_process","TypeError","amode","rpos","AES_Encrypt_finish","plen","rlen","hasOwnProperty","p","AES_Decrypt_process","AES_Decrypt_finish","pad","pcheck","AES_ECB","encrypt","decrypt","aes","C","aesECB","block","blockSize","keySize","des","keys","spfunction1","spfunction2","spfunction3","spfunction4","spfunction5","spfunction6","spfunction7","spfunction8","temp","right1","right2","left","right","looping","cbcleft","cbcleft2","cbcright","cbcright2","endloop","loopinc","iterations","padLength","paddedMessage","desAddPadding","desRemovePadding","desCreateKeys","pc2bytes0","pc2bytes1","pc2bytes2","pc2bytes3","pc2bytes4","pc2bytes5","pc2bytes6","pc2bytes7","pc2bytes8","pc2bytes9","pc2bytes10","pc2bytes11","pc2bytes12","pc2bytes13","shifts","lefttemp","righttemp","TripleDES","OpenPGPSymEncCAST5","BlockSize","KeySize","setKey","masking","rotate","keySchedule","getBlockSize","src","dst","l","f1","f2","f3","scheduleA","scheduleB","I","sBox","inn","w","ki","half","round","CAST5","MAXINT","rotw","getW","setW","splice","getB","TF","tf","keyBytes","dataBytes","dataOffset","tfsKey","tfsM","tfsG0","tfsG1","tfsFrnd","blk","tfsIrnd","blocksize","open","meKey","moKey","inKey","kLen","sKey","f01","f5b","fef","q0","q1","q2","q3","ror4","ashx","ffm5b","ffmEf","mdsRem","u","qp","hFun","finalize","createTwofish","Blowfish","BF","bf","init","encryptBlock","BLOCKSIZE","SBOXES","PARRAY","NN","_clean","xx","_F","yy","dd","cc","bb","aa","sboxes","_encryptBlock","vals","ii","dataL","dataR","parray","vector","off","_decryptBlock","kk","sha1_asm","H4","TOTAL0","TOTAL1","I4","O0","O1","O2","O3","O4","w0","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","w19","w20","w21","w22","w23","w24","w25","w26","w27","w28","w29","w30","w31","w32","w33","w34","w35","w36","w37","w38","w39","w40","w41","w42","w43","w44","w45","w46","w47","w48","w49","w50","w51","w52","w53","w54","w55","w56","w57","w58","w59","w60","w61","w62","w63","w64","w65","w66","w67","w68","w69","w70","w71","w72","w73","w74","w75","w76","w77","w78","w79","_core_heap","_state_to_heap","h0","h1","h2","h3","h4","total0","total1","hashed","hmac_reset","_hmac_opad","hmac_init","p0","p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","p11","p12","p13","p14","p15","hmac_finish","t0","t4","pbkdf2_generate_block","count","Hash","HASH_SIZE","Sha1","NAME","BLOCK_SIZE","asm_function","Sha256","H5","H6","H7","I5","I6","I7","O5","O6","O7","f","g","h5","h6","h7","t5","t6","t7","sha256_asm","assert","val","msg","module","create","ctor","superCtor","super_","enumerable","configurable","TempCtor","inherits","enc","hi","lo","zero2","htonl","zero8","word","ah","al","bh","bl","ch","cl","dh","dl","carry","eh","el","num","BlockHash","pending","pendingTotal","outSize","hmacStrength","_delta8","_delta32","update","utils","toArray","join32","_update","digest","_pad","_digest","rotr32","z","ch32","p32","maj32","sum32","sum32_4","sum32_5","shaCommon","s0_256","s1_256","g0_256","g1_256","common","sha256_K","SHA256","W","SHA224","T1","T2","toHex32","split32","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","SHA512","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","SHA384","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotl32","sum32_3","RIPEMD160","K","Kh","A","B","D","E","Ah","Bh","Ch","Dh","Eh","T","rh","sh","md5cycle","ff","gg","add32","cmn","md5blk","md5blks","hex_chr","rhex","webCrypto","nodeCrypto","nodeCryptoHashes","getHashes","nodeHash","shasum","createHash","hashjsHash","webCryptoHash","hashInstance","asmcryptoHash","hashFunctions","entree","state","substring","tail","md51","ripemd160","algo","getHashByteLength","AES_CFB","getCipher","algoName","knownAlgos","getCiphers","nodeAlgos","pt","cipherObj","createCipheriv","nodeEncrypt","ALGO","_key","importKey","cbc_pt","ct","xorMut","webEncrypt","cfb","aesEncrypt","cipherfn","block_size","blockc","ciphertext","encblock","decipherObj","createDecipheriv","nodeDecrypt","aesDecrypt","blockp","decblock","AES_CTR","nonce","AES_CTR_set_options","counter","mask","pow","view","AES_CBC","blockLength","rightXORMut","zeroBlock","CMAC","cbc","padding2","ivLength","tagLength","two","OMAC","cmac","en","final","EAX","omac","ctr","adata","omacNonce","omacAdata","ciphered","ctTag","omacCiphered","getNonce","chunkIndex","ntz","S","xor","OCB","encipher","decipher","maxNtz","crypt","newMaxNtz","extendKeyVariables","paddedNonce","bottom","kTop","stretched","xorInput","$","cipherInput","cipherName","ciphers","mask_x","mask_$","constructKeyVariables","crypted","_AES_GCM_data_maxLength","AES_GCM","tagSize","gamma0","noncelen","noncebuf","_gcm_mac_process","nonceview","RangeError","cleartext","tagsize","AES_GCM_encrypt","AES_GCM_decrypt","AES_GCM_Encrypt_process","AES_GCM_Encrypt_finish","alen","clen","AES_GCM_Decrypt_process","tlen","AES_GCM_Decrypt_finish","atag","acheck","setAAD","getAuthTag","de","setAuthTag","additionalData","gcm","nacl","gf","Float64Array","randombytes","_9","gf0","gf1","_121665","D2","X","Y","crypto_verify_32","xi","yi","vn","set25519","car25519","o","v","sel25519","pack25519","neq25519","par25519","unpack25519","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","inv25519","crypto_scalarmult","x32","x16","crypto_scalarmult_base","cswap","pack","tx","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","unpackneg","chk","den","den2","den4","den6","pow2523","crypto_sign_BYTES","checkArrayTypes","arguments","cleanup","arr","scalarMult","box","keyPair","fromSecretKey","sign","signedMsg","sm","smlen","crypto_sign","detached","sig","verify","crypto_sign_open","fromSeed","seed","setPRNG","self","msCrypto","getRandomValues","min","require","randomBytes","exports","getRandomBytes","getRandomBigInteger","modulus","randomProbablePrime","thirty","adds","isProbablePrime","smallPrimes","every","divisionTest","fermat","rand","millerRabin","hash_headers","emeEncode","keyLength","mLength","PS","getPKCS1Padding","emeDecode","randomPayload","separatorNotFound","psLen","payload","isValidPadding","emsaEncode","emLen","hashPrefix","tLen","fill","EM","asn1","RSAPrivateKey","define","seq","obj","int","RSAPublicKey","hashAlgo","hashName","jwk","pNum","qNum","dNum","dq","dp","kty","qi","ext","privateToJWK","webSign","err","BN","pBNum","qBNum","dBNum","subn","createSign","keyObject","version","publicExponent","privateExponent","prime1","prime2","exponent1","exponent2","coefficient","createPrivateKey","der","format","pem","label","nodeSign","bnSign","publicToJWK","webVerify","createVerify","nodeVerify","EM1","EM2","bnVerify","constants","RSA_PKCS1_PADDING","publicEncrypt","bnEncrypt","privateDecrypt","unblinder","blinder","mp","mq","bnDecrypt","keyGenOpt","modulusLength","generateKey","exportKey","generateKeyPair","opts","publicKeyEncoding","privateKeyEncoding","prv","_","toArrayLike","phi","nSizeOver3","rde","pSize","n1023","threshold","rqx","OID","oid","getName","keyFromPrivate","indutnyCurve","priv","keyFromPublic","pub","validate","getIndutnyCurve","elliptic","ec","readSimpleLength","writeSimpleLength","writePartialLength","power","writeTag","tag_type","writeHeader","supportsStreaming","readPackets","callbackReturned","peekedBytes","headerByte","packetLength","packetLengthType","packetSupportsStreaming","wasPartialLength","stream.ArrayStream","stream.TransformStream","lengthByte","nextPacket","UnsupportedError","params","captureStackTrace","UnparseablePacket","rawContent","webCurves","knownCurves","getCurves","nodeCurves","curves","keyType","node","web","payloadSize","sharedSize","CurveWithOID","oidOrName","webCryptoKey","namedCurve","jwkToRawPublic","webGenKeyPair","createECDH","generateKeys","getPublicKey","getPrivateKey","nodeGenKeyPair","genKeyPair","entropy","getPublic","getPrivate","validateStandardParams","Q","supportedCurves","curveName","dG","validationErrors","eq","bufX","bufY","rawPublicToJWK","crv","ECPrivateKey","parameters","unused","ECDSASignature","ellipticSign","SubjectPublicKeyInfo","algorithm","subjectPublicKey","ellipticVerify","octstr","explicit","optional","any","bitstr","AlgorithmIdentifier","objid","use","getPreferredHashAlgo","RS","wrap","IV","P","unpack","unwrap","createArrayBuffer","setUint32","provided","computed","buildEcdhParam","public_algo","kdfParams","fingerprint","kdf","param","stripLeading","stripTrailing","genPublicEphemeralKey","sharedKey","genPrivateEphemeralKey","recipient","deriveBits","public","webPublicEphemeralKey","sender","computeSecret","nodePublicEphemeralKey","V","derive","ellipticPublicEphemeralKey","secret","webPrivateEphemeralKey","setPrivateKey","nodePrivateEphemeralKey","ellipticPrivateEphemeralKey","pkcs5.encode","wrappedKey","aesKW.wrap","pkcs5.decode","aesKW.unwrap","nodeSubtleCrypto","webcrypto","HKDF","inputKey","salt","info","outLen","importedKey","hashAlgoName","computeHMAC","hmacKey","hmacMessage","createHmac","pseudoRandomKey","hashLen","outputKeyingMaterial","roundInput","HKDF_INFO","recipientA","ephemeralSecretKey","sharedSecret","ephemeralPublicKey","hkdfInput","computeHKDF","xr","u1","u2","qSize","n150","rsa","publicParams","curveSize","publicKeyParams","privateKeyParams","ECDHSymmetricKey","KDFParams","ECDHXSymmetricKey","instance","followLength","checkSupportedCurve","keyAlgo","symmetricAlgo","ECDHSymkey","ecdhX","fromObject","sessionKeyParams","privateParams","algosWithNativeRepresentation","orderedParams","generate","validateParams","algoModule","prefixrandom","repeat","random","pkcs1","pkcs5","aesKW","assign","TYPED_OK","Uint16Array","Int32Array","shrinkBuf","fnTyped","arraySet","dest","src_offs","dest_offs","flattenChunks","chunks","fnUntyped","Buf8","Buf16","Buf32","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","STORED_BLOCK","STATIC_TREES","DYN_TREES","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","MAX_MATCH","base_length","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","static_l_desc","static_d_desc","static_bl_desc","TreeDesc","dyn_tree","stat_desc","max_code","d_code","dist","put_short","pending_buf","send_bits","bi_valid","bi_buf","send_code","tree","bi_reverse","code","gen_codes","bl_count","next_code","init_block","dyn_ltree","dyn_dtree","bl_tree","opt_len","static_len","last_lit","matches","bi_windup","smaller","depth","_n2","_m2","pqdownheap","heap_len","compress_block","ltree","dtree","lc","extra","lx","d_buf","l_buf","build_tree","desc","stree","heap_max","base","xbits","overflow","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","static_init_done","_tr_init","tr_static_init","l_desc","d_desc","bl_desc","_tr_stored_block","stored_len","utils.arraySet","window","copy_block","_tr_align","bi_flush","_tr_flush_block","opt_lenb","static_lenb","max_blindex","level","strm","data_type","black_mask","detect_data_type","build_bl_tree","strategy","lcodes","dcodes","blcodes","rank","send_all_trees","_tr_tally","lit_bufsize","adler32","adler","crcTable","table","makeTable","crc32","MAX_MEM_LEVEL","MIN_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","flush_pending","avail_out","pending_out","next_out","total_out","flush_block_only","trees._tr_flush_block","block_start","strstart","put_byte","putShortMSB","read_buf","avail_in","next_in","total_in","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","more","window_size","hash_size","head","insert","ins_h","hash_shift","hash_mask","deflate_fast","flush","hash_head","bflush","match_length","trees._tr_tally","max_lazy_match","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","func","configuration_table","max_block_size","pending_buf_size","max_start","DeflateState","status","gzhead","gzindex","method","last_flush","w_bits","hash_bits","utils.Buf16","deflateReset","trees._tr_init","deflateResetKeep","lm_init","deflate","old_flush","beg","hcrc","comment","os","level_flags","bstate","deflate_huff","deflate_rle","trees._tr_align","trees._tr_stored_block","__","_utf8len","utils.Buf8","string2buf","m_pos","buf_len","str_len","ZStream","Deflate","chunkSize","windowBits","memLevel","opt","raw","gzip","ended","zlib_deflate.deflateInit2","dictionary","dict","strings.string2buf","avail","next","tmpDict","dictLength","zlib_deflate.deflateSetDictionary","_dict_set","_mode","zlib_deflate.deflate","onEnd","onData","utils.shrinkBuf","zlib_deflate.deflateEnd","utils.flattenChunks","BAD","TYPE","inflate_fast","_in","_out","hold","here","op","from_source","dmax","wsize","whave","wnext","s_window","lcode","lencode","dcode","distcode","lmask","lenbits","dmask","distbits","top","dolen","dodist","sane","MAXBITS","ENOUGH_LENS","ENOUGH_DISTS","CODES","LENS","DISTS","lbase","lext","dbase","dext","inflate_table","lens","lens_index","codes","table_index","work","incr","low","sym","root","drop","used","huff","base_index","offs","here_bits","here_op","here_val","extra_index","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","zswap32","InflateState","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","lendyn","distdyn","back","was","inflateReset","utils.Buf32","inflateResetKeep","inflateInit2","inflateReset2","lenfix","distfix","virgin","fixedtables","updatewindow","copy","inflate","put","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateSetDictionary","dictid","GZheader","Inflate","zlib_inflate.inflateInit2","c.Z_OK","zlib_inflate.inflateGetHeader","zlib_inflate.inflateSetDictionary","allowBufError","c.Z_FINISH","c.Z_NO_FLUSH","strings.binstring2buf","zlib_inflate.inflate","c.Z_NEED_DICT","c.Z_BUF_ERROR","c.Z_STREAM_END","c.Z_SYNC_FLUSH","zlib_inflate.inflateEnd","BITMASK","BitReader","bitOffset","curByte","hasByte","_ensureByte","remaining","seek","n_bit","n_byte","pi","bufToHex","Stream","bufOffset","new_pos","writeByte","_byte","crc32Lookup","getCRC","updateCRC","updateCRCRun","mtf","Err","OK","LAST_BLOCK","NOT_BZIP_DATA","UNEXPECTED_INPUT_EOF","UNEXPECTED_OUTPUT_EOF","DATA_ERROR","OUT_OF_MEMORY","OBSOLETE_INPUT","END_OF_BLOCK","ErrorMessages","_throw","optDetail","Bunzip","inputStream","outputStream","writePos","writeCurrent","writeCount","_start_bunzip","_init_block","_get_next_block","blockCRC","CRC32","dbufSize","nextoutput","streamCRC","targetBlockCRC","origPointer","symToByte","symTotal","groupCount","nSelectors","mtfSymbol","selectors","hufGroup","symCount","groups","minLen","maxLen","MAX_HUFCODE_BITS","permute","pp","MAX_VALUE","byteCount","uc","runPos","dbufCount","selector","dbuf","GROUP_SIZE","nextSym","current","run","writeRun","_read_bunzip","outputBuffer","copies","previous","outbyte","outputsize","coerceInputStream","eof","coerceOutputStream","resizeOk","newBuffer","getBuffer","_coerced","multistream","bz","targetStreamCRC","LiteralDataPacket","date","filename","setText","getText","getBytes","setBytes","setFilename","getFilename","stream.parse","filename_len","filename_length","verified","allowedUnhashedSubpackets","SignaturePacket","signatureType","hashAlgorithm","publicKeyAlgorithm","signatureData","unhashedSubpackets","signedHashValue","created","signatureNeverExpires","exportable","trustLevel","trustAmount","keyNeverExpires","revocationKeyClass","revocationKeyAlgorithm","revocationKeyFingerprint","issuerKeyID","rawNotations","notations","isPrimaryUserID","reasonForRevocationFlag","reasonForRevocationString","signatureTargetPublicKeyAlgorithm","signatureTargetHashAlgorithm","signatureTargetHash","issuerKeyVersion","revoked","readSubPackets","parseSignatureParams","writeParams","stream.fromAsync","serializeParams","writeUnhashedSubPackets","getFingerprintBytes","getKeyID","writeHashedSubPackets","toHash","stream.slice","stream.clone","writeSubPacket","humanReadable","critical","encodedName","readSubPacket","mypos","seconds","trusted","subpacketLength","toSign","writeForHash","calculateTrailer","isMessageSignature","normDate","getExpirationTime","toUpperCase","isExpired","OnePassSignaturePacket","correspondingSig","newPacketFromTag","allowedPackets","packetType","PacketList","packets","parsed","fromStream","throwUnsupportedError","throwMalformedError","unparsedPacket","packetbytes","minLength","powerOf2","LN2","filterByTag","tags","filtered","handle","findPacket","find","indexOfTag","tagIndex","that","CompressedDataPacket","compressed","decompress","compress","compressionName","decompressionFn","decompress_fns","fromBinary","compressionFn","compress_fns","nodeZlib","node_zlib","stream.nodeToWeb","stream.webToNode","pako_zlib","deflateRaw","createDeflateRaw","createDeflate","inflateRaw","createInflateRaw","createInflate","BunzipDecode","SymEncryptedIntegrityProtectedDataPacket","encrypted","sessionKeyAlgorithm","getPrefixRandom","mdc","tohash","decrypted","realHash","verifyHash","AEADEncryptedDataPacket","cipherAlgorithm","aeadAlgorithm","chunkSizeByte","getAEADMode","modeInstance","tagLengthIfDecrypting","tagLengthIfEncrypting","adataBuffer","adataArray","adataTagArray","adataView","chunkIndexArray","latestPromise","cryptedBytes","queuedBytes","finalChunk","cryptedPromise","setInt32","desiredSize","PublicKeyEncryptedSessionKeyPacket","publicKeyID","sessionKey","parseEncSessionKeyParams","encodeSessionKey","publicKeyEncrypt","randomSessionKey","decryptedData","publicKeyDecrypt","computedChecksum","isValidChecksum","decryptedSessionKey","isValidPayload","decodeSessionKey","sessionKeyData","S2K","getCount","passphrase","numBytes","rlength","prefixlen","datalen","SymEncryptedSessionKeyPacket","sessionKeyEncryptionAlgorithm","produceKey","encryptionKey","generateSessionKey","associatedData","toEncrypt","PublicKeyPacket","expirationTimeV3","secretKeyPacket","keyPacket","parsePublicKeyParams","computeFingerprintAndKeyID","writePublicKey","isDecrypted","getCreationTime","computeFingerprint","getFingerprint","hasSameFingerprintAs","other","getAlgorithmInfo","modulo","readPublicKey","SymmetricallyEncryptedDataPacket","FRE","PublicSubkeyPacket","secretSubkeyPacket","UserAttributePacket","attributes","usrAttr","attr","SecretKeyPacket","keyMaterial","isEncrypted","s2kUsage","startOfSecretKeyData","unparseableKeyMaterial","parsePrivateKeyParams","serializedPublicKey","optionalFieldsArr","isDummy","isMissingSecretKeyMaterial","makeDummy","clearPrivateParams","produceEncryptionKey","cleartextWithHash","validParams","generateParams","global","parse5322","inStr","getPos","setPos","initialize","parseString","tokens","semantic","children","ast","parent","child","compareToken","fxnCompare","tok","lit","and","or","prod","invis","colwsp","star","minimum","isUTF8NonAscii","cr","crlf","lf","dquote","htab","sp","vchar","accept","rfc6532","wsp","quotedPair","obsQP","fws","obsFws","ctext","obsCtext","ccontent","cfws","atext","atom","dotAtomText","maybeText","dotAtom","qtext","obsQtext","qcontent","quotedString","address","mailbox","group","nameAddr","addrSpec","displayName","angleAddr","obsAngleAddr","groupList","obsPhrase","collapseWhitespace","mailboxList","obsMboxList","addressList","obsAddrList","obsGroupList","localPart","obsLocalPart","dtext","obsDtext","domainLiteral","domain","obsDomain","rejectTLD","obsNoWsCtl","strict","atInDisplayName","obsRoute","obsDomainList","findNode","stack","findAllNodesNoChildren","names","namesLookup","giveResult","addresses","groupsAndMailboxes","groupOrMailbox","giveResultGroup","giveResultMailbox","simplifyResult","oneResult","partial","groupName","groupResultMailboxes","mailboxes","grabSemantic","aspec","findAllNodes","comments","local","concatComments","startProduction","handleOpts","startAt","defs","isNullUndef","defaults","isObject","parseOneAddress","parseAddressList","parseFrom","parseSender","parseReplyTo","UserIDPacket","email","components","emailAddresses","otherUserID","SecretSubkeyPacket","Signature","packetlist","getSigningKeyIDs","generateSecretSubkey","rsaBits","generateSecretKey","getLatestValidSignature","signatures","dataToVerify","latestValid","$1","$2","toLowerCase","isDataExpired","expirationTime","getKeyExpirationTime","createBindingSignature","subkey","primaryKey","dataToSign","signatureProperties","createSignaturePacket","prefAlgo","primaryUser","getPrimaryUser","selfCertification","getPreferredCurveHashAlgo","getPreferredAlgo","userIDs","defaultAlgo","preferredSenderAlgo","prefPropertyName","senderAlgoSupport","recipientPrefs","Boolean","signingKeyPacket","signaturePacket","mergeSignatures","source","checkFn","sourceSig","destSig","isDataRevoked","revocations","revocationKeyIDs","revocationSignature","sanitizeKeyOptions","subkeyDefaults","isValidSigningKeyPacket","isValidEncryptionKeyPacket","isValidDecryptionKeyPacket","checkKeyRequirements","algoInfo","User","userPacket","mainKey","selfCertifications","otherCertifications","revocationSignatures","toPacketList","user","signingKeys","isPrivate","signingKey","getSigningKey","certificate","verificationKeys","issuerKeys","getKeys","isRevoked","certifications","certification","valid","verifyCertificate","sourceUser","srcSelfSig","srcRevSig","flag","string","Subkey","subkeyPacket","bindingSignatures","helper.isDataRevoked","bindingSignature","helper.getLatestValidSignature","helper.isDataExpired","keyExpiry","helper.getKeyExpirationTime","sigExpiry","helper.mergeSignatures","srcBindSig","helper.createSignaturePacket","allowedRevocationPackets","mainKeyPacketTags","keyPacketTags","privateSubkey","Key","packetListToStructure","disallowedPackets","primaryKeyID","ignoreUntil","users","subkeys","directSignatures","clonePrivateParams","getPrototypeOf","getSubkeys","getKeyIDs","getUserIDs","verifyPrimaryKey","sort","helper.isValidSigningKeyPacket","helper.checkKeyRequirements","helper.isValidEncryptionKeyPacket","directSignature","primaryKeyExpiry","selfSigKeyExpiry","selfSigExpiry","directSigKeyExpiry","cert","sourceKey","destSubkey","srcSubkey","updatedKey","usersToUpdate","dstUser","srcUser","userToUpdate","newUser","subkeysToUpdate","dstSubkey","subkeyToUpdate","newSubkey","revocationCertificate","privateKeys","userSign","certify","verifyAllCertifications","results","PublicKey","toPublic","PrivateKey","keyPackets","pubKeyPacket","fromSecretKeyPacket","pubSubkeyPacket","fromSecretSubkeyPacket","helper.isValidDecryptionKeyPacket","allDummies","defaultOptions","helper.sanitizeKeyOptions","helper.generateSecretSubkey","helper.createBindingSignature","packetList","allowedKeyPackets","createKey","wrapKeyObject","secretSubkeyPackets","subkeyPassphrase","createPreferredAlgos","algos","preferredAlgo","userIDPacket","subkeyOptions","subkeySignaturePacket","allowedMessagePackets","allowedSymSessionKeyPackets","allowedDetachedSignaturePackets","Message","getEncryptionKeyIDs","keyIDs","unwrapCompressed","onePassSigList","decryptionKeys","passwords","sessionKeys","sessionKeyObjects","decryptSessionKeys","symEncryptedPacketlist","symEncryptedPacket","decryptedPromise","algorithmName","stream.cancel","resultMsg","decryptedSessionKeyPackets","skeskPackets","password","skeskPacket","pkeskPackets","pkeskPacket","decryptionKey","decryptionKeyPackets","getDecryptionKeys","decryptionKeyPacket","serialisedPKESK","pkeskPacketCopy","seen","item","getLiteralData","encryptionKeys","aeadAlgorithmName","supported","isAEADSupported","getEncryptionKey","maybeKey","wildcard","encryptionKeyIDs","encryptSessionKey","pkESKeyPacket","testDecrypt","accumulator","currentValue","encryptPassword","symEncryptedSessionKeyPacket","pwd","signingKeyIDs","literalDataPacket","existingSigPacketlist","onePassSig","signingKeyID","onePassSignatureList","createSignaturePackets","literalDataList","signatureList","correspondingSigResolve","correspondingSigReject","createVerificationObjects","verifyDetached","detachedSignature","unverifiedSigningKey","signaturePacketPromise","verifiedSig","createVerificationObject","CleartextMessage","newSignature","hashes","ar","checkMessage","checkCleartextOrMessage","checkOutputMessageFormat","defaultConfigPropsCount","checkConfig","inputConfigProps","inputProp","convertStream","streaming","encoding","setEncoding","stream.toNativeReadable","linkStreams","formatObject","object","SymbolPolyfill","iterator","description","noop","globals","typeIsObject","rethrowAssertionErrorRejection","originalPromise","originalPromiseThen","originalPromiseResolve","originalPromiseReject","newPromise","executor","promiseResolvedWith","promiseRejectedWith","PerformPromiseThen","onFulfilled","onRejected","uponPromise","uponFulfillment","uponRejection","transformPromiseWith","fulfillmentHandler","rejectionHandler","setPromiseIsHandledToTrue","queueMicrotask","globalQueueMicrotask","resolvedPromise","reflectCall","F","Function","promiseCall","SimpleQueue","_cursor","_size","_front","_elements","_next","_back","oldBack","newBack","QUEUE_MAX_ARRAY_SIZE","oldFront","newFront","oldCursor","newCursor","elements","peek","front","ReadableStreamReaderGenericInitialize","_ownerReadableStream","_state","defaultReaderClosedPromiseInitialize","defaultReaderClosedPromiseResolve","defaultReaderClosedPromiseInitializeAsResolved","defaultReaderClosedPromiseInitializeAsRejected","_storedError","ReadableStreamReaderGenericCancel","ReadableStreamCancel","ReadableStreamReaderGenericRelease","defaultReaderClosedPromiseReject","defaultReaderClosedPromiseResetToRejected","readerLockException","_closedPromise","_closedPromise_resolve","_closedPromise_reject","AbortSteps","ErrorSteps","CancelSteps","PullSteps","NumberIsFinite","isFinite","MathTrunc","trunc","assertDictionary","context","assertFunction","assertObject","assertRequiredArgument","position","assertRequiredField","field","convertUnrestrictedDouble","censorNegativeZero","convertUnsignedLongLongWithEnforceRange","upperBound","integerPart","assertReadableStream","IsReadableStream","AcquireReadableStreamDefaultReader","ReadableStreamDefaultReader","ReadableStreamAddReadRequest","readRequest","_readRequests","ReadableStreamFulfillReadRequest","_closeSteps","_chunkSteps","ReadableStreamGetNumReadRequests","ReadableStreamHasDefaultReader","IsReadableStreamDefaultReader","IsReadableStreamLocked","defaultReaderBrandCheckException","resolvePromise","rejectPromise","ReadableStreamDefaultReaderRead","_errorSteps","_disturbed","_readableStreamController","AsyncIteratorPrototype","defineProperties","toStringTag","asyncIterator","ReadableStreamAsyncIteratorImpl","_ongoingPromise","_isFinished","_preventCancel","nextSteps","_nextSteps","return","returnSteps","_returnSteps","ReadableStreamAsyncIteratorPrototype","IsReadableStreamAsyncIterator","_asyncIteratorImpl","streamAsyncIteratorBrandCheckException","setPrototypeOf","NumberIsNaN","isNaN","IsFiniteNonNegativeNumber","IsNonNegativeNumber","DequeueValue","container","pair","_queue","_queueTotalSize","EnqueueValueWithSize","ResetQueue","CreateArrayFromList","ReadableStreamBYOBRequest","IsReadableStreamBYOBRequest","byobRequestBrandCheckException","_view","respond","bytesWritten","_associatedReadableByteStreamController","ReadableByteStreamControllerRespondInternal","ReadableByteStreamControllerRespond","respondWithNewView","isView","firstDescriptor","_pendingPullIntos","bytesFilled","ReadableByteStreamControllerRespondWithNewView","ReadableByteStreamController","byobRequest","IsReadableByteStreamController","byteStreamControllerBrandCheckException","_byobRequest","request","SetUpReadableStreamBYOBRequest","ReadableByteStreamControllerGetDesiredSize","_closeRequested","_controlledReadableByteStream","ReadableByteStreamControllerError","ReadableByteStreamControllerClearAlgorithms","ReadableStreamClose","ReadableByteStreamControllerClose","transferredBuffer","ReadableByteStreamControllerEnqueueChunkToQueue","ReadableStreamHasBYOBReader","ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue","ReadableByteStreamControllerCallPullIfNeeded","ReadableByteStreamControllerEnqueue","_cancelAlgorithm","entry","ReadableByteStreamControllerHandleQueueDrain","autoAllocateChunkSize","_autoAllocateChunkSize","bufferE","pullIntoDescriptor","elementSize","viewConstructor","readerType","shouldPull","_started","ReadableStreamGetNumReadIntoRequests","ReadableByteStreamControllerShouldCallPull","_pulling","_pullAgain","_pullAlgorithm","ReadableByteStreamControllerCommitPullIntoDescriptor","filledView","ReadableByteStreamControllerConvertPullIntoDescriptor","readIntoRequest","_readIntoRequests","ReadableStreamFulfillReadIntoRequest","ReadableByteStreamControllerFillPullIntoDescriptorFromQueue","currentAlignedBytes","maxBytesToCopy","maxBytesFilled","maxAlignedBytes","totalBytesToCopyRemaining","queue","headOfQueue","bytesToCopy","destStart","destOffset","srcOffset","ReadableByteStreamControllerFillHeadPullIntoDescriptor","ReadableByteStreamControllerInvalidateBYOBRequest","ReadableByteStreamControllerShiftPendingPullInto","ReadableByteStreamControllerRespondInClosedState","remainderSize","ReadableByteStreamControllerRespondInReadableState","ReadableByteStreamControllerClearPendingPullIntos","ReadableStreamError","_strategyHWM","SetUpReadableByteStreamControllerFromUnderlyingSource","underlyingByteSource","startAlgorithm","pullAlgorithm","cancelAlgorithm","SetUpReadableByteStreamController","ReadableStreamAddReadIntoRequest","IsReadableStreamBYOBReader","ReadableStreamBYOBReader","byobReaderBrandCheckException","BYTES_PER_ELEMENT","emptyView","ReadableByteStreamControllerPullInto","ReadableStreamBYOBReaderRead","ExtractHighWaterMark","defaultHWM","ExtractSizeAlgorithm","convertQueuingStrategy","convertQueuingStrategySize","convertUnderlyingSinkAbortCallback","original","convertUnderlyingSinkCloseCallback","convertUnderlyingSinkStartCallback","convertUnderlyingSinkWriteCallback","assertWritableStream","IsWritableStream","rawUnderlyingSink","rawStrategy","underlyingSink","convertUnderlyingSink","InitializeWritableStream","sizeAlgorithm","WritableStreamDefaultController","writeAlgorithm","closeAlgorithm","abortAlgorithm","SetUpWritableStreamDefaultController","SetUpWritableStreamDefaultControllerFromUnderlyingSink","locked","streamBrandCheckException$2","IsWritableStreamLocked","WritableStreamAbort","WritableStreamCloseQueuedOrInFlight","WritableStreamClose","AcquireWritableStreamDefaultWriter","WritableStreamDefaultWriter","_writer","_writableStreamController","_writeRequests","_inFlightWriteRequest","_closeRequest","_inFlightCloseRequest","_pendingAbortRequest","_backpressure","_promise","wasAlreadyErroring","_resolve","_reject","_reason","_wasAlreadyErroring","WritableStreamStartErroring","closeRequest","defaultWriterReadyPromiseResolve","closeSentinel","WritableStreamDefaultControllerAdvanceQueueIfNeeded","WritableStreamDealWithRejection","WritableStreamFinishErroring","WritableStreamDefaultWriterEnsureReadyPromiseRejected","WritableStreamHasOperationMarkedInFlight","storedError","writeRequest","WritableStreamRejectCloseAndClosedPromiseIfNeeded","abortRequest","defaultWriterClosedPromiseReject","WritableStreamUpdateBackpressure","backpressure","defaultWriterReadyPromiseInitialize","defaultWriterReadyPromiseReset","_ownerWritableStream","defaultWriterReadyPromiseInitializeAsResolved","defaultWriterClosedPromiseInitialize","defaultWriterReadyPromiseInitializeAsRejected","defaultWriterClosedPromiseResolve","defaultWriterClosedPromiseInitializeAsRejected","IsWritableStreamDefaultWriter","defaultWriterBrandCheckException","defaultWriterLockException","WritableStreamDefaultControllerGetDesiredSize","WritableStreamDefaultWriterGetDesiredSize","_readyPromise","WritableStreamDefaultWriterAbort","WritableStreamDefaultWriterClose","WritableStreamDefaultWriterRelease","WritableStreamDefaultWriterWrite","WritableStreamDefaultWriterEnsureClosedPromiseRejected","_closedPromiseState","defaultWriterClosedPromiseResetToRejected","_readyPromiseState","defaultWriterReadyPromiseReject","defaultWriterReadyPromiseResetToRejected","releasedError","_strategySizeAlgorithm","chunkSizeE","WritableStreamDefaultControllerErrorIfNeeded","WritableStreamDefaultControllerGetChunkSize","WritableStreamAddWriteRequest","enqueueE","_controlledWritableStream","WritableStreamDefaultControllerGetBackpressure","WritableStreamDefaultControllerWrite","IsWritableStreamDefaultController","WritableStreamDefaultControllerError","_abortAlgorithm","WritableStreamDefaultControllerClearAlgorithms","_writeAlgorithm","_closeAlgorithm","WritableStreamMarkCloseRequestInFlight","sinkClosePromise","WritableStreamFinishInFlightClose","WritableStreamFinishInFlightCloseWithError","WritableStreamDefaultControllerProcessClose","WritableStreamMarkFirstWriteRequestInFlight","sinkWritePromise","WritableStreamFinishInFlightWrite","WritableStreamFinishInFlightWriteWithError","WritableStreamDefaultControllerProcessWrite","_readyPromise_resolve","_readyPromise_reject","NativeDOMException","DOMException","DOMException$1","_a","isDOMExceptionConstructor","createDOMExceptionPolyfill","ReadableStreamPipeTo","signal","shuttingDown","currentWrite","actions","shutdownWithAction","action","aborted","addEventListener","isOrBecomesErrored","shutdown","isOrBecomesClosed","WritableStreamDefaultWriterCloseWithErrorPropagation","destClosed","waitForWritesToFinish","oldCurrentWrite","originalIsError","originalError","doTheRest","newError","isError","removeEventListener","resolveLoop","rejectLoop","resolveRead","rejectRead","ReadableStreamDefaultController","IsReadableStreamDefaultController","defaultControllerBrandCheckException$1","ReadableStreamDefaultControllerGetDesiredSize","ReadableStreamDefaultControllerCanCloseOrEnqueue","ReadableStreamDefaultControllerClose","ReadableStreamDefaultControllerEnqueue","ReadableStreamDefaultControllerError","ReadableStreamDefaultControllerClearAlgorithms","_controlledReadableStream","ReadableStreamDefaultControllerCallPullIfNeeded","ReadableStreamDefaultControllerShouldCallPull","SetUpReadableStreamDefaultController","convertUnderlyingSourceCancelCallback","convertUnderlyingSourcePullCallback","convertUnderlyingSourceStartCallback","convertReadableStreamType","convertReadableStreamReaderMode","convertPipeOptions","isAbortSignal","assertAbortSignal","rawUnderlyingSource","underlyingSource","convertUnderlyingDefaultOrByteSource","InitializeReadableStream","SetUpReadableStreamDefaultControllerFromUnderlyingSource","streamBrandCheckException$1","rawOptions","convertReaderOptions","AcquireReadableStreamBYOBReader","pipeThrough","rawTransform","convertReadableWritablePair","destination","branches","cloneForBranch2","reason1","reason2","branch1","branch2","resolveCancelPromise","reading","canceled1","canceled2","cancelPromise","value1","value2","CreateReadableStream","compositeReason","cancelResult","ReadableStreamTee","impl","AcquireReadableStreamAsyncIterator","convertIteratorOptions","convertQueuingStrategyInit","byteLengthSizeFunction","ByteLengthQueuingStrategy","_byteLengthQueuingStrategyHighWaterMark","IsByteLengthQueuingStrategy","byteLengthBrandCheckException","countSizeFunction","CountQueuingStrategy","_countQueuingStrategyHighWaterMark","IsCountQueuingStrategy","countBrandCheckException","convertTransformerFlushCallback","convertTransformerStartCallback","convertTransformerTransformCallback","rawTransformer","rawWritableStrategy","rawReadableStrategy","writableStrategy","readableStrategy","transformer","readableType","writableType","convertTransformer","readableHighWaterMark","readableSizeAlgorithm","writableHighWaterMark","writableSizeAlgorithm","startPromise_resolve","startPromise","_transformStreamController","_backpressureChangePromise","_writable","TransformStreamDefaultControllerPerformTransform","TransformStreamDefaultSinkWriteAlgorithm","TransformStreamError","TransformStreamDefaultSinkAbortAlgorithm","_readable","flushPromise","_flushAlgorithm","TransformStreamDefaultControllerClearAlgorithms","TransformStreamDefaultSinkCloseAlgorithm","TransformStreamSetBackpressure","TransformStreamDefaultSourcePullAlgorithm","TransformStreamErrorWritableAndUnblockWrite","CreateWritableStream","_backpressureChangePromise_resolve","InitializeTransformStream","TransformStreamDefaultController","transformAlgorithm","TransformStreamDefaultControllerEnqueue","transformResultE","flushAlgorithm","_controlledTransformStream","_transformAlgorithm","SetUpTransformStreamDefaultController","SetUpTransformStreamDefaultControllerFromTransformer","IsTransformStream","streamBrandCheckException","IsTransformStreamDefaultController","defaultControllerBrandCheckException","readableController","TransformStreamDefaultControllerTerminate","ReadableStreamDefaultControllerHasBackpressure","extendStatics","__proto__","__extends","isStreamConstructor","startCalled","isReadableStream","isWritableStream","isTransformStream","supportsByobReader","createWrappingReadableSource","parseReadableType","WrappingReadableByteStreamSource","WrappingReadableStreamDefaultSource","typeString","AbstractWrappingReadableStreamSource","underlyingStream","_underlyingReader","_readerMode","_pendingRead","_underlyingStream","_attachDefaultReader","_detachReader","_attachReader","_this","_finishPendingRead","_pullWithDefaultReader","_tryClose","_setPendingRead","readPromise","pendingRead","finishRead","afterRead","_super","supportsByob","_supportsByob","_attachByobReader","_pullWithByobRequest","to","fromArray","createWrappingWritableSink","WrappingWritableStreamSink","underlyingWriter","_pendingWrite","_underlyingWriter","_errorPromise","_errorPromiseReject","_finishErroring","_startErroring","race","_setPendingWrite","_finishPendingWrite","writePromise","pendingWrite","finishWrite","afterWrite","createWrappingTransformer","WrappingTransformStreamTransformer","_onRead","_onError","_flushReject","_onTerminate","_flushResolve","_flushPromise","readerClosed","isReadableStreamConstructor","byteSourceSupported","supportsByteSource","isTransformStreamConstructor","isWritableStreamConstructor","sink","isBN","negative","words","red","_init","wordSize","parseHex","parseBase","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","limbLen","limbPow","imuln","_iaddn","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","out","ncarry","rword","maxJ","groupSize","groupBase","modn","idivn","toJSON","toBuffer","ArrayType","reqLength","littleEndian","andln","iushrn","_countBits","clz32","_zeroBits","zeroBits","toTwos","width","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","uor","iuand","iand","uand","iuxor","ixor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","bl0","bh0","bl1","bh1","bl2","bh2","bl3","bh3","bl4","bh4","bl5","bh5","bl6","bh6","bl7","bh7","bl8","bh8","bl9","bh9","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","rbt","rws","iws","rtws","itws","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","guessLen13b","odd","conjugate","normalize13b","ws","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","carryMask","newCarry","ishln","hint","extended","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","iabs","_ishlnsubmul","_wordDiv","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","r2","acc","egcd","yp","xp","im","isOdd","jm","_invmp","delta","cmpn","invm","bincn","ucmp","gtn","gten","ltn","lten","eqn","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","rinv","minv","ireduce","imulK","mod3","nOne","lpow","inv","wnd","currentLen","mont","nred","minAssert","minUtils","getNAF","naf","getJSF","jsf","d1","d2","m8","m14","m24","cachedProperty","computer","parseBytes","intFromLE","Rand","_rand","getByte","BaseCurve","conf","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","_fixedNafMul","doubles","_getDoubles","step","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","_encode","compact","getX","getY","precompute","beta","_getBeta","_hasDoubles","dbl","ShortCurve","Base","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","MontCurve","i4","a24","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","len1","_endoSplit","v1","v2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","pre","endoMul","JSON","obj2point","isInfinity","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","negate","zinv","zinv2","ay","pz2","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","pz3","eqXToP","zs","xc","normalize","diffAdd","da","cb","jumlAdd","EdwardsCurve","twisted","mOneA","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","short","edwards","ft_1","sha1_K","SHA1","require$$4","Hmac","inner","outer","sha","hmac","PresetCurve","defineCurve","cofactor","HmacDRBG","predResist","minEntropy","_reseed","reseedInterval","entropyEnc","nonceEnc","pers","persEnc","_hmac","kmac","reseed","addEnc","KeyPair","_importPrivate","privEnc","_importPublic","pubEnc","fromPublic","fromPrivate","_importDER","recoveryParam","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","slen","toDER","backHalf","EC","nh","drbg","ns2","_truncateToN","truncOnly","truncateMsg","bkey","ns1","iter","kp","kpX","canonical","_verify","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Qprime","_secret","isPoint","_pub","_pubBytes","fromSecret","encodePoint","lastIx","encodingLength","decodeInt","privBytes","getSecret","pubBytes","_R","_S","_Rencoded","Rencoded","_Sencoded","Sencoded","encodeInt","toBytes","EDDSA","pointClass","keyFromSecret","hashInt","messagePrefix","s_","makeSignature","SG","normed","xIsOdd","require$$5","rest","unknownOptions","stream.loadStreamsPonyfill","stream.toStream","literalDataPacketlist","expectSigned","publicKeys","clonedPrivateKey","passphrases","signingUserIDs","encryptionUserIDs","signatureNotations","checkBinary","checkString","helper.generateSecretKey","getRevocationCertificate","cleartextMessage","checkHashAlgos","hashAlgos","oneHeader","armoredKey","binaryKey","armoredKeys","binaryKeys","keyIndex","newKey","armoredMessage","binaryMessage","oneKeyList","armoredSignature","binarySignature","reformattedKey","sanitize","reformat","revokedKey","applyRevocationCertificate","revoke","signDetached"],"mappings":"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AAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAGtFA,EAAK,GAAK,CACR,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,SAAY,WAAY,UAAY,WACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,UAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,UAAY,SAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WA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AY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,UAAY,WAAY,UAAY,WACpF,UAAY,WAAY,SAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,YAGtFA,EAAK,GAAK,CACR,WAAY,UAAY,WAAY,WAAY,WAAY,SAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UACpF,SAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,UAAY,UACpF,UAAY,WAAY,WAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,UAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WACpF,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UACpF,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,SAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,SAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAGtFA,EAAK,GAAK,CACR,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,WAAY,UACpF,SAAY,WAAY,UAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UACpF,WAAY,UAAY,WAAY,WAAY,UAAY,WAAY,UAAY,WACpF,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,UAAY,UACpF,UAAY,WAAY,SAAY,UAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WACpF,UAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WACpF,WAAY,UAAY,WA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AY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,QAAY,UAC5D,UAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,SAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,YAEtC,CACE,WAAY,WAAY,WAAY,WAAY,SAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,UAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,UAAY,UAAY,UAAY,WAAY,UAC5D,WAAY,UAAY,WAAY,WAAY,SAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,UAC5D,UAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,UAAY,UAAY,WAAY,WAAY,UAAY,WAC5D,SAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,UAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,UAAY,UAAY,WAAY,UAC5D,UAAY,UAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,YAEtC,CACE,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,UAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,SAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,UAC5D,UAAY,WAAY,UAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,SAAY,WAAY,SAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,UAAY,SAAY,WAAY,WAC5D,WAAY,UAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,UAAY,UAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,UAC5D,UAAY,UAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,UAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,QAAY,UAAY,UAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,YAEtC,CACE,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,UAAY,SAAY,WAAY,SAAY,WAAY,WAC5D,UAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,UAAY,WAC5D,SAAY,SAAY,WAAY,WAAY,WAAY,WAC5D,UAAY,UAAY,WAAY,UAAY,WAAY,WAC5D,SAAY,WAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,UAAY,UAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,WAAY,WAAY,WAC5D,WAAY,WAAY,WAAY,UAAY,WAAY,WAC5D,WAAY,UAAY,WAAY,UAAY,W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IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7C,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KACxC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1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